तो, मैं केनेथ के उत्कृष्ट requests module का उपयोग करना चाहता हूं। Freebase API का उपयोग करने का प्रयास करते समय इस समस्या को ठोकर खाई।अनुरोधों के साथ एक यूआरएल पर एक JSON ऑब्जेक्ट पास करें
मूल रूप से, उनके एपीआई कि तरह लग रहा है:
https://www.googleapis.com/freebase/v1/mqlread?query=...
एक प्रश्न के रूप में, वे एक JSON ऑब्जेक्ट की उम्मीद है, यहाँ एक 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"
}]
बेशक
, हम करना होगा इसे यूआरएल में पास करने से पहले नरक से बचें, इसलिए वास्तविक क्वेरी इस तरह दिखेगी:
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'
अब
,
r = requests.get(fullurl)
print r.status_code
>>> 400
क्योंकि साइट यह क्वेरी पार्स नहीं कर सके दावा करता है।
r2 = urllib2.urlopen(fullurl)
print r2.getcode()
>>> 200
कोई समस्या नहीं, मुझे उचित वापसी मिलती है। दिलचस्प बात यह है कि
# This is the url of our requests.get request
print urllib2.urlopen(r.url).getcode()
>>> 200
क्यों? क्या मैं मॉड्यूल का गलत इस्तेमाल कर रहा हूं? या यह requests
में एक बग है?
यदि आप पहले से नहीं हैं, तो 'json' मॉड्यूल का उपयोग करें। – jdi