GoでTwitter
Go で Twitterクライアントを作成してみようと思います
今回は
- タイムラインの取得
- 特定ワード付きのツイートの取得
- ツイートする
をしていこうと思います
まずは Twitter API Key を取得
これがなければ話になりません。
Consumer Key
Consumer Secret
Access Token
Access Token Secret
をそれぞれ取得します。
取得方法は Twitter Application Management にアクセスし、今回作りたいアプリケーションを作成します。
ベースとなるクライアントを作成しよう
フルスクラッチするのも大変なので、今回は
github.com
こちらを利用します。
先ほど取得した Twitter API Key を元に anaconda のクライアントを作成する関数を作ります。
base.go (key は適宜入れてください)
package main import "github.com/ChimeraCoder/anaconda" const ( consumerKey = "consumer_key" consumerSecret = "consumer_secret" accessToken = "access_token" accessTokenSecret = "access_token_secret" ) func getClient() *anaconda.TwitterApi { anaconda.SetConsumerKey(consumerKey) anaconda.SetConsumerSecret(consumerSecret) return anaconda.NewTwitterApi(accessToken, accessTokenSecret) }
タイムラインを取得しよう!
先ほど作成した base.go を利用します
get_timeline.go
package main import ( "log" "net/url" ) func main(){ api := GetClient() v := url.Values{} v.Set("count","30") tweets, err := api.GetHomeTimeline(v) if err != nil { panic(err) } for _, tweet := range tweets { log.Printf("tweet: %v", tweet.Text) } }
ここで
v := url.Values{} v.Set("count","30")
としているところは、APIを叩く際のオプションを指定しています
もっと詳しい情報はこちらをどうぞ
https://developer.twitter.com/en/docs/tweets/search/api-reference/get-search-tweets
特定のワードの付いたツイートを取得してみよう
search.go
package main import ( "net/url" "github.com/k0kubun/pp" ) func main() { api := getClient() v := url.Values{} v.Set("result_type", "recent") searchResult, err := api.GetSearch("golang", v) if err != nil { panic(err) } for _, tw := range searchResult.Statuses { pp.Print(tw) } }
これで golang というワード付きのツイートが取得できます
話がそれますが、↑で使っている pp というパッケージ便利ですw
ツイートしてみよう
tweet.go
package main import ( "log" "net/url" ) func main() { api := getClient() text := "hello world from golang" v := url.Values{} tweet, err := api.PostTweet(text, v) if err != nil { log.Fatal(err) } log.Printf("tweet: %#v", tweet.Text) }
シンプルですね。これまでのコードが理解できていれば特に問題ないと思います。
まとめ
anaconda を使って twitter からの取得と実際にツイートをしてみました。
この流れで画像付きのツイートも実装!と思ったのですが、そちらはちょっと一筋縄ではいかないようだったので、また別の記事にでも書きます。
書きました