VB.NETとCoreTweetを使って、特定のキーワードを含むツイートを大量に取得してみました。
Twitterを利用したデータ収集等に使えそうな気がします。
TwitterAPIでは1リクエストで100件までしかツイートを取得できないので、NextResultsがある場合は、取得したツイートの中で一番古いツイートのIDの一つ前のIDを取り出し、次の検索条件のMAXIDに設定して再検索しています。
※練習がてら組んだソースなので、例外処理とか省いてとりあえず動くよくらいのものです。
Sub sample() Dim tokens As CoreTweet.Tokens Dim result As CoreTweet.SearchResult Dim query As String Dim tweetCount As Long Dim maxid As Long Dim selecor As System.Func(Of CoreTweet.Status, Long) tokens = CoreTweet.Tokens.Create( "{API key}" _ , "{API secret}" _ , "{Access token}" _ , "{Access token secret}") query = "大阪 since:2017-01-21_00:00:00_JST until:2017-01-21_23:59:59_JST" result = tokens.Search.Tweets(q:=query _ , count:=100 _ , tweet_mode:=CoreTweet.TweetMode.extended) tweetCount = result.Count If result.Count > 0 Then selecor = New System.Func(Of CoreTweet.Status, Long)(AddressOf getID) While Not IsNothing(result.SearchMetadata.NextResults) maxid = result.Min(selecor) - 1 result = tokens.Search.Tweets(q:=query _ , count:=100 _ , max_id:=maxid _ , tweet_mode:=CoreTweet.TweetMode.extended) tweetCount += result.Count If result.RateLimit.Remaining = 0 Then Exit While End If End While End If Console.WriteLine(tweetCount) End Sub Function getID(ByVal status As CoreTweet.Status) As Long Return status.Id End Function
注意するところ
上記コードでちょっと苦戦したのは以下の2点。1.件数があまりに多過ぎるとAPI制限がかかってしまう
単純なキーワードだけだと検索が終わらないので、クエリに日時を指定することにした。時刻の指定の仕方がわからなくていろいろ調べた結果、以下のように指定すると時刻まで指定できた。
since = yyyy-MM-dd_HH:mm:dd_JST
until = yyyy-MM-dd_HH:mm:dd_JST
until = yyyy-MM-dd_HH:mm:dd_JST
2.取得したツイートの中で一番古いツイートIDの取り方
ツイートIDの最小値を取得する時に、はじめは、maxid = result.Min.Id - 1
としていたのだけど、System.ArgumentExceptionが発生し、「少なくとも 1 つのオブジェクトで IComparable を実装しなければなりません。」と言われてしまった。試行錯誤した結果、CoretTweet.StatusからIdを取り出すFunction「getID」を作成してMinの引数としてみたら動いた。
これが正解なのかはわからないが、動いたから良しとする。
感想
今更感がありますが、CoreTweetって良くできているなぁと感動しました。以上
0 件のコメント :
コメントを投稿