2017-01-03 1 views
1

Ich habe meinen Code nicht geändert, aber jetzt, wenn ich versuche, es zu laufen, ich binArbeiten vor, aber nicht urllib.error.HTTPError bekommen: HTTP-Fehler 400: Bad Request

urllib.error.HTTPError: HTTP Error 400: Bad Request 

Auf diese bekomme

Linie
response = urlopen(url).read().decode('utf8') 

Die uRL ist

url = 'http://api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/{}/{}.json'.format(state.strip(), city) 

Soll ich bis später warten und erneut versuchen, da es bis vor nur eine Stunde arbeitet.

EDIT:

ich Python bin mit 3.5 und haben sich geändert zu

url = quote("http://api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/{}/{}.json").format(state.strip(), city) 

Dies führt in der URL

http%3A//api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/%7B%7D/%7B%7D.json 

und die Fehlermeldung

ValueError: unknown url type: 'http%3A//api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/%7B%7D/%7B%7D.json' 

EDIT 2:

Ich habe

verwendet
url = 'api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/{}/{}.json'.format(state.strip(), city) 
print (url) 
url1 = quote(url) 
url2 = 'http://'+ url1 

Um die Räume zu kodieren, aber ich bin immer noch die 400 Fehler. Ich werde bis morgen warten und es erneut versuchen, vielleicht gibt es ein Problem mit meinem Zugang.

EDIT: Es funktioniert mit Städten ohne die Leerzeichen. Also werde ich weiter versuchen, diejenigen mit Räumen zu bekommen, die alleine arbeiten. Danke für Ihre Hilfe.

+0

Ich denke, es ist wahrscheinlicher, dass Ihre 'url'-Variable nicht korrekt formatiert wurde. Das ist die [Bedeutung von HTTP-Fehler 400] (https://en.wikipedia.org/wiki/List_of_HTTP_status_codes): der Dienst hat die Anfrage erhalten, konnte sie aber nicht verstehen. Bevor Sie urlopen() aufrufen, drucken Sie "url", um zu überprüfen, ob der Status und die Stadt wie erwartet interpoliert sind. –

+0

Ich mache das bereits und ich habe diese http://api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/ID/Boise City.json Als ich zu dieser URL ging ging es ohne ein Problem. Aber jetzt mit jeder Stadt, die ich versucht habe, funktioniert meine Datei nicht. – Sam

+0

Sie sollten Ihre Variablen mit 'urllib.quote()' kodieren, weil Leerzeichen in der URL urlopen durcheinander bringen. Siehe http://stackoverflow.com/questions/21735801/how-to-send-a-urllib2-request-with-added-white-spaces –

Antwort

0

Fügen Sie einfach eine Beispiel-URL-Abfrage in Ihren Webbrowser ein und anhand der Antwort können Sie herausfinden, dass Sie die API entweder übersprungen haben oder Sie aufgrund von Nutzungsbedingungen gesperrt haben. Ich habe es getestet und es funktioniert für mich.

EDIT: PYTHON 3.5 funktioniert!

import requests 
import json 
url = "http://api.wunderground.com/api/f8cb961c53baad52/geolookup/conditions/q/{}/{}.json".format('AZ', 'Chandler') 
response = requests.get(url=url) 
response.json() 

Output:

{ 'current_observation': { 'UV': '0',
'dewpoint_c': 5,
'dewpoint_f': 41,
'dewpoint_string': ' 41 F (5 C)‘,
'display_location': { 'Stadt': 'Chandler',
'Land': 'US',
'country_iso3166': 'US',
....

+0

Ich dachte, das könnte auch das Problem sein, aber als ich zur Admin-Funktion für diese Website ging, sah ich nicht, dass ich zu viele Anrufe an ihre API gemacht hatte. Aber ich werde bis morgen warten und es erneut versuchen. Vielen Dank. – Sam

+0

RATE GRENZEN; ÜBERSETZUNGSPOLITIK. (a.) SCHLÜSSEL; ÜBERWACHUNG. Für die Anzahl der Anfragen, die kostenlos an die API gesendet werden können, gibt es eine tägliche Obergrenze und Minutenbegrenzung. Sie dürfen diesen Schwellenwert nur überschreiten, wenn Sie ein gebührenpflichtiger Abonnent sind oder werden. WUL wird Ihre tägliche Nutzung der API überwachen, um festzustellen, ob Sie den Schwellenwert für die freie Nutzung überschritten haben, indem Sie einen Anwendungsprogrammierschnittstellenschlüssel (den "Schlüssel") verwenden. Auf der Seite "Key Settings" finden Sie Produktpreise, Paketfunktionen und Ratenbegrenzungsstufen. – Shobeir

+0

Ich dachte nicht, dass ich über dem Limit war, denn bevor ich eine E-Mail bekam, sagte ich, ich wäre hinüber gegangen und dieses Mal habe ich nichts bekommen. – Sam