2012-11-13 4 views
0

저는 파이썬을 배우기 때문에 트위터의 스트리밍 API를 사용하기를 원합니다. 나는 urllib2을 사용하여 페이지의 내용을 읽고 아주 성공적으로이 작업을 수행 한 아주 기본적인 응용 프로그램을 만드는 법을 알고 있습니다. 그러나이 특정 트위터 스트리밍 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

를 참조하십시오. – Amber

+0

아. 트위터 사용자가 로그인해야한다고 말합니다. 그 이유는 트위터에 로그인했기 때문에 브라우저에 URL을 입력하면 스트림이 작동하는 것입니다. OAuth가 필요하지 않으므로 파이썬 파일 헤더에 로그인 자격 증명을 추가 할 수 있습니까? – zch

답변

2

다른 언급과 같이 권한을 부여해야합니다. 그 방법은 다음과 같습니다

는 API가 아마의 OAuth 토큰 또는 다른 API 키가 필요합니다 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

@ 브루노 ... 누군가가 트위터를 가장하거나 트위터 API에 대한 귀하의 요청을 스팸하고있는 편집증 환자라면 불안합니다. http://thejosephturner.com/blog/2011/03/19/https-certificate-verification-in-python-with-urllib2/에는 해결 방법이 있습니다 – Purrell

1

이 통화를하기 전에 시스템에서 명시 적으로 승인하지 않은 SSL 연결이 인증되지 않았습니다. 요청하기 전에 서버와 일종의 인증을 수행해야합니다.

관련 문제