使用 tweepy 获取两个日期之间的推文。

17

我用Python编写了以下代码:

import tweepy

consumer_key = "..."
consumer_secret = "..."

access_token = "..."
access_token_secret = "..."

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

start_date = datetime.datetime(2018, 1, 19, 12, 00, 00)
end_date = datetime.datetime(2018, 1, 19, 13, 00, 00)

api = tweepy.API(auth)

for tweet in tweepy.Cursor(api.user_timeline, screen_name="@IBM", since=start_date, until=end_date).items():
    print("ID TWEET: " + str(tweet.id))
有没有一种方法可以通过修改 tweepy中的游标,在 start_dateend_date 之间获取推文?
我已经尝试使用 since=until= 参数,但它们没有起作用。
提前致谢。

"until"有时间限制:(...)搜索索引有7天的限制。换句话说,一周前的日期将找不到任何推文。 https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets - rtkaleta
也许这个可以帮到你... https://dev59.com/WoPba4cB1Zd3GeqPz_-k 或者这个 https://gist.github.com/alexdeloy/fdb36ad251f70855d5d6 - Ajay
3个回答

20

首先,Twitter API 不允许按时间搜索。简单地说,在 Python 中可以获取推文并随后查看它们的时间戳,但这样效率极低。

您可以使用以下代码片段来执行此操作。

consumerKey = "CONSUMER_KEY"
consumerSecret = "CONSUMER_SECRET"
accessToken = "ACCESS_TOKEN"
accessTokenSecret = "ACCESS_TOKEN_SECRET"

auth = tweepy.OAuthHandler(consumerKey, consumerSecret)
auth.set_access_token(accessToken, accessTokenSecret)

api = tweepy.API(auth)

username = sys.argv[1]
startDate = datetime.datetime(2011, 6, 1, 0, 0, 0)
endDate =   datetime.datetime(2012, 1, 1, 0, 0, 0)

tweets = []
tmpTweets = api.user_timeline(username)
for tweet in tmpTweets:
    if tweet.created_at < endDate and tweet.created_at > startDate:
        tweets.append(tweet)

while (tmpTweets[-1].created_at > startDate):
    tmpTweets = api.user_timeline(username, max_id = tmpTweets[-1].id)
    for tweet in tmpTweets:
        if tweet.created_at < endDate and tweet.created_at > startDate:
            tweets.append(tweet)

虽然效率并不高,但它能够帮助我创建自己的机器人。


3
谢谢大家的回复! - Alessandro Russo
4
这对我也起作用了。注意,我不得不导入datetime,这在示例代码中没有显示。 - Trevor Reid
2
如何使其搜索特定的标签并获取在起始日期和结束日期之间发布的推文。 - practitioner
我认为你做不到。你只能通过search从给定的hashtag下载推文,就像这样:twapi.search(q=query, count=100, since_id=since_id, max_id=str(last_id - 1), tweet_mode='extended'),但只能下载过去10天的。唯一的解决方法是你知道tweet_id,无论Twitter API设置的时间限制如何,你都可以下载它。 - Habib Karbasian

6

我刚刚使用了 until(可选运算符),它似乎非常好用。我像这样使用它:

tweets = tw.Cursor(api.search,
                   q=search_words,
                   lang="en",
                   since=date_since,
                   until=date_until,
                   result_type="recent"
                   ).items(2)

4
自3.8版本起,since已被移除作为api.search的搜索参数,但until仍在:返回给定日期之前创建的推文...日期应格式化为YYYY-MM-DD。 - jacanterbury
只包括开始日期,会给我当前系统日期的数据。当我尝试包括结束日期时,会出现错误:"本地变量'csvFile'在赋值之前被引用"。 - VAIBBHAV DEVENDER KALRA

0
受@papaya在这里的回答启发,这对我有用,适用于多个标签查询。
startDate = utc.localize(startDate) 
endDate = utc.localize(endDate)   

tweets = []
tmpTweets = api.search_tweets('hashtags and filteration')

for tweet in tmpTweets:
    if tweet.created_at < endDate and tweet.created_at > startDate:
        tweets.append(tweet)

while (tmpTweets[-1].created_at > startDate):
    tmpTweets = api.search_tweets(new_search, max_id = tmpTweets[-1].id)
    for tweet in tmpTweets:
        if tweet.created_at < endDate and tweet.created_at > startDate:
            tweets.append(tweet)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接