разбивка на страницы / доступ к более чем 100 твитам с помощью tweepy

#python #tweepy

#python #tweepy

Вопрос:

Я придумал следующий код, который перебирает кучу дат и транслирует твиты, используя twitters full_archive_search. Обратите внимание, что я использую бесплатную версию песочницы для доступа к прошлым твитам, которая разрешает 50 запросов в месяц. Проблема, с которой я сталкиваюсь, заключается в том, что я хочу получать доступ к более чем 100 твитам в день. (Поиск выдает только 100 твитов / результатов только с первой страницы, как мне получить доступ ко второй странице и так далее?) После обращения к документации tweepy у меня такое ощущение, что этим можно управлять с next помощью параметра. Но я понятия не имею, как это использовать.

 import tweepy as tw
from datetime import date,timedelta
from dateutil.relativedelta import relative delta

# Create a range of dates 
start_date = date(2020,1,1)
end_date = date(2020,1,31)
date_range = [start_date   timedelta(days = i) for i in range(relativedelta(end_date,start_date).days)]
dates_str =[i.strftime('%Y%m%d%H%M') for i in date_range]

# Autenticate twitter
auth = tw.OauthHandler(
    consumer_key = ???
    consumer_secret = ???
)
api = tw.API(auth)

df_list = []

# Iterate over each date and extract maximum of 100 tweets per date. How do I increase this number?
for dt_idx, dt in enumerate(date_str):
    if dt_idx < len(dates_str) - 1:
        twObj = api,search_full_archive(
            environment_name = ???,
            query = '#Taal',
            fromDate = dates_str[dt_idx],
            toDate = dates_str[dt_idx   1],
        )
        
        #iterate over the tweet object and save tweet text
        tweet_list = []
        for tweet in twObj:
            tweet_list.append(tweet.text)

        #append the tweet_list to df_list
        df_list.append(tweet_list)
  

Мне интересно, как добавить next параметр внутри объекта tweet для извлечения более 100 твитов за дату? есть идеи?

Ответ №1:

Что я бы сделал, так это использовал user_timeline для этого, вы также столкнетесь с той же проблемой, связанной с разбиением на страницы. Чтобы решить эту проблему, вы используете «.Cursor»

Итак, как вы могли бы запустить его в своем коде:

 tweet_list = []
for tweet in twObj:
    tweepy.Cursor(api.user_timeline, screen_name = "", count = 200, tweet_mode 
    = 'extended').items 
  

Вот функция, которую я лично использовал, я предпочитаю запускать функцию только один раз, а затем запускать ее при вызове. Я думаю, что это чище, и вы можете проверять наличие ошибок, не позволяя циклу функции.

 def extract_tweets(userid):
    all_tweets = []
    tweets = tweepy.Cursor(api.user_timeline,screen_name = userid, 
                            count = 200, 
                            tweet_mode = 'extended').items()
  

Дайте мне знать, если у вас возникнут какие-либо ошибки