1+ """ Horrible run-once code to download city data. """
2+
13import time
24import json
5+ import itertools
36from urllib .request import urlopen , quote
47
58MAPS_API_TEMPLATE = "https://maps.googleapis.com/maps/api/distancematrix/json?origins={}&destinations={}&mode=car&units=metric"
9+ STRAIGHT_DISTANCE_TEMPLATE = "http://www.travelmath.com/flying-distance/from/{}/to/{}"
10+
11+
12+ def miles_to_meters (miles ):
13+ return miles / 0.00062137
14+
15+
16+ def get_straight_distance (city_from , city_to ):
17+ city_from = '+' .join (city_from .split (' ' ))
18+ city_to = '+' .join (city_to .split (' ' ))
19+ url = STRAIGHT_DISTANCE_TEMPLATE .format (city_from , city_to )
20+ raw_response = urlopen (url ).read ().decode (encoding = 'UTF-8' )
21+ miles = raw_response .find ("miles" , 20000 )- 10
22+ start_index = raw_response .find (r'"' , miles )+ 2
23+ end_index = raw_response .find (r' ' , start_index + 1 )
24+ straight_distance = raw_response [start_index :end_index ]
25+ num = int (straight_distance .replace (',' ,'' ))
26+ return miles_to_meters (num )
627
728
829def get_city_distance (city_from , city_to ):
@@ -44,7 +65,7 @@ def get_city_distance(city_from, city_to):
4465 "Miami, FL" : ["Orlando, FL" ],
4566}
4667
47- if __name__ == '__main__' :
68+ def get_in_between_distances () :
4869 adjacency_list_with_distance = {}
4970 for city_from in adjacency_list :
5071 distances_to_adjacent_cities = {}
@@ -58,3 +79,19 @@ def get_city_distance(city_from, city_to):
5879 with open ("city_data.json" , "w" ) as f :
5980 f .write (json .dumps (adjacency_list_with_distance ))
6081
82+
83+ def get_straight_distances ():
84+ all_cities = list (adjacency_list .keys ())
85+ straight_distances = dict ([(key , {}) for key in all_cities ])
86+ for (city_from , city_to ) in itertools .permutations (all_cities , 2 ):
87+ distance = get_straight_distance (city_from , city_to )
88+ straight_distances [city_from ][city_to ] = distance
89+ print ("Straight distance from {} to {} is {}" .format (city_from , city_to , distance ))
90+
91+ with open ("straight_city_distances.json" , "w" ) as f :
92+ f .write (json .dumps (straight_distances ))
93+
94+ if __name__ == '__main__' :
95+ get_in_between_distance ()
96+ get_straight_distances ()
97+
0 commit comments