Twitter Streaming API でTLをテキストでだらだら出力するGroovy
TwitterのTimeLineの出力をだらだらコンソールに出力するGroovyスクリプトです。
フォロワー数は200以下のアカウントでないと filterが動作しなくなります。
APIの制限です。
http://yusuke.homeip.net/twitter4j/ja/api-support.html#Streaming%20API%20Methods
の birddog filter() あたりの記述に制限も解説されています。
Pagingできるようなので、うまくやるとフォロアー数の制限を超えられるかもしれません。
そこは、まだ調べていません。
@Grab は、ついていますが、Groovyのバージョンで書式が変わるので、使わなくても良いと思います。
動作させると、塊ではなく、一件ずつ、だらだら "timestamp+id+本文" の書式でテキストで出力され続けます。
import twitter4j.http.* import twitter4j.* start() @Grab(group='net.homeip.yusuke', module='twitter4j', version='[2.0.10,)') def start() { def uid="ユーザーID" def pwd="パスワード" def twitter = new Twitter(uid, pwd ) def userIds = twitter.friendsIDs.IDs userIds.each {println " - " + it} println "Got friends userIds: ${userIds.size()}" def twitterStream = new TwitterStream(uid, pwd) twitterStream.statusListener = [ onException : { ex -> println ex}, onStatus : { status -> //status -> println status def time = status.toString().replaceAll(/.*createdAt.* ([0-9][0-9]:[0-9][0-9]:[0-9][0-9]) .*, id=.*/) {m0, m1 -> "${m1}" } def name = status.toString().replaceAll(/.*screenName='(.*)', location.*/) {m0, m1 -> "${m1}" } def text = status.toString().replaceAll(/.*text='([^']*)', source='.*/) {m0, m1 -> "${m1}" } println time+" "+name+"\t"+text } ] as StatusListener twitterStream.filter(0, userIds, [] as String[]) }