Add places search api

master
informatic 2020-04-02 09:50:13 +02:00
parent e7997fab63
commit 0f2654da44
1 changed files with 33 additions and 0 deletions

View File

@ -1,6 +1,7 @@
import csv import csv
import re import re
import click import click
import requests
from flask.cli import AppGroup from flask.cli import AppGroup
from formity.models import FaceshieldRequest, PostalCode from formity.models import FaceshieldRequest, PostalCode
from formity.extensions import db from formity.extensions import db
@ -55,6 +56,7 @@ def import_file(input_file, model, lookup, columns=None, delimiter=',', ignore_h
db.session.commit() db.session.commit()
@cli.command('extract-postalcodes') @cli.command('extract-postalcodes')
def extract_postalcodes(): def extract_postalcodes():
for r in FaceshieldRequest.query.all(): for r in FaceshieldRequest.query.all():
@ -64,3 +66,34 @@ def extract_postalcodes():
r.shipping_city = PostalCode.query.get(r.shipping_postalcode).city r.shipping_city = PostalCode.query.get(r.shipping_postalcode).city
print(r.id, r.shipping_postalcode) print(r.id, r.shipping_postalcode)
db.session.commit() db.session.commit()
@cli.command('extract-places')
@click.option('--apikey')
def extract_places(apikey):
places = FaceshieldRequest.query.filter(FaceshieldRequest.shipping_postalcode == None).all()
for data in places:
print(' * [%d] %s' % (data.id, data.entity_info,))
try:
results = requests.get('https://maps.googleapis.com/maps/api/place/findplacefromtext/json', params={
'input': data.entity_info,
'inputtype': 'textquery',
'fields': 'formatted_address',
'key': apikey,
}).json()
if results['status'] == 'OK':
address = results['candidates'][0]['formatted_address']
re_result = re.findall(r'^(.*), (\d{2}-\d{3}) (.*), Polska$', address)
if not re_result:
print(' -> unparseable', address)
else:
data.shipping_street, data.shipping_postalcode, data.shipping_city = re_result[0]
print(' -> saved', data.shipping_street, data.shipping_postalcode, data.shipping_city)
else:
print(' -> not found (%s)' % (results['status'],))
except Exception as exc:
print(' -> failed (%s)' % (exc,))
db.session.commit()