Quindi, desidero utilizzare l'eccellente requests module di Kenneth. È incappato in questo problema durante il tentativo di utilizzare il Freebase API.Passare un oggetto JSON a un URL con richieste
In sostanza, le loro API sembra che:
https://www.googleapis.com/freebase/v1/mqlread?query=...
come una query, si aspettano un oggetto JSON, ecco uno che return a list of wines with their country and percentage of alcohol:
[{
"country": null,
"name": null,
"percentage_alcohol": null,
"percentage_alcohol>": 0,
"type": "/food/wine"
}]
Naturalmente, dovremo sfuggire all'inferno da questo prima di passarlo a un URL, quindi la query effettiva sarà simile a questa:
fullurl = 'https://www.googleapis.com/freebase/v1/mqlread?query=%5B%7B%22percentage_alcohol%3E%22%3A+0%2C+%22country%22%3A+null%2C+%22type%22%3A+%22%2Ffood%2Fwine%22%2C+%22name%22%3A+null%2C+%22percentage_alcohol%22%3A+null%7D%5D'
Ora,
r = requests.get(fullurl)
print r.status_code
>>> 400
perché il sito afferma che non poteva analizzare la query.
r2 = urllib2.urlopen(fullurl)
print r2.getcode()
>>> 200
Nessun problema, ho ottenuto un ritorno adeguato. È interessante notare che
# This is the url of our requests.get request
print urllib2.urlopen(r.url).getcode()
>>> 200
Perché? Sto usando il modulo sbagliato? O è un bug in requests
?
Utilizzare il modulo 'json', se non lo si è già. – jdi