golang + anacondaでTwitter Streamimg APIを使う
goのTwitter APIライブラリの一つとして、anacondaがあります。
最近まで(?)Streaming APIには対応されていなかったようですが、 ソースを見る限りすでにStreaming APIに対応するための実装があるようです。
GoDocを見ながら適当に実装してみたらちゃんと動いたので、 今回はその方法について書きます。
準備
$ go get github.com/ChimeraCoder/anaconda
実装
package main import ( "encoding/json" "flag" "fmt" "github.com/ChimeraCoder/anaconda" "io/ioutil" ) type ApiConf struct { ConsumerKey string `json:"consumer_key"` ConsumerSecret string `json:"consumer_secret"` AccessToken string `json:"access_token"` AccessTokenSecret string `json:"access_token_secret"` } func check(e error) { if e != nil { panic(e) } } func main() { var apiConf ApiConf { apiConfPath := flag.String("conf", "config.json", "API Config File") flag.Parse() data, err_file := ioutil.ReadFile(*apiConfPath) check(err_file) err_json := json.Unmarshal(data, &apiConf) check(err_json) } anaconda.SetConsumerKey(apiConf.ConsumerKey) anaconda.SetConsumerSecret(apiConf.ConsumerSecret) api := anaconda.NewTwitterApi(apiConf.AccessToken, apiConf.AccessTokenSecret) twitterStream := api.PublicStreamSample(nil) for { x := <-twitterStream.C switch tweet := x.(type) { case anaconda.Tweet: fmt.Println(tweet.Text) fmt.Println("-----------") case anaconda.StatusDeletionNotice: // pass default: fmt.Printf("unknown type(%T) : %v \n", x, x) } } }
簡単に説明すると、twitterStream.C
からどんどんツイートを取得して表示するだけです。
twitterStream.C
はanaconda.Tweet
型(ツイート本体)と
anaconda.StatusDeletionNotice
型(ツイート消されてますNotice?)が流れてきます。
消されたツイートはどうでもよいので今回はスルーしています。
goを使うとJsonパースが楽なのも良いですね。
実行
$ go run main.go -conf=config.json
追記:環境によっては-conf="config.json"
とする必要があるそうです
世界中のツイート(の一部)がどんどん流れてきます。 これを使って何かおもしろいことができればよいですね!