本文介绍了在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起,参数since
和until
不再可用。
此处为文档: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
])
重要信息
请确保搜索的推文不到一周(7天),因为Twitter API有此限制。这就是说,不能提取7天前的推文。如果您想延长将您的帐户升级到高级帐户所需的日期限制。
我用
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";提取推文。就我所使用的代码而言,我认为
until
需要是一个DateTime对象,而不是一个原始字符串。
我希望你会发现它对你有用! 编码快乐!
这篇关于在Tweepy中收集特定时间段的推文,直到和自那以后都不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!