2011-12-14 83 views
0

所以我檢索從一個網站的一些JSON數據,並使用標準的urlopen()從urllib2的:捲曲的urlopen給出相互矛盾的結果

代碼:

url = 'http://api.nytimes.com/svc/politics/v3/us/legislative/congress/senate/votes/2011-12-14/2011-12-14.json?api-key=%s' % (api_key,) 
print urlopen(url).read() 

結果:

{ 
    "status":"OK", 
    "copyright":"Copyright (c) 2011 The New York Times Company. All Rights Reserved.", 
    "results": { 
     "chamber": "Senate", 
     "start_date": "2011-12-14", 
     "end_date": "2011-12-14", 
     "num_results": "0", 
     "votes": [ 
       ] 
    } 
} 

這個結果是錯誤的。如果我手動輸入網址進入我的瀏覽器:

請輸入:

http://api.nytimes.com/svc/politics/v3/us/legislative/congress/senate/votes/2011-12-14/2011-12-14.json?api-key=a55a8988c8102a532221d2d465ca010a:1:65328279 

我得到:

{ 
    "status":"OK", 
    "copyright":"Copyright (c) 2011 The New York Times Company. All Rights Reserved.", 
    "results": { 
     "chamber": "Senate", 
     "start_date": "2011-12-14", 
     "end_date": "2011-12-14", 
     "num_results": "1", 
    "votes": [ 
      { 
     "congress": "112", 
     "session": "1", 
     "roll_call": "228", 
"vote_uri":"http://api.nytimes.com/svc/politics/v3/us/legislative/congress/112/senate/sessions/1/votes/228.json", 
     "bill_number": "S.J.Res.24", 
     "question": "On the Joint Resolution", 
     "description": "Joint resolution proposing a balanced budget amendment to the Constitution of the United States.", 
     "vote_type": "1/2", 
     "date": "2011-12-14", 
     "time": "11:09:00", 
     "result": "Joint Resolution Defeated", 
     "democratic": { 
     "yes": "20", 
     "no": "31", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "No" 
     }, 
     "republican": { 
     "yes": "1", 
     "no": "46", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "No" 
     }, 
     "independent": { 
     "yes": "0", 
     "no": "2", 
     "present": "0", 
     "not_voting": "0" 
     }, 
     "total": { 
     "yes": "21", 
     "no": "79", 
     "present": "0", 
     "not_voting": "0" 
     } 
     }     ] 
} 

}

此外,當我使用curl檢索數據,我得到:

$curl http://api.nytimes.com/svc/politics/v3/us/legislative/congress/senate/votes/2011-12-14/2011-12-14.json?api-key=a55a8988c8102a532221d2d465ca010a:1:65328279 
{ 
    "status":"OK", 
    "copyright":"Copyright (c) 2011 The New York Times Company. All Rights Reserved.", 
    "results": { 
     "chamber": "Senate", 
     "start_date": "2011-12-14", 
     "end_date": "2011-12-14", 
     "num_results": "2", 
     "votes": [ 
      { 
     "congress": "112", 
     "session": "1", 
     "roll_call": "229", 
     "vote_uri": "http://api.nytimes.com/svc/politics/v3/us/legislative/congress/112/senate/sessions/1/votes/229.json", 
     "bill_number": "S.J.Res.10", 
     "question": "On the Joint Resolution", 
     "description": "Joint resolution proposing a balanced budget amendment to the Constitution of the United States.", 
     "vote_type": "2/3", 
     "date": "2011-12-14", 
     "time": "11:39:00", 
     "result": "Joint Resolution Defeated", 
     "democratic": { 
     "yes": "0", 
     "no": "51", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "No" 
     }, 
     "republican": { 
     "yes": "47", 
     "no": "0", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "Yes" 
     }, 
     "independent": { 
     "yes": "0", 
     "no": "2", 
     "present": "0", 
     "not_voting": "0" 
     }, 
     "total": { 
     "yes": "47", 
     "no": "53", 
     "present": "0", 
     "not_voting": "0" 
     } 
     },    { 
     "congress": "112", 
     "session": "1", 
     "roll_call": "228", 
     "vote_uri": "http://api.nytimes.com/svc/politics/v3/us/legislative/congress/112/senate/sessions/1/votes/228.json", 
     "bill_number": "S.J.Res.24", 
     "question": "On the Joint Resolution", 
     "description": "Joint resolution proposing a balanced budget amendment to the Constitution of the United States.", 
     "vote_type": "1/2", 
     "date": "2011-12-14", 
     "time": "11:09:00", 
     "result": "Joint Resolution Defeated", 
     "democratic": { 
     "yes": "20", 
     "no": "31", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "No" 
     }, 
     "republican": { 
     "yes": "1", 
     "no": "46", 
     "present": "0", 
     "not_voting": "0", 
     "majority_position": "No" 
     }, 
     "independent": { 
     "yes": "0", 
     "no": "2", 
     "present": "0", 
     "not_voting": "0" 
     }, 
     "total": { 
     "yes": "21", 
     "no": "79", 
     "present": "0", 
     "not_voting": "0" 
     } 
     }     ] 
} 

}

因此,對於相同的Web請求,這有3種不同的結果。這裏有什麼問題?是否有一些我忽略的緩存機制,或者我錯過了什麼?

+0

是否改變用戶代理的urlopen幫助。 – soulcheck 2011-12-14 18:30:21

+0

使用小提琴手,並檢查有什麼不同的請求.... – 2011-12-14 18:32:27

回答

1

看起來您必須在請求中設置「接受編碼」標頭。

以防萬一,你可以這樣設置:

request = urllib2.Request(your_url) 
request.add_header('Accept-Encoding',whatever_in_this_case) 
opener = urllib2.build_opener() 
print opener.open(request).read() 
相關問題