2015-04-18 5 views
1

Я хочу отправить некоторые HTTP-запросы в Twitter на Python, чтобы создать знак для пользователей Twitter для моего приложения. Я использую urllib, и по этой ссылке: https://dev.twitter.com/web/sign-in/implementing.Twitter Запросы HTTP: ошибка 403

Но я не могу этого сделать. Наверное, мне нужно пройти аутентификацию, прежде чем запрашивать токен, но я не знаю, как это сделать.

Код:

import urllib.request 
req = urllib.request.Request("https://api.twitter.com/oauth/authenticate", 
headers={'User-Agent': 'Mozilla/5.0'}) 
html = urllib.request.urlopen(req).read() //after this statement im 
               getting the error 

Ошибка:

Traceback (most recent call last): 
    File "<pyshell#5>", line 1, in <module> 
    html = urllib.request.urlopen(req).read() 
    File "C:\Python34\lib\urllib\request.py", line 161, in urlopen 
     return opener.open(url, data, timeout) 
    File "C:\Python34\lib\urllib\request.py", line 469, in open 
     response = meth(req, response) 
    File "C:\Python34\lib\urllib\request.py", line 579, in http_response 
     'http', request, response, code, msg, hdrs) 
    File "C:\Python34\lib\urllib\request.py", line 507, in error 
    return self._call_chain(*args) 
    File "C:\Python34\lib\urllib\request.py", line 441, in _call_chain 
    result = func(*args) 
    File "C:\Python34\lib\urllib\request.py", line 587, in http_error_default 
    raise HTTPError(req.full_url, code, msg, hdrs, fp) 
    urllib.error.HTTPError: HTTP Error 403: Forbidden 
+0

Хотя это не ответ на ваш вопрос, попробуйте библиотеку запросов (http://docs.python-requests.org/en/latest/) вместо URLLIB , – Ivan

ответ

1

Если вы идете в URL в браузере он показывает вам, что нужен ключ:

Whoa there! There is no request token for this page. That's the special key we need from applications asking to use your Twitter account. Please go back to the site or application that sent you here and try again; it was probably just a mistake.

Если вы идете до this link он позволит вам выбрать одно из ваших приложений, а приведет вас к сигнатурному генератору который покажет вам настройки запроса.

Чтобы получить request_token вы можете использовать requests_oauthlib:

import requests 
from requests_oauthlib import OAuth1 


REQUEST_TOKEN_URL = "https://api.twitter.com/oauth/request_token" 
CONSUMER_KEY = "xxxxxxxx 
CONSUMER_SECRET = "xxxxxxxxxxxxxxxxx" 

oauth = OAuth1(CONSUMER_KEY, client_secret=CONSUMER_SECRET) 
r = requests.post(url=REQUEST_TOKEN_URL, auth=oauth) 
print(r.content) 
oauth_token=xxxxxxxxxxxxxx&oauth_token_secret=xxxxxxxxxxx&oauth_callback_confirmed=true 

Затем нужно извлечь oauth_token oauth_token_secret:

from urlparse import parse_qs 
import webbrowser 

data = parse_qs(r.content) 
oauth_token = data['oauth_token'][0] 
oauth_token_secret = data['oauth_token_secret'][0] 
AUTH = "https://api.twitter.com/oauth/authorize?oauth_token={}" 
auth = AUTH.format(oauth_token) 
webbrowser.open(auth) 

Веб-страница впустит к Authorize your_app использовать свой аккаунт?

Для питона 3 использования:

from urllib.parse import parse_qs 


data = parse_qs(r.text) 
oauth_token = data['oauth_token'][0] 
oauth_token_secret = data['oauth_token_secret'][0] 
+0

, когда я ввел «https://api.twitter.com/oauth/request_token» thi url в браузере. говорится: «плохие данные аутентификации» – mystry

+0

Вы передали правильный CONSUMER_KEY и т. Д.? –

+0

heyyy .......... thnkss a lott, он работал :) – mystry

Смежные вопросы