使用Tweepy/Twython在Python中获取跟随者列表时出现错误的身份验证数据错误

使用Tweepy/Twython在Python中获取跟随者列表时出现错误的身份验证数据错误,python,twitter,oauth,tweepy,twython,Python,Twitter,Oauth,Tweepy,Twython,我和其他用户的做法完全一样 但是得到以下错误: 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/pytho

我和其他用户的做法完全一样

但是得到以下错误:

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}]
得到了非常相似的错误:

  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
产生

  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'
文件“downloader.py”,第19行,在
搜索结果=t.search(q='webdotcom',计数=50)
文件“/usr/local/lib/python2.7/dist packages/twython/endpoints.py”,第130行,搜索中
返回self.get('search/tweets',params=params)
文件“/usr/local/lib/python2.7/dist-packages/twython/api.py”,get中第219行
返回self.request(端点,params=params,version=version)
文件“/usr/local/lib/python2.7/dist-packages/twython/api.py”,第213行,在请求中
content=self.\u请求(url,method=method,params=params,api\u call=url)
文件“/usr/local/lib/python2.7/dist-packages/twython/api.py”,第134行,在请求中
response=func(url,**请求\参数)
get中的文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,第254行
返回self.request('get',url,**kwargs)
文件“/usr/local/lib/python2.7/dist packages/requests/sessions.py”,请求中的第241行
r、 发送(预回迁=预回迁)
文件“/usr/local/lib/python2.7/dist packages/requests/models.py”,第521行,在send中
r=self.auth(self)
文件“/usr/local/lib/python2.7/dist packages/requests_oauthlib/core.py”,第58行,在调用中__
如果是形式编码或提取参数(r.body):
AttributeError:“请求”对象没有属性“正文”

我认为它在某种程度上与oauth有关,但是更新请求(uOAuthlib)并没有帮助

对Tweepy不熟悉,但对Tweython来说,您的问题是您正试图开始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应用程序页面获得了访问令牌,那么访问令牌将绑定到您的用户,如果您希望为另一个用户获得令牌,请按照详细说明OAuth舞蹈。请注意,它仅以应用程序凭据开始(无访问令牌)


如果您只是在自己的帐户中使用它,那么请遵循ib lundren的建议,不要为OAuth舞蹈而烦恼,只需通过Twitter开发站点指定密钥即可

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

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

t、 验证_凭据()

如果这没有吐出关于你连接的帐户和最近推特的数据,那么你就没有被验证。如果是,则检查验证密钥和令牌是否具有正确的权限,具体取决于您尝试执行的操作


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

哦,我的错,我还不够清楚:我想在twitter上搜索它的社交图的一小部分。我可以用wget、requests、urllib或其他工具来做,但我认为特定于twitter的工具会更好。我想我与Twython的问题更深,某种程度上与requests_oauthlib有关。你能看看这个问题吗e问题的更新版本?我真的很感激,我整天都在碰壁…你的请求版本比oauthlib期望的请求版本旧。尝试升级它。sudo pip安装请求--升级要求已经是最新的:请求在/usr/local/lib/python2.7/dist-packages中清理…>>导入请求>>>打印请求。\uuuuu版本\uuuuuu 1.2.3我尝试升级我能想到的所有东西,但没有成功。请尝试使用全新的VirtualNV,因为您在问题中最后提到的错误肯定不是使用请求1.2.3。可能是删除和安装,而不是升级。糟糕的是,我可能不够清楚:我想为smal抓取twitter我可以用wget、requests、urllib或其他工具来实现它,但我认为twitter特定的工具会更好。然后它可能会稍微取决于您所追求的特定类型的信息,但API将以JSON格式返回所有请求的数据,这可能确实提供了一些您无法用wget、curl等工具获得的数据上。我当然建议继续使用Twython。如果你已经有请求经验,那么你就没事了。另外,如果你只是从一个或两个帐户收集数据,不要为OAuth舞蹈进行身份验证而烦恼。而是创建一个特定的应用程序/身份验证令牌和硬代码,并将其写入你的脚本中。我只需要用户名、追随者和密码nd用户关注谁。那么,我想抓取的任何用户都需要这个?是的。Twitter API 1.1版的主要变化之一是删除了匿名或未经身份验证的访问。不过,查看任何给定用户的追随者和朋友是相当直接的。
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'
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(APP_KEY, APP_SECRET)
auth = twitter.get_authentication_tokens(callback_url='http://mysite.com/callback')