1

我的做法与其他 SO 用户的做法完全相同

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

我已经三次检查了我的钥匙和令牌,并确保它们没问题。我遇到的问题的根源是什么?

ps 我认为我的问题更深。我无法获得 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 并没有帮助。

4

2 回答 2

2

如果您只是在自己的帐户中使用它,那么请遵循 ib-lundren 的建议,不要打扰 OAuth 之舞,只需通过 Twitter 开发网站指定密钥即可。

还要检查身份验证令牌/密钥/等的访问权限。您已生成以确认它提供了执行所需操作的必要访问权限。

要确认您的访问凭据确实在 Twython 中有效,您可以使用以下命令:

t.verify_credentials()

如果这没有吐出有关您正在连接的帐户和最近的推文的数据,那么您就没有经过验证。如果是这样,请检查身份验证密钥和令牌是否具有正确的权限,具体取决于您要执行的操作。

Twitter 具有三个访问级别:“读取”(对公共数据的读取权限)、“读取和写入”(允许发送 DM,但不能读取它们)和“读取、写入和直接”(允许读取 DM 以及以前的访问级别。此外,还有其他(很少使用)设置允许仅使用令牌进行完全访问或配置文件更新。根据您所追求的功能,您可能需要“读取和写入”或“读取、写入和直接” “至少在测试时。

于 2013-09-21T09:02:08.030 回答
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 的说明开始,其中详细说明了 OAuth 舞蹈。请注意,它仅以应用凭据开头(无访问令牌)

twitter = Twython(APP_KEY, APP_SECRET)
auth = twitter.get_authentication_tokens(callback_url='http://mysite.com/callback')
于 2013-09-20T16:54:54.697 回答