-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathgeocoding_api.py
More file actions
executable file
·99 lines (88 loc) · 3.7 KB
/
geocoding_api.py
File metadata and controls
executable file
·99 lines (88 loc) · 3.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
from flask import Flask, request
import json
import urllib
import urllib2
app = Flask(__name__)
GOOGLE_BASE_URL = 'http://maps.google.com/maps/api/geocode/'
def get_google_json(address):
url_params = {}
url_params['address'] = address
url_params['sensor'] = 'false'
url_params_encode = urllib.urlencode(url_params)
url = GOOGLE_BASE_URL + 'json?' + url_params_encode
google_json = json.load(urllib2.urlopen(url))
return google_json
def parse_google_json(json_data):
data = {}
data['latitude'] = json_data['results'][0]['geometry']['location']['lat']
data['longitude'] = json_data['results'][0]['geometry']['location']['lng']
try:
data['street_number'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'street_number' in x['types']][0]
except IndexError:
data['street_number'] = None
try:
data['postal_code'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'postal_code' in x['types']][0]
except IndexError:
data['postal_code'] = None
try:
data['postal_code_suffix'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'postal_code_suffix' in x['types']][0]
except IndexError:
data['postal_code_suffix'] = None
try:
data['state_abbreviation'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'administrative_area_level_1' in x['types']][0]
except IndexError:
data['state_abbreviation'] = None
try:
data['city_name'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'locality' in x['types']][0]
except IndexError:
data['city_name'] = None
try:
data['county_name'] = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'administrative_area_level_2' in x['types']][0]
except IndexError:
data['county_name'] = None
try:
route = [x['short_name'] for x in json_data['results'][0]['address_components'] if 'route' in x['types']][0]
data['route'] = route
route_split = route.split(' ')
data['street_suffix'] = route_split[-1]
data['street_name'] = ' '.join(route_split[:-1])
except IndexError:
data['route'] = None
data['street_suffix'] = None
data['street_name'] = None
return data
def make_output_obj(parsed_google_json):
result = {}
result['input_index'] = 0
result['candidate_index'] = 0
result['delivery_line_1'] = parsed_google_json['street_number'] + ' ' + parsed_google_json['route']
result['last_line'] = ''
result['delivery_point_barcode'] = ''
result['components'] = {}
result['components']['primary_number'] = parsed_google_json['street_number']
result['components']['street_name'] = parsed_google_json['street_name']
result['components']['street_suffix'] = parsed_google_json['street_suffix']
result['components']['city_name'] = parsed_google_json['city_name']
result['components']['state_abbreviation'] = parsed_google_json['state_abbreviation']
result['components']['zipcode'] = parsed_google_json['postal_code']
result['components']['plus4_code'] = parsed_google_json['postal_code_suffix']
result['components']['delivery_point'] = ''
result['components']['delivery_point_check_digit'] = ''
result['metadata'] = {}
result['metadata']['latitude'] = parsed_google_json['latitude']
result['metadata']['longitude'] = parsed_google_json['longitude']
result['metadata']['county_name'] = parsed_google_json['county_name']
result['analysis'] = {}
return [result]
@app.route('/')
def api_root():
return 'Welcome'
@app.route('/street-address')
def api_articles():
address = request.args.get('street')
google_json = get_google_json(address)
parsed_google_json = parse_google_json(google_json)
output = make_output_obj(parsed_google_json)
return json.dumps(output)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000)