2016-07-24 8 views
3

私は最後の1年間、有名人に送られたすべてのツイートをダウンロードし、それらについての感情分析を行い、肯定的なファン。何百万人ものフォロワーを持つユーザーのためにtweepyを使用してすべてのtwitterの言及を取得する

次にtweepy/twitter APIを使用して過去7日間のtwitterのコメントを最大限取得できることがわかりました。私はネットを掃除しましたが、最後の1年間はつぶやきをダウンロードする方法が見つかりませんでした。取得するother方法は、(より正確なものを言及しているので、私はCursor検索APIを使用しています

try: 
    while 1: 
     for results in tweepy.Cursor(twitter_api.search, q="@celebrity_handle").items(9999999): 
      item = (results.text).encode('utf-8').strip() 
      wr.writerow([item, results.created_at]) # write to a csv (tweet, date) 

はとにかく、私は最後の7日間のデータにプロジェクトを行うことを決め、次のコードを書きました)は最後の800個のつぶやきだけを取得するという制限があります。

とにかく、コードを一晩実行した後、32Kのつぶやきしかダウンロードできませんでした。そのうち約90%がリッツウッズでした。

より効果的に言及データを取得する方法はありますか?私は複数の有名人のためにこれを行うにはしたく

  1. がいることを、心に留めておく行います。 ( フォロワーの有名なもの)。

  2. 私はリツイートを気にしない。
  3. 1日に送信される数千からつぶやきがあります。

いずれの提案も歓迎されますが、現時点では、私はアイデアがありません。

答えて

8

私は検索APIを使用します。私は次のコードと同様のことをしました。期待どおりに動作しているようです。私は特定の映画スターでそれを使って、すばやくスキャンしたときに15568個のつぶやきを引っ張ってきました。 (私は彼らの全タイムラインから引っ張った)

あなたの場合、毎日、あなたは毎日実行したいと思うでしょう、私はあなたが引っ張った最後の言葉のIDを保存したいと思います検索を再実行するたびに、「sinceId」と表示されます。

AppAuthHandlerは、OAuthHandlerよりもはるかに高速であり、これらの種類のデータプルに対してユーザー認証は必要ありません。

auth = tweepy.AppAuthHandler(consumer_token, consumer_secret) 
auth.secure = True 
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True) 

searchQuery = '@username'これは私たちが探しているものです。あなたのケースでは、私はリストを作成し、検索クエリの各パスですべてのユーザー名を繰り返し実行します。

retweet_filter='-filter:retweets'これは、各APIの内部リツイート

を除外します。私は、クエリパラメータとして次を置く下の検索コール:

q=searchQuery+retweet_filter 

次のコード(上記のAPIのセットアップが)this linkからです:

tweetsPerQry = 100#これはAPIが

を許可し、最大で

fName = 'tweets.txt'#つぶやきをテキストファイルに保存します。

特定IDからの結果は、以降そのIDにsinceIdを設定し、REQDある場合。 APIは、特定のID下記の結果は、そのIDにmax_idを設定している場合

sinceId = None 

を可能となし、下限に 他のデフォルトでは、限り戻ってください。 それ以外の場合は、デフォルトで上限がありません。検索クエリと一致する最新のツイートから始めます。

max_id = -1L 

tweetCount = 0 
print("Downloading max {0} tweets".format(maxTweets)) 
with open(fName, 'w') as f: 
    while tweetCount < maxTweets: 
     try: 
      if (max_id <= 0): 
       if (not sinceId): 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry) 
       else: 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              since_id=sinceId) 
      else: 
       if (not sinceId): 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              max_id=str(max_id - 1)) 
       else: 
        new_tweets = api.search(q=searchQuery, count=tweetsPerQry, 
              max_id=str(max_id - 1), 
              since_id=sinceId) 
      if not new_tweets: 
       print("No more tweets found") 
       break 
      for tweet in new_tweets: 
       f.write(jsonpickle.encode(tweet._json, unpicklable=False) + 
         '\n') 
      tweetCount += len(new_tweets) 
      print("Downloaded {0} tweets".format(tweetCount)) 
      max_id = new_tweets[-1].id 
     except tweepy.TweepError as e: 
      # Just exit if any error 
      print("some error : " + str(e)) 
      break 

print ("Downloaded {0} tweets, Saved to {1}".format(tweetCount, fName)) 
関連する問題