Por lo tanto, quiero utilizar Kenneth 'excelente requests module. Tropezó con este problema al tratar de usar el Freebase API.Pase un objeto JSON a una url con solicitudes
Básicamente, su API se ve así:
https://www.googleapis.com/freebase/v1/mqlread?query=...
como una consulta, que esperan un objeto JSON, aquí está uno que se 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"
}]
Por supuesto, tendremos que escapar de esto antes de pasarlo a una URL, por lo que la consulta real se verá así:
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'
Ahora,
r = requests.get(fullurl)
print r.status_code
>>> 400
porque el sitio afirma que no podría analizar la consulta.
r2 = urllib2.urlopen(fullurl)
print r2.getcode()
>>> 200
No hay problema aquí, obtengo una devolución adecuada. Curiosamente,
# This is the url of our requests.get request
print urllib2.urlopen(r.url).getcode()
>>> 200
¿Por qué? ¿Estoy usando el módulo incorrecto? ¿O es un error en requests
?
Utilice el módulo 'json', si no lo está haciendo todavía. – jdi