【问题标题】:How to fix error code 403 on Twitter's 30 day sandbox search?如何在 Twitter 的 30 天沙盒搜索中修复错误代码 403?
【发布时间】:2019-11-10 04:27:45
【问题描述】:

我正在尝试从 Twitter 的 30 天沙盒搜索 API 收集推文并将它们写入 csv 文件。我收到错误代码 403,但我无法从错误消息中收集任何有用的信息。我查看了相关帖子,我要么已经尝试过他们所说的解决问题的方法,要么他们正在尝试做一些完全不同的事情(错误代码 403 似乎是许多类型问题的一揽子错误代码)

我已经能够从标准搜索中收集推文,但我需要的数据比过去 7 到 9 天的可用数据要多。我有一个 Twitter 开发者帐户,在我的仪表板上,它说我本月在 30 天搜索沙箱上仍有 250 个请求和 100 万条推文(我使用了 0 个)

下面是我的代码:

import csv
import settings as sett #file that includes my access token, consumer key and the secrets of each.
from TwitterAPI import TwitterAPI


api = TwitterAPI(sett.consumer_key, sett.consumer_secret, sett.access_token, sett.access_token_secret)
r = api.request('tweets/search/30day/:maruchan.json', {'query' : 'maruchan'})
                                     #^.......^To be honest I don't know what is supposed to go here, I just put something random, this might be the problem....

csvFile = open('maruchan.csv', 'a')
#Use csv Writer
csvWriter = csv.writer(csvFile)

for tweet in r:

    try:
        #Write a row to the csv file/ I use encode utf-8
        csvWriter.writerow([tweet.created_at, tweet.full_text.encode('utf-8'), tweet.favorite_count, tweet.retweet_count, tweet.id, tweet.user.screen_name])
    except tweepy.TweepError:
        pass
csvFile.close()

当我在 Jupyter 笔记本中运行此程序时,我收到以下错误:

---------------------------------------------------------------------------
TwitterRequestError                       Traceback (most recent call last)
<ipython-input-122-0fe9d55ba54b> in <module>
     15 csvWriter = csv.writer(csvFile)
     16 
---> 17 for tweet in r:
     18 
     19     try:

~\Anaconda3\lib\site-packages\TwitterAPI\TwitterAPI.py in __iter__(self)
    217         :raises: TwitterConnectionError, TwitterRequestError
    218         """
--> 219         return self.get_iterator()
    220 
    221     def get_quota(self):

~\Anaconda3\lib\site-packages\TwitterAPI\TwitterAPI.py in get_iterator(self)
    204         """
    205         if self.response.status_code != 200:
--> 206             raise TwitterRequestError(self.response.status_code)
    207 
    208         if self.stream:

TwitterRequestError: Twitter request failed (403)

我对编码很陌生,不知道自己在做什么,但我自己无法解决这个问题,所以如果有人能帮助我,我将不胜感激。谢谢!

【问题讨论】:

    标签: python api csv twitter tweets


    【解决方案1】:

    我知道我的问题是什么。端点错误,csvWriter.writerow 的输入也错误。

    端点: 对于端点,可以通过转到您的 twitter 开发人员帐户找到您的环境名称,在右上角有一个带有您的用户名的下拉菜单,单击“开发环境”。这应该带您进入您的开发环境列表,每个环境都应该是“开发环境标签”(在我的情况下,标签是“研究”)。获取标签并将其放入您的 API 请求中,在它前面有一个冒号,后面没有“.json”。注意:对于完整档案搜索,只需将“30day”替换为“fullarchive”即可。

    CSV 输入: 对于 CSV 输入,它们需要采用 tweet['aspect'] 的格式,其中 tweet 是我们可以迭代的任意变量名,'aspect' 是请求的数据类型(例如,'text' 或 'created_at' )

    以下是正确的代码以及一些注释。

    import csv
    import settings as sett #file that includes my access token, consumer key and the secrets of each. You get these by applying for a developer account and making an app
    from TwitterAPI import TwitterAPI
    
    
    api = TwitterAPI(sett.consumer_key, sett.consumer_secret, sett.access_token, sett.access_token_secret) #tells the Twitter API who you are.
    r = api.request('tweets/search/30day/:research', {'query' : 'maruchan lang:en', #maruchan is the search term and lang:en filters for english results
                                                      "maxResults": "100", #number of tweets collected (starting from newer tweets)
                                                      "fromDate":"201906250000", #start data
                                                      "toDate":"201907010000" #end data (tweets will only be collected between these dates)
                                                               #YYYYMMDDHHmm #format of the fromDate and toDate input values
                                                      })
    
    csvFile = open('maruchan_30_day_sandbox.csv', 'a') #'maruchan_30_day_sandbox.csv' is file name, 'a' is for append mode
    #Use csv Writer
    csvWriter = csv.writer(csvFile)
    
    for tweet in r:
        #creates csv file with the listed elements seperated by a comma in each row         #encode('utf-8') helps read certain characters
        csvWriter.writerow([tweet['created_at'], tweet['user']['screen_name'], tweet['text'].encode('utf-8') if 'text' in tweet else tweet])
    csvFile.close()
    

    【讨论】:

    • 虽然这解决了问题,但我仍然不知道如何过滤转发或获取转发计数或收藏计数的数据。此外,我不知道如何像使用 except tweepy.TweepError: pass 之前那样忽略错误,因为我什至没有使用 tweepy。如果有人对其中一个或多个问题有答案,请告诉我!
    • 我在我的 csv 文件中也得到了奇怪的编码,例如,撇号被编码为 \xe2\x80\x99 并且我在文本前面得到 ab' 但是当我通过 type()我得到字符串作为输出。
    • 来自 Twitter 的错误将出现在您的 JSON 变量 tweet 中。只需检查tweet 是否包含message 属性,即if "message" in tweet:。您也可能会收到连接错误。为此,您需要捕获 TwitterConnectionError 异常。
    • @Jonas 谢谢,这有助于了解如何处理来自 Twitter API 的错误。
    猜你喜欢
    • 1970-01-01
    • 2013-04-15
    • 2021-12-31
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多