2

R の twitteR パッケージを使用して、Haaretz の Twitter フィード (@haaretzcom) からすべてのフォロワーとその情報 (場所、作成日など) をダウンロードしようとしています。Twitter フィードには 90,000 人を超えるフォロワーがいます。フォロワーの完全なリストは、以下のコードを使用しても問題ありません。

require(twitteR)
require(ROAuth)
#Loading the Twitter OAuthorization
load("~/Dropbox/Twitter/my_oauth")

#Confirming the OAuth
registerTwitterOAuth(my_oauth)

# opening list to download
haaretz_followers<-getUser("haaretzcom")$getFollowerIDs(retryOnRateLimit=9999999)

しかし、lookupUsers 関数を使用して情報を抽出しようとすると、レート制限に遭遇します。retryOnRateLimit を使用するトリックは、ここでは機能しないようです:)

 #Extracting user information for each of Haaretz followers
 haaretz_followers_info<-lookupUsers(haaretz_followers)

 haaretz_followers_full<-twListToDF(haaretz_followers_info)

 #Export data to csv
 write.table(haaretz_followers_full, file = "haaretz_twitter_followers.csv",  sep=",")

レート制限を回避するには、フォロワーのリスト (haaretz_followers) に対して for ループとサブサンプルを記述する必要があると思います。このループでは、 twitteR package を使用して制限内でツイートをダウンロードし続けるのような、ある種の休憩/一時停止を含める必要があります。twitteR パッケージは、これを行う方法について少し不透明であり、私は R で for ループを作成する初心者です。最後に、R でループを作成する方法に応じて、実行時間に大きな影響を与えることを知っています。あなたが与えることができるどんな助けも大歓迎です!

4

1 に答える 1

2

このようなものはおそらく仕事を成し遂げるでしょう:

for (follower in haaretz_followers){
  Sys.sleep(5)
  haaretz_followers_info<-lookupUsers(haaretz_followers)

  haaretz_followers_full<-twListToDF(haaretz_followers_info)

  #Export data to csv
  write.table(haaretz_followers_full, file = "haaretz_twitter_followers.csv",  sep=",")
}

ここでは、各通話の間に 5 秒間寝ています。あなたのレート制限が何であるかはわかりません。Twitter のポリシーに準拠するには、多かれ少なかれ必要になる場合があります。

Rでループを構造化する方法がパフォーマンスに影響することは正しいですが、この場合、設計が不十分なループから無駄になるCPU時間よりも桁違いに長くなる一時停止を意図的に挿入しているため、それは特に気にする必要はありません。

于 2013-04-30T20:35:05.230 に答える