2017-09-19 5 views
0

J'utilise un programme pour interroger l'API Google Geocoding et rechercher les coordonnées des noms de villes. J'utilise time.sleep (1) pour m'assurer que je ne dépasse pas la limite de demande par seconde. Je suis également assez sûr que je n'ai pas dépassé la limite quotidienne de la demande et j'ai activé la facturation sur mon compte.L'API Google Geocoding a bloqué mon adresse IP

Le code a travaillé un certain temps il y a, mais maintenant que je le lance, le code renvoie une erreur comme ceci:

raise JSONDecodeError("Expecting value", s, err.value) from None 
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 

Je suis allé à la liaison API dans le navigateur, et il me demande de taper "Nos systèmes ont détecté un trafic inhabituel à partir de votre réseau informatique Cette page vérifie si vous envoyez vraiment les demandes, et non un robot.".

Je ne pense pas que mon code est quelque chose de malveillant, et je me demande ce que j'ai fait mal avec le code.

Voici mon code:

import urllib.parse 
import requests 
import pandas as pd 
import time 


main_api = 'https://maps.googleapis.com/maps/api/geocode/json?' 
api_key = '&key = **********' 
state = "washington," 
country = "US" 

file = r'C:\Users\rin\xy.xlsx' 
xl_workbook = pd.ExcelFile(file) 
df = xl_workbook.parse("xy") 
components = 'components=country:US|state:washington' 

city_name = df['city_name'].tolist() 

for x in post_office: 
    address = x 
    print(">>>>>" + x + "<<<<<") 

    url = main_api + urllib.parse.urlencode({'address': address}) + state + country + api_key + components 
    print(url) 
    json_data = requests.get(url).json() 

    json_status = json_data['status'] 
    print('API status: ' + json_status + '\n') 

    city = json_data['results'][0]['address_components'][0]['long_name'] 
    state = json_data['results'][0]['address_components'][2]['long_name'] 
    if x == city and state == "Washington": 
     print("MATCH:OK" + '\n') 
    if x == city and state == "Oregon": 
     print("ooooooooooo") 
    elif x != city_name: 
     print("WN") 

    if json_status == "OK": 

     formatted_address = json_data['results'][0]["formatted_address"] 
     print() 
     print(formatted_address) 

     LATITUDE = json_data['results'][0]["geometry"]["location"]["lat"] 
     LONGITUDE = json_data['results'][0]["geometry"]["location"]["lng"] 
     print(LATITUDE) 
     print(LONGITUDE) 

     print(">>>>>>>END<<<<<<") 
     print('\n') 

    time.sleep(1) 

Répondre

0

Il semble que vous attendez toujours le Reponse sucess.

Au lieu de

LONGITUDE = json_data['results'][0]["geometry"]["location"]["lng"] 

vous pouvez utiliser

LONGITUDE = json_data['results'][0]["geometry"]["location"].get("lng", None) 

En utilisant la dernière vous ne recevez jamais exception lorsque vous lisez un dict (JSON), même si le dict n'a pas clé que vous attendez.