import urllib.request, urllib.parse, urllib.error import http import sqlite3 import json import time import ssl import sys api_key = False # If you have a Google Places API key, enter it here # api_key = 'AIzaSy___IDByT70' if api_key is False: api_key = 42 serviceurl = "http://py4e-data.dr-chuck.net/json?" else : serviceurl = "https://maps.googleapis.com/maps/api/geocode/json?" # Additional detail for urllib # http.client.HTTPConnection.debuglevel = 1 conn = sqlite3.connect('geodata.sqlite') cur = conn.cursor() cur.execute(''' CREATE TABLE IF NOT EXISTS Locations (address TEXT, geodata TEXT)''') # Ignore SSL certificate errors ctx = ssl.create_default_context() ctx.check_hostname = False ctx.verify_mode = ssl.CERT_NONE fh = open("where.data") count = 0 for line in fh: if count > 200 : print('Ανακτήθηκαν 200 τοποθεσίες, επανεκκινήστε για να ανακτήσετε περισσότερες') break address = line.strip() print('') cur.execute("SELECT geodata FROM Locations WHERE address= ?", (memoryview(address.encode()), )) try: data = cur.fetchone()[0] print("Βρέθηκε στη βάση δεδομένων ",address) continue except: pass parms = dict() parms["address"] = address if api_key is not False: parms['key'] = api_key url = serviceurl + urllib.parse.urlencode(parms) print('Ανάκτηση της', url) uh = urllib.request.urlopen(url, context=ctx) data = uh.read().decode() print('Ανακτήθηκαν', len(data), 'χαρακτήρες', data[:20].replace('\n', ' ')) count = count + 1 try: js = json.loads(data) except: print(data) # Εκτυπώνουμε για την περίπτωση που το unicode θα προκαλέσει σφάλμα continue if 'status' not in js or (js['status'] != 'OK' and js['status'] != 'ZERO_RESULTS') : print('==== Αποτυχία Ανάκτησης ====') print(data) break cur.execute('''INSERT INTO Locations (address, geodata) VALUES ( ?, ? )''', (memoryview(address.encode()), memoryview(data.encode()) ) ) conn.commit() if count % 10 == 0 : print('Παύση για λίγο...') time.sleep(5) print("Εκτελέστε το geodump.py για να διαβάσετε τα δεδομένα από τη βάση δεδομένων, ώστε να μπορέσετε να τα οπτικοποιήσετε σε έναν χάρτη.")