2017-07-06 40 views
0

下面是我使用为目的。对于它的时间太长的时间来下载所有tweets.What每个用户请求的代码有一些方法,以加快执行time.The想法是实时的使用鸣叫分析作为用户访问该网站。我是新的python,所以任何帮助,将不胜感激。有没有什么办法来加速python代码使用tweepy下载tweets?

import tweepy #https://github.com/tweepy/tweepy 


#Twitter API credentials 
consumer_key = ".." 
consumer_secret = ".." 
access_key = ".." 
access_secret = ".." 


def get_all_tweets(screen_name): 
    #Twitter only allows access to a users most recent 3240 tweets with this method 

    #authorize twitter, initialize tweepy 
    auth = tweepy.OAuthHandler(consumer_key, consumer_secret) 
    auth.set_access_token(access_key, access_secret) 
    api = tweepy.API(auth) 

    #initialize a list to hold all the tweepy Tweets 
    alltweets = [] 

    #make initial request for most recent tweets (200 is the maximum allowed count) 
    new_tweets = api.user_timeline(screen_name = screen_name,count=200) 

    #save most recent tweets 
    alltweets.extend(new_tweets) 

    #save the id of the oldest tweet less one 
    oldest = alltweets[-1].id - 1 

    #keep grabbing tweets until there are no tweets left to grab 
    while len(new_tweets) > 0: 
     print ("getting tweets before %s".format(oldest)) 

     #all subsiquent requests use the max_id param to prevent duplicates 
     new_tweets = api.user_timeline(screen_name = screen_name,count=200,max_id=oldest) 

     #save most recent tweets 
     alltweets.extend(new_tweets) 

     #update the id of the oldest tweet less one 
     oldest = alltweets[-1].id - 1 

     print ("...%s tweets downloaded so far".format(len(alltweets))) 

    #transform the tweepy tweets into a 2D array that will populate the csv 
    outtweets = [[tweet.id_str, tweet.created_at, tweet.text.encode("utf-8")] for tweet in alltweets] 
    return outtweets 

回答

2

让您的解决方案更快的一种方法是制作一些缓存。

当你下载了所有微博的网名,保存在本地,例如为[twitter_screen_name]以.json

然后编辑功能来检查你的缓存文件。如果它不存在,请将其创建为空。然后加载它,只刷新需要的内容,并保存你的json缓存文件。

这样,当用户访问时,您将只下载使用twitter的diff。对于定期咨询的屏幕名称,这将更快。

然后,你可以添加一些自动清除缓存 - 一个简单的CRON,与去年访问的META于n天例如旧的删除文件。

相关问题