在Tweepy中收集特定时间段的推文,直到和自那以后都不起作用 [英] Collect tweets in a specific time period in Tweepy, until and since doesn't work

查看:16
本文介绍了在Tweepy中收集特定时间段的推文,直到和自那以后都不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试着只收集过去24小时内的推文,所以我设置了开始直到,将.Items()留空,结果是给我每条推文... 以下是我的代码:

import tweepy 
import pandas as pd


auth = tweepy.OAuthHandler(CONSUMER_KEY, CONSUMER_SECRET)
auth.set_access_token(ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
api = tweepy.API(auth, wait_on_rate_limit=True)



tweets = tweepy.Cursor(api.user_timeline,id=username, since='2020-10-01', until='2020-10-02').items()


tweets_list = [[tweet.text, tweet.created_at, tweet.retweet_count, tweet.favorite_count] for tweet in tweets]
 
#save in a dataframe
tweets_df = pd.DataFrame(tweets_list,columns=['Tweet Text', 'Tweet Datetime', 'Retweets', 'Favorites'])
 
print(tweets_df)

打印输出就像每条推文一样,因为我没有在.Items()

中设置数量限制

有人能帮我这个忙吗?谢谢!

推荐答案

我面临着与您相同的问题。自api.user_timeline版本3.8起,参数sinceuntil不再可用。

此处为文档:API user_timeline doc

解决方案

检索特定日期的tweet的解决方案是从用户那里提取所有tweet(如果需要,可以使用查询),然后过滤满足日期时间要求的tweet。此外,我建议您使用api.search,因为它有until参数。因此,我们可以请求Twitter在选定的时间之前获取推文,然后过滤符合日期时间的所有推文,以防有比您想要的日期更早的推文(在您的情况下比昨天更早)。

这里我向您展示我的代码:

import tweepy
from requests_oauthlib import OAuth1Session
import datetime

# CREDENTIALS
api_key = "xxxx"
api_secret_key = "xxxx"
access_token = "xxxx"
access_token_secret = "xxxx"

twitter = OAuth1Session(api_key,
                        client_secret=api_secret_key,
                        resource_owner_key=access_token,
                        resource_owner_secret=access_token_secret)
auth = tweepy.OAuthHandler(api_key, api_secret_key)
auth.set_access_token(access_token, access_token_secret)

# setting datetime
today = datetime.datetime.now()
today = today.replace(hour=23, minute=59, second=59, microsecond=999999) # set from the beggining of the day
time_to_the_past = 1 # 1 because we want 1 day before today
yesterday = today - datetime.timedelta(time_to_the_past) 

# Collecting tweets
count = 10 # Set the number of tweets to retrieve
next_day = yesterday + datetime.timedelta(time_to_the_past) # equivalent to today
tweets = tweepy.Cursor(api.search,
                               q="from:maldito_bulo",
                               lang="es",
                               tweet_mode='extended',
                               until = next_day.date() # format YYYY-MM-DD in datetime. Not string. Twitter only extract tweets before that date
                               ).items(count)

# Extracting desired information from each tweet
tweets_list = []
for tweet in tweets:
            # Filtering by date
            if  yesterday.date() == tweet.created_at.date(): # here we take only tweets from the same date as yesterday in format YYYY-MM-DD
                # Accessing to full_text is different between RT and normal tweet
                if 'retweeted_status' in tweet._json:  # if it is a RT take full_text
                    full_text = tweet._json['retweeted_status']['full_text']
                else:  # if it is a normal tweet take the full_text
                    full_text = tweet.full_text

                 tweets_list.append([tweet.user.screen_name,
                                     tweet.id,
                                     full_text,
                                     tweet.user.verified,
                                     str(tweet.created_at.date()),
                                     tweet.user.location,
                                     tweet.user.url,
                                      tweet.entities
                                      ])

重要信息

  1. 请确保搜索的推文不到一周(7天),因为Twitter API有此限制。这就是说,不能提取7天前的推文。如果您想延长将您的帐户升级到高级帐户所需的日期限制。

  2. 我用yesterday作为例子,但如果您使用yesterday = today - datetime.timedelta(x),其中x是0-7之间的数字,您可以从Twitter提供给您的7天访问中的一天提取推文。例如,two_days_before_today = today - datetime.timedelta(2)Being Today=";2020-05-10";将仅从";2020-03-10";提取推文。

  3. 就我所使用的代码而言,我认为until需要是一个DateTime对象,而不是一个原始字符串。

我希望你会发现它对你有用! 编码快乐!

这篇关于在Tweepy中收集特定时间段的推文,直到和自那以后都不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