使用 tweepy 按日期获取推文

7
我从USATODAY中获取了最大允许的推文数,即3000。
现在我想创建一个脚本,在每天晚上11:59PM自动拉取USATODAY的推文。
我本来想使用流API,但那样就得整天保持它运行。
我能否得到一些洞察力,如何创建一个脚本,在每天晚上11:59PM运行REST API以拉取当天的推文?如果不行,有谁知道如何根据日期拉取推文?
我考虑在我的for循环中放置一个ifelse语句,但这似乎效率低下,因为它将不得不每晚搜索3000条推文。
以下是我现在拥有的:
client = MongoClient('localhost', 27017)
db = client['twitter_db']
collection = db['usa_collection']
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token_key, access_token_secret)

api = tweepy.API(auth)

for tweet in tweepy.Cursor(api.user_timeline,id='USATODAY').items():
    collection.insert(tweet._json)
2个回答

11

您可以通过页面简单地检索推文。现在,在接收到的每个页面上,您需要遍历推文并提取该推文的创建时间,该时间可使用tweet.created_at来访问。然后找出提取日期与当前日期之间的差异,如果差异小于1天,则这是一条有利的推文,否则您只需退出循环。

import tweepy, datetime, time

def get_tweets(api, username):
    page = 1
    deadend = False
    while True:
        tweets = api.user_timeline(username, page = page)

        for tweet in tweets:
            if (datetime.datetime.now() - tweet.created_at).days < 1:
                #Do processing here:

                print tweet.text.encode("utf-8")
            else:
                deadend = True
                return
        if not deadend:
            page+=1
            time.sleep(500)

get_tweets(api, "anmoluppal366")

注意:您并未访问该用户的全部 3000 条推文,您只是迭代处理那些在启动您的应用程序时创建于 24 小时范围内的推文。


这段代码是正确的,但会导致无限循环。脚本可以获取推文,但控制权没有返回。 - addcolor
从 tweepy 文档: page_limit = 20 for page in tweepy.Cursor(api.user_timeline).pages(page_limit): process_page(page) - Legend_Ari

0

其他方法:

def search(target, date, maxnum = 10):
    cursor = tweepy.Cursor(
        api.search,
        q = target,
        since = date[0],
        until = date[1],
        show_user = True)

    return cursor.items(maxnum)

if __name__ == '__main__':
    list_tweets = search(
    target = '서지수',
    date = ('2016-05-01', '2016-05-25'),
    maxnum = 100)
    print(list_tweets)

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