monoの開発ブログ

golang で Twitter の UserStream を使う

golang から Twitter の UserStream を使おうと思い、公式で紹介されいていてかつ GitHub での人気が高かった anaconda を選んだはいいものの、全然サンプルが転がっていなかったので貼っておきます。まぁソースを見れば普通にできると思いますけど、逆に言うとソースを見ないと全然やり方がわからないです。

package main

import (
    "fmt"
    "github.com/ChimeraCoder/anaconda"
    "github.com/joho/godotenv"
    "log"
    "net/url"
    "os"
)

func main() {
    // .env を読み込む
    err := godotenv.Load()
    if err != nil {
        log.Fatal("Error loading .env file")
    }

    anaconda.SetConsumerKey(os.Getenv("TWITTER_CONSUMER_KEY"))
    anaconda.SetConsumerSecret(os.Getenv("TWITTER_CONSUMER_SECRET"))

    api := anaconda.NewTwitterApi(os.Getenv("TWITTER_OAUTH_TOKEN"), os.Getenv("TWITTER_OAUTH_TOKEN_SECRET"))
    api.SetLogger(anaconda.BasicLogger) // logger を設定

    v := url.Values{}
    stream := api.UserStream(v) // 接続

    for {
        // 受信待ち
        select {
        case item := <-stream.C:
            switch status := item.(type) {
            case anaconda.Tweet:
                // Tweet を受信
                fmt.Printf("%s: %s\n", status.User.ScreenName, status.Text)
            default:
            }
        }
    }
}

いやぁ、goroutine と channnel 便利ですねぇ。