Как исправить код ошибки 403 в 30-дневном поиске в песочнице в Twitter? - PullRequest
1 голос
/ 28 июня 2019

Я пытаюсь собрать твиты из 30-дневного API поиска в песочнице в Твиттере и записать их в CSV-файл. Я получаю код ошибки 403, но не могу собрать какую-либо полезную информацию из сообщения об ошибке. Я просмотрел похожие посты и уже попробовал то, что, по их словам, исправило их проблему, или они пытались сделать что-то совершенно другое (код ошибки 403 кажется общим кодом ошибки для многих типов проблем)

Мне удалось собрать твиты из стандартного поиска, но мне нужно больше данных, чем доступно за последние 7–9 дней. У меня есть аккаунт разработчика в Твиттере, и на моей панели он говорит, что у меня все еще есть 250 запросов и 1 млн твитов за этот месяц в 30-дневной поисковой песочнице (я использовал 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)

Я очень новичок в кодировании и не знаю, что я делаю, но я не смог понять это самостоятельно, поэтому я был бы признателен, если бы кто-то мог мне помочь. Спасибо!

1 Ответ

1 голос
/ 01 июля 2019

Я понял, в чем была моя проблемаКонечная точка была неправильной, а входные данные для csvWriter.writerow также были неправильными.

Конечная точка: Для конечной точки имя вашей среды можно найти, перейдя в учетную запись разработчика в Твиттере в правом верхнем углу.- В углу есть выпадающее меню с вашим именем пользователя, нажмите «Среды разработки».Это должно привести вас к списку ваших сред разработки под каждой из них должна быть «Метка среды разработки» (в моем случае эта метка была «исследования»).Возьмите метку и вставьте ее в запрос API с двоеточием перед ним и без «.json» после.Примечание: для полного поиска в архиве просто замените «30day» на «fullarchive».

CSV-входы: Для CSV-входов они должны быть в формате tweet ['aspect'] где tweet - это произвольное имя переменной для перебора, а' aspect '- тип запрашиваемых данных (например,' text 'или' creation_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()
...