From 6b0366ca9e60a2ebdd7dc6ab00d6978db154928e Mon Sep 17 00:00:00 2001 From: Piotr Dobrowolski Date: Tue, 7 Apr 2020 19:34:32 +0200 Subject: [PATCH] add nominatim-based extract-geo script --- formity/scripts.py | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/formity/scripts.py b/formity/scripts.py index 509933f..0dfaa9c 100644 --- a/formity/scripts.py +++ b/formity/scripts.py @@ -1,5 +1,6 @@ import csv import re +import time import click import requests from flask.cli import AppGroup @@ -97,3 +98,33 @@ def extract_places(apikey): print(' -> failed (%s)' % (exc,)) db.session.commit() + +@cli.command('extract-geo') +def extract_geo(): + places = FaceshieldRequest.query.filter(FaceshieldRequest.shipping_latitude == None, FaceshieldRequest.shipping_postalcode != None, FaceshieldRequest.status != Status.rejected, FaceshieldRequest.status != Status.spam).all() + for data in places: + try: + query = { + 'postalcode': data.shipping_postalcode, + 'format': 'json', + 'country': 'Poland', + } + + if data.shipping_street: + query['street'] = data.shipping_street + + print(' * [%s] %r' % (data.id, query)) + resp = requests.get('https://nominatim.openstreetmap.org/search', params=query) + resp_json = resp.json() + if not resp_json: + print(' -> not found') + else: + print(' -> %r' % (resp_json[0],)) + data.shipping_latitude = resp_json[0]['lat'] + data.shipping_longitude = resp_json[0]['lon'] + db.session.commit() + + except Exception as exc: + print(' -> failed (%s)' % (exc,)) + + time.sleep(1.0)