【问题标题】:Tweepy error code 400Tweepy 错误代码 400
【发布时间】:2018-09-07 00:12:20
【问题描述】:

我正在尝试下载一些推文用于研究目的,直到几天前代码运行良好。

错误信息

> Traceback (most recent call last):
> 
>   File "<ipython-input-1-10547a7aea4c>", line 1, in <module>
>     runfile('F:/twitter_locations_n_scraper/02_twitterscrapping.py', wdir='F:/twitter_locations_n_scraper')
> 
>   File
> "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",
> line 668, in runfile
>     execfile(filename, namespace)
> 
>   File
> "C:\ProgramData\Anaconda3\lib\site-packages\spyder_kernels\customize\spydercustomize.py",
> line 108, in execfile
>     exec(compile(f.read(), filename, 'exec'), namespace)
> 
>   File "F:/twitter_locations_n_scraper/02_twitterscrapping.py", line
> 70, in <module>
>     for item in cursor.items(1000): # Remove the limit to 1000
> 
>   File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 49, in __next__
>     return self.next()
> 
>   File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 197, in next
>     self.current_page = self.page_iterator.next()
> 
>   File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\cursor.py",
> line 108, in next
>     data = self.method(max_id=self.max_id, parser=RawParser(), *self.args, **self.kargs)
> 
>   File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\binder.py",
> line 250, in _call
>     return method.execute()
> 
>   File "C:\ProgramData\Anaconda3\lib\site-packages\tweepy\binder.py",
> line 234, in execute
>     raise TweepError(error_msg, resp, api_code=api_error_code)
> 
> TweepError: Twitter error response: status code = 400

我确实尝试了假设的解决方案

api.update_status('Test')

但这对我不起作用,我确实更改了密钥,但我仍然面临同样的错误,重新安装 Tweepy 包两次,但错误没有消失。

感谢帮助解决错误,在此先感谢。

更新:我收到错误的代码

import tweepy
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener
import pandas as pd
import json
import csv
import sys
import time

path="F:\\twitter_locations_n_scraper\\"


ckey = '*****'
csecret = '******'
atoken = '*****'
asecret = '*****'

def toDataFrame(tweets):
    # COnvert to data frame
    DataSet = pd.DataFrame()

    DataSet['tweetID'] = [tweet.id for tweet in tweets]
    DataSet['tweetText'] = [tweet.text.encode('utf-8') for tweet in tweets]
    DataSet['tweetRetweetCt'] = [tweet.retweet_count for tweet in tweets]
    DataSet['tweetFavoriteCt'] = [tweet.favorite_count for tweet in tweets]
    DataSet['tweetSource'] = [tweet.source for tweet in tweets]
    DataSet['tweetCreated'] = [tweet.created_at for tweet in tweets]
    DataSet['userID'] = [tweet.user.id for tweet in tweets]
    DataSet['userScreen'] = [tweet.user.screen_name for tweet in tweets]
    DataSet['userName'] = [tweet.user.name for tweet in tweets]
    DataSet['userCreateDt'] = [tweet.user.created_at for tweet in tweets]
    DataSet['userDesc'] = [tweet.user.description for tweet in tweets]
    DataSet['userFollowerCt'] = [tweet.user.followers_count for tweet in tweets]
    DataSet['userFriendsCt'] = [tweet.user.friends_count for tweet in tweets]
    DataSet['userLocation'] = [tweet.user.location for tweet in tweets]
    DataSet['userTimezone'] = [tweet.user.time_zone for tweet in tweets]
    DataSet['Coordinates'] = [tweet.coordinates for tweet in tweets]
    DataSet['GeoEnabled'] = [tweet.user.geo_enabled for tweet in tweets]
    DataSet['Language'] = [tweet.user.lang for tweet in tweets]
    tweets_place= []
    #users_retweeted = []
    for tweet in tweets:
        if tweet.place:
            tweets_place.append(tweet.place.full_name)
        else:
            tweets_place.append('null')
    DataSet['TweetPlace'] = [i for i in tweets_place]
    #DataSet['UserWhoRetweeted'] = [i for i in users_retweeted]

    return DataSet

OAUTH_KEYS = {'consumer_key':ckey, 'consumer_secret':csecret,'access_token_key':atoken, 'access_token_secret':asecret}
#auth = tweepy.OAuthHandler(OAUTH_KEYS['consumer_key'], OAUTH_KEYS['consumer_secret'])
auth = tweepy.AppAuthHandler('******', '*******')

api = tweepy.API(auth, wait_on_rate_limit=True,wait_on_rate_limit_notify=True)

if (not api):
    print ("Can't Authenticate")
    sys.exit(-1)
