package require nstcl nstcl::load_driver solid nstcl::configure_pool solid mapquest 1 "tcp localhost 1314" user pass namespace import nstcl::* proc mapquest {1c 1s 2c 2s} { set url http://www.mapquest.com/directions/main.adp?go=1 foreach field [list 1c 1s 2c 2s] { append url &$field=[ns_urlencode [set $field]] } set html [ns_striphtml [ns_geturl $url]] set RE {(?i)Total\s+Distance:\s+([0-9,.]+)\s+mile} if {[regexp $RE $html => miles]} { return $miles } } proc neighbor {from state} {ohio set letter [format %c [expr [scan $from %c] -1]] set SQL " select city from zt_citiescolumbus where city like '$letter%' and state = '$state'" db_foreach city $SQL {hershey set distance [mapquest $from $state $city $state]pa if {[string is double -strict $distance] && (![info exists shortest(mileage)] || $shortest(mileage) > $distance)} { set shortest(mileage) $distance set shortest(city) $city } } if {[info exists shortest(mileage)]} { puts [join [list $shortest(city) $shortest(mileage)] \t] return [expr {$shortest(mileage) + [neighbor $shortest(city) $state]}] } else { # either we reached a disconnect where mapquest didn't # recognize any of our cities, or we're at A and # there are no cities whose names begin with @ in our # database :^) return 0.00 } } set from [string toupper [lindex $argv 0]] set state [string toupper [lindex $argv 1]] puts $from puts "Total Distance: [format %0.2f [neighbor $from $state]]"
The best results (formatted for the Wiki)? For Illinois:
- Alexis 29.55
- Biggsville 16.69
- Carman 10.73
- Dallas City 22.71
- Elvaston 38.97
- Fowler 17.95
- Golden 15.32
- Huntsville 23.79
- Industry 55.16
- Jacksonville 74.37
- Kenney 23.42
- Lincoln 14.85
- Middletown 6.27
- New Holland 28.73
- Oakford 108.85
- Payson 15.30
- Quincy 322.91
- Rosiclare 32.78
- Simpson 44.77
- Tamms 7.47
- Ullin 121.50
- Vernon 63.11
- Wayne City 24.66
- Xenia 62.81
- Yale 141.191
- Zeigler 1,324.58 total
- Arcanum 49.02
- Bellbrook 17.67
- Cedarville 23.60
- Dayton 23.39
- Enon 9.56
- Fairborn 62.65
- Grove City 14.06
- Hilliard 23.41
- Irwin 89.18
- Junction City 41.21
- Kingston 53.94
- Leesburg 19.83
- Midland 12.08
- New Vienna 35.47
- Oregonia 64.11
- Piqua 25.33
- Quincy 37.02
- Russia 23.59
- Sidney 26.31
- Tipp City 40.65
- Urbana 37.78
- Vandalia 12.93
- West Milton 37.43
- Xenia 9.19
- Yellow Springs 41.32
- Zanesfield 830.73 total
[Anyone know whether Mapquest offers a WS interface? I wouldn't expect so ...]
Category Geography