2016-05-08 23 views
0

シカゴエリアの犯罪関連のつぶやきに特に焦点を当てたTwitterデータをダウンロードしようとしています。私は座標を使ってジオタグを付けるためにもこれらを必要とします。私は分析目的のための良い金額を取得したいと思いますが、REST APIは限られているため、これをかなり低い数値に制限しています。私はそれに似た質問Avoid twitter api limitation with Tweepyに基づいてこれに対処する解決策を作り出そうとしてきましたが、これまではあまり運がありません。誰も私にこれを手伝ってもらえますか?私はこのようなものすべての初心者ですので、どんな助けでも本当に感謝しています。理想的には、これもパンダのデータフレームにも必要です。私はコーディングの基礎として次のチュートリアルを使用してきました。これはで見つけることができます:私は、コードをコピーした http://www.karambelkar.info/2015/01/how-to-use-twitters-search-rest-api-most-effectively./ 私は以下があります:Tweepy api limit回避策

import tweepy 
auth = tweepy.AppAuthHandler('', '') 
api = tweepy.API(auth, wait_on_rate_limit=True, wait_on_rate_limit_notify=True) 
if (not api): 
print ("Can't Authenticate") 
sys.exit(-1) 

import sys 
import jsonpickle 
import os 



searchQuery = 'shooting OR stabbing OR violence OR assualt OR attack OR homicide OR punched OR mugging OR murder' 
geocode= "41.8781,-87.6298,15km" 


maxTweets = 1000000 
tweetsPerQry = 100 
fName = 'tweets.txt' 
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, geocode=geocode, count=tweetsPerQry) 
      else: 
       new_tweets = api.search(q=searchQuery, geocode=geocode, count=tweetsPerQry, since_id=sinceID) 
     else: 
      if (not sinceId): 
       new_tweets = api.search(q=searchQuery, geocode=geocode, count=tweetsPerQry, max_id=str(max_id-1)) 
      else: 
       new_tweets = api.search(q=searchQuery, geocode=geocode, 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: 
     print("some error : " + str(e)) 
     break 
print ("Downloaded {0} tweets, Saved to {1}".format(tweetCount, fName)) 
+0

*「運がまったくない」*という意味は、この場合はどういう意味ですか?エラー?予期しない動作? [mcve]を指定してください(今後、APIトークンを共有しないようにしてください)。 – jonrsharpe

+0

すぐに応答してくれてありがとう!申し訳ありませんが、それは私の見解です。これを削除していただきありがとうございます。あまり運がないというだけでは、処理しているようにハングするようですが、テキストファイルをチェックすると何もありませんが、 。 –

+0

明確にするためのエラーメッセージは表示されません –

答えて

0

同じ問題に実行した後、私は切迫したAPIのレート制限を同定する方法を作成しました。このPythonコードはtweepyを使用して、実行されたAPIリクエストの数と残りの許容リクエスト数を表示します。制限に達する前または後に遅延/スリープ/待機する独自のコードを追加するか、tweepy wait_on_rate_limit(詳細はHERE)を使用してください。

Example output:

Twitter API: 3 requests used, 177 remaining, for API queries to /search/tweets

Twitter API: 3 requests used, 177 remaining, for API queries to /application/rate_limit_status

api = tweepy.API(auth) 


#Twitter's words on API limits https://support.twitter.com/articles/15364 

#### Define twitter rate determining loop 
def twitter_rates(): 
    stats = api.rate_limit_status() #stats['resources'].keys() 
    for akey in stats['resources'].keys(): 
     if type(stats['resources'][akey]) == dict: 
      for anotherkey in stats['resources'][akey].keys(): 
       if type(stats['resources'][akey][anotherkey]) == dict: 
        #print(akey, anotherkey, stats['resources'][akey][anotherkey]) 
        limit = (stats['resources'][akey][anotherkey]['limit']) 
        remaining = (stats['resources'][akey][anotherkey]['remaining']) 
        used = limit - remaining 
        if used != 0: 
         print("Twitter API used", used, "remaining queries", remaining,"for query type", anotherkey) 
        else: 
         pass 
       else: 
        pass #print("Passing") #stats['resources'][akey] 
     else: 
      print(akey, stats['resources'][akey]) 
      print(stats['resources'][akey].keys()) 
      limit = (stats['resources'][akey]['limit']) 
      remaining = (stats['resources'][akey]['remaining']) 
      used = limit - remaining 
      if used != 0: 
       print("Twitter API:", used, "requests used,", remaining, "remaining, for API queries to", akey) 
       pass 


twitter_rates() 

はまたwait_on_rate_limitは「例外を停止します。しかし、長い補充するためにレート制限のために必要とされるためTweepyがスリープ状態になる。」ことに注意してください Aaron Hill Jul 2014、HEREはStackoverflowのページで、これに関するコメントがあります。