else:
    df=pd.read_csv(path+"00_all_location_India_full.csv")

    print ("Scraping data now") # Enter lat and long and radius in Kms
    for i in range(0,len(df)):
        x="%s,%s,30km"%(df['latitude'][i],df['longitude'][i]) #,q='motox4', since='2018-08-16',until='2018-08-18',
        cursor = tweepy.Cursor(api.search,since='2018-08-23',until='2018-08-24',lang='en',count=1000)
        results=[]
        print (i)
        for item in cursor.items(1000): # Remove the limit to 1000
            results.append(item)
        DataSet = toDataFrame(results)
        DataSet['latitude']=df['latitude'][i]
        DataSet['longitude']=df['longitude'][i]
        DataSet['radius']=30
        del DataSet['Coordinates']
        DataSet.to_csv(path+'cities_aug23.csv',encoding='utf-8',index=False,mode="a")

【问题讨论】:

  • 你执行什么代码?
  • @jalazbe 包含代码

标签: python anaconda tweepy


【解决方案1】:

这是一个有趣的问题,实际上,你写问题的方式引导我写了这个答案,

您已经提到它正在工作但不再起作用,所以在我看来这可能有两个原因......

浏览器已经贬低了浏览器中的某些功能,这些功能会阻止脚本正常工作。也许您应该尝试在页面加载时阻止Default() 函数,看看是否出现任何错误。 尝试更改您的互联网连接,或重新启动您的调制解调器 还要确保从 https 网站而不是 http 加载它。

或您在代码中列出的这些路径,可能没有读取它的权限,我对此路径有很大的怀疑,但是您检查所有路径并尝试关闭任何可能阻止与这些路径的连接的东西。

C:\ProgramData\Anaconda3\lib\

因为它需要 Windows 身份验证才能访问它。尝试从控制面板最小化您的 UAC 权限。您也可以通过右键单击文件夹并选择属性来检查安全选项卡。

所以,将所有内容恢复原样并检查上述内容。 请让我知道结果,因为我可以根据您的重播结果进行编辑

希望我的帖子对你有所帮助。

【讨论】:

  • 我确实尝试了这些选项,但没有看到任何区别。关于路径,它的输入和输出文件路径。。没有浏览器可以用于 http/https还有其他解决方案吗?
  • 好吧,我知道了......我会深入研究并让你知道
  • 你使用的python版本是什么?
  • 在 windows 10 64 位环境下使用 anaconda 更新了 python 3.x
  • 检查新答案,也许是 gif 动画图片造成的? cus 根据 twitter api page 不能排除这些原因
【解决方案2】:

根据 twitter 官方 api 页面。 代码 400 表示以下错误, 所以您的问题是由下列原因之一引起的,请一一检查:

-attachment_url 参数无效对应 HTTP 400。提供的 URL 值不是可以附加到此推文的 URL。

-错误的身份验证数据对应于 HTTP 400。该方法需要身份验证,但未呈现或完全无效。

-参数无效 对应 HTTP 400。提供的 URL 值不是 URL 可以附加到这条推文。

-Bad Request 请求无效或无法以其他方式提供服务。随附的错误消息将进一步解释。 未经身份验证的请求被视为无效,并将产生此响应。

-上传多张图片时不允许使用动画 GIF。对应 HTTP 400。一条推文只能附加一个动画 GIF

-媒体 ID 验证失败。对应于 HTTP 400。随推文提交的媒体 ID 存在问题。

-未找到媒体 ID。对应于 HTTP 400。未找到附加到推文的媒体 ID。

-给定的 URL 无效。对应于 HTTP 400。无法处理推文中包含的 URL。这可能是因为非 ASCII URL 无法转换,或其他原因。

【讨论】:

    【解决方案3】:

    Twitter 最近对其 API 进行了重大更改,删除了 Twitter 客户端和抓取工具使用的大量功能。由于 HTTP 400 是“错误请求”,并且您的代码直到最近才正常工作(进行更改时),我会说假设这是原因是相当安全的。见details

    【讨论】:

    • 有什么解决办法?还是下载公共​​推文的替代方法?
    • 此外,它说here twitter 将返回 410 和 404,而不是普通的 400。尽管 API 更改似乎是导致此问题的最合理原因。
    • 如此处所述,用户和站点流 API 已被弃用,取而代之的是 Account Activity API,您可以通过高级订阅或企业订阅获得。
    • @SoumithriChilakamarri 所以你的意思是说我们不能在这里收到流推文?
    猜你喜欢
    • 1970-01-01
    • 2015-12-23
    • 1970-01-01
    • 2021-08-15
    • 1970-01-01
    • 2017-06-06
    • 2016-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多