2012-11-13 66 views
0

我在學習Python,我想開始使用Twitter的流媒體API。我知道如何構建一個非常基本的應用程序,該應用程序使用urllib2來讀取頁面的內容,並在過去成功地完成了此操作。但是,此特定的Twitter流媒體API所需的安全連接https://似乎不適用於urllib2。如何從使用Python的https鏈接獲取JSON?

我試圖從以下鏈接獲取JSON:https://stream.twitter.com/1.1/statuses/filter.json?locations=-122.75,36.8,-121.75,37.8

通過寫入以下內容:

import urllib2 
url = "https://stream.twitter.com/1.1/statuses/filter.json?locations=-122.75,36.8,-121.75,37.8" 
print urllib2.urlopen(url).read() 

回溯,雖然說我沒有被授權;我推測這是因爲HTTPS SSL連接,研究支持這一點。所以我想我的問題是從需要這種SSL連接的鏈接獲取JSON的最佳方式是什麼?我也試過捲曲,但只能再次出現錯誤401。

下面是完整的回溯。

Traceback (most recent call last): File "", line 1, in File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 126, in urlopen File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 400, in open File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 513, in http_response File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 438, in error File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 372, in _call_chain File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib2.py", line 521, in http_error_default urllib2.HTTPError: HTTP Error 401: Unauthorized

非常感謝提前。

+1

的API可能需要OAuth憑證或其他API密鑰。 – Amber

+0

啊。它確實表示它需要一個Twitter用戶才能登錄。我想這就是爲什麼當我在瀏覽器中輸入url時(因爲我已登錄到Twitter),這個流的作用。它不需要OAuth,所以我可以將我的登錄憑證添加到我的Python文件的頭文件中? – zch

回答

2

正如其他人所說,您需要授權。以下是如何做到這一點:

Twitter API with urllib2 in python

import urllib2 
import base64 

request = urllib2.Request('https://stream.twitter.com...') 
request.add_header('Authorization', 'Basic ' + base64.b64encode(username + ':' + password)) 
response = urllib2.urlopen(request) 
+0

謝謝!我只是嘗試了你鏈接到的問題的答案,它似乎工作(終端似乎正在處理,雖然我不知道應該花多長時間 - 在閱讀時打印響應) – zch

+0

該方法的問題是它會工作,但它不會安全,因爲'urllib2'不會對證書或主機名進行任何驗證。 – Bruno

+0

@布魯諾......如果你偏執於某人正在冒充Twitter或嗅探你的Twitter嘰嘰喳喳api的請求,我想這是不安全的。 http://thejosephturner.com/blog/2011/03/19/https-certificate-verification-in-python-with-urllib2/有一個解決方法 – Purrell

1

這不是沒有授權的SSL連接,它在進行此調用之前沒有明確授權給系統。在提出請求之前,您需要對服務器執行某種授權。

相關問題