2013-09-17 2 views
1

Я делаю это точно так же, как другой пользователь SO didBad ошибка данных аутентификации при получении списка последователей в Python с Tweepy/Twython

for follower in api.followers_ids('twitter'): 
    print api.get_user(follower).screen_name 

Но получаю следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/tweepy/binder.py", line 185, in _call 
    return method.execute() 
    File "/usr/local/lib/python2.7/dist-packages/tweepy/binder.py", line 168, in execute 
    raise TweepError(error_msg, resp) 
tweepy.error.TweepError: [{'message': 'Bad Authentication data', 'code': 215}] 

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

Эта проблема не ограничивается Tweepy, например, я попытался Twython

t = Twython(app_key=consumer_key, 
      app_secret=consumer_secret, 
      oauth_token=access_token, 
      oauth_token_secret=access_token_secret) 

И получил очень похожую ошибку:

File "downloader.py", line 14, in <module> 
    auth = t.get_authentication_tokens() 
    File "/usr/local/lib/python2.7/dist-packages/twython/api.py", line 260, in get_authentication_tokens 
    raise TwythonAuthError(response.content, error_code=response.status_code) 
twython.exceptions.TwythonAuthError: Twitter API returned a 401 (Unauthorized), Failed to validate oauth signature and token 

Я тройной проверил мои ключи и жетоны и уверен, они в порядке. В чем заключается корень проблемы, которую я испытываю?

p.s. Я думаю, что моя проблема глубже. Я не могу получить пример кода для работы Twython. Следующий код:

t = Twython(app_key=consumer_key, 
      app_secret=consumer_secret, 
      oauth_token=access_token, 
      oauth_token_secret=access_token_secret) 

try: 
    search_results = t.search(q='WebsDotCom', count=50) 
except TwythonError as e: 
    print e 

for tweet in search_results['statuses']: 
    print 'Tweet from @%s Date: %s' % (tweet['user']['screen_name'].encode('utf-8'), tweet['created_at']) 
    print tweet['text'].encode('utf-8'), '\n' 

производит

File "downloader.py", line 19, in <module> 
    search_results = t.search(q='WebsDotCom', count=50) 
    File "/usr/local/lib/python2.7/dist-packages/twython/endpoints.py", line 130, in search 
    return self.get('search/tweets', params=params) 
    File "/usr/local/lib/python2.7/dist-packages/twython/api.py", line 219, in get 
    return self.request(endpoint, params=params, version=version) 
    File "/usr/local/lib/python2.7/dist-packages/twython/api.py", line 213, in request 
    content = self._request(url, method=method, params=params, api_call=url) 
    File "/usr/local/lib/python2.7/dist-packages/twython/api.py", line 134, in _request 
    response = func(url, **requests_args) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 254, in get 
    return self.request('get', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 241, in request 
    r.send(prefetch=prefetch) 
    File "/usr/local/lib/python2.7/dist-packages/requests/models.py", line 521, in send 
    r = self.auth(self) 
    File "/usr/local/lib/python2.7/dist-packages/requests_oauthlib/core.py", line 58, in __call__ 
    if is_form_encoded or extract_params(r.body): 
AttributeError: 'Request' object has no attribute 'body' 

Я думаю, что это как-то связано с OAuth, но обновление requests_oauthlib не помогло.

ответ

1

Не знаком с Tweepy, но для Twython ваша проблема в том, что вы пытаетесь начать танец OAuth, но у вас уже есть доступный токен. Просто принести последователь непосредственно

t = Twython(app_key=consumer_key, 
     app_secret=consumer_secret, 
     oauth_token=access_token, 
     oauth_token_secret=access_token_secret) 
t.get_followers_ids() 

Предполагая, что вы получили маркер доступа от страницы приложения Twitter, то маркер доступа привязан к вашему пользователю, если вы хотите, чтобы получить маркер для другого пользователя следуйте инструкциям на Twython starting out, которые подробно танец OAuth. Обратите внимание, что она начинается с приложения учетных данных только (без маркеров доступа)

twitter = Twython(APP_KEY, APP_SECRET) 
auth = twitter.get_authentication_tokens(callback_url='http://mysite.com/callback') 
+0

О, мой плохой, я не был достаточно ясен: я хочу просканировать твиттер для небольшой части своего социального графа. Я мог бы сделать это с помощью wget, запросов, urllib или другого инструмента, но лучше подумать о твиттере. – Moonwalker

+0

Я думаю, что моя проблема с Twython более глубока и как-то связана с запросами_oauthlib. Не могли бы вы взглянуть на обновленную версию вопроса? Я был бы очень признателен, я весь день ударяю головой о стену ... – Moonwalker

+0

Ваша версия запросов старше запросов-oauthlib. Попробуйте обновить его. –

2

Если вы просто использовать его с вашей собственной учетной записи, затем следуют предложения IB-lundren и делать не заморачиваться с OAuth танец, просто указать ключи через сайт Twitter.

Также проверьте права доступа для токенов/ключей и т. Д. вы создали для подтверждения, что он обеспечивает необходимый доступ, чтобы делать то, что вы хотите.

Чтобы подтвердить, что ваши учетные данные для доступа на самом деле работает в Twython вы можете использовать это:

t.verify_credentials()

Если это не выплюнуть данные о счете вы подключаетесь с и последние твиты, тогда вы не подтверждены. Если это так, то убедитесь, что ключи и маркеры auth имеют правильные разрешения, в зависимости от того, что вы пытаетесь сделать.

Twitter имеет три уровня доступа: «читать» (доступ к общим данным чтения), «читать & записи» (позволяет отправлять д.м.н., но не читать их) и «чтение, запись & прямых» (позволяет чтение DMs а также предыдущие уровни доступа.Кроме того, есть дополнительные (редко используемые) настройки, позволяющие получить полный доступ или обновления профиля только с помощью токена. В зависимости от того, какие функции вы используете, вы, вероятно, захотите либо «читать write», либо «читать, писать & прямо», по крайней мере, во время тестирования.

+0

мой плохой, я, вероятно, был недостаточно ясен: я хочу просканировать твиттер для небольшой части своего социального графа. Я мог бы сделать это с помощью wget, запросов, urllib или другого инструмента, но лучше подумать о твиттере. – Moonwalker

+0

Тогда это может зависеть от конкретных типов информации, которую вы используете, но API вернет все запрошенные данные в формате JSON, что действительно может предоставить некоторые данные, которые вы бы не получили с помощью wget, curl и т. Д. Я бы порекомендовал продолжить работу с Twython. Если у вас уже есть запросы, тогда все будет в порядке. Кроме того, если вы просто тратите данные из одной или двух учетных записей, не беспокойтесь о танце OAuth для аутентификации. Вместо этого создайте в своих сценариях определенные токены/auth приложения и жесткий код. – Ben

+0

Мне нужно только имя пользователя, подписчики и пользователь. – Moonwalker

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