GoのTwitter v2 APIクライアント「gotwtr」を作った話
この記事は CyberAgent 22 新卒 Advent Calendar 2021 12日目の記事です。
概要
gotwtrはTwitterが提供しているv2のAPIをGoで実行することができるクライアントライブラリです。
使い方
gotwtrで特定のツイートを取得したい場合は以下のサンプルケースのように実行することで取得することが可能です。
package main
import (
"context"
"fmt"
"github.com/sivchari/gotwtr"
)
func main() {
client := gotwtr.New("YOUR_
TWITTER_BEARER_TOKEN")
// look up multiple tweets
ts, err := client.RetrieveMultipleTweets(context.Background(), []string{"id", "id2"})
if err != nil {
panic(err)
}
for _, t := range ts.Tweets {
fmt.Println(t)
}
// look up single tweet
t, err := client.RetrieveSingleTweet(context.Background(), "id")
if err != nil {
panic(err)
}
fmt.Println(t.Tweet)
}
提供しているAPIやオプションはこちらから確認することが可能です。
できること
現在提供しているAPIはこのようになっています。
Tweet
- Tweet lookup
- Timelines
- Search Tweets
- Tweet Counts
- Filtered Stream
- Volume Streams
- Retweets
- Likes
Lists
- List lookup
- List Tweets lookup
- List members
- List follows
Users
- User lookup
- Follows
Spaces
- Space lookup
- Search spaces
開発で注意したこと
このライブラリを開発するにあたって、初期から気をつけたことが2つあります。
1つ目の理由はOSの違いによる差分を可能な限り少なくするために依存を少なくすることです。例えば、僕が夏頃から取り組んでいるdebianのライブラリ パッケージングでは、3rdパーティーの依存する別の3rdパーティーのライブラリもパッケージングする必要がありました。これはインストールする際の依存解決が理由となります。この依存関係が意外と面倒だったことから誰でもすぐに使いやすくする実装を心がけました。
実際にgotwtrが依存しているライブラリはテストで用いているcmpのみでこちらも実際はreflectに変更もできるため、依存ライブラリを最終的には0にすることも可能です。(現状はあまり考えていません。)
2つ目の理由は最大限シンプルに実装することです。Twitter v2 APIは現在開発途中のライブラリであり、エンドポイントやinterface、レスポンスの変更が起きる可能性が充分にあります。(実際に開発途中での変更が2回ほどありました。)
そのため、開発当初から下記のルールを徹底していました。
- Twitter v2 APIしか実装しない
Twitter v2のAPIしか実装しない理由は、v1のAPIが今後廃止されていくという声明が出されており、この廃止に追従するバージョンアップをするのならば最初から実装しないことで、このライブラリを使う方が廃止による影響を受ける可能性を少なくすることを目的としました。
実際に先日v2のAPIをプライマリにするニュースが出されたことからもこの選択は正解でした。
今後のバージョンアップとしては、v2 APIの中でOAuth 1.0のものに関しては対応を一旦は見送ったため、1.0のものを順次導入していこうと考えています。
宣伝
こちらのライブラリはTwitterの公式フォーラムにGoのライブラリとして掲載されました!!
Twitterに自分のライブラリが掲載される日が来るとは思わなかったためとても感慨深いです。
今後もTwitter v2 APIの変更に対して常に一番早いアップデートで対応していきますので、少しでも気になったり、応援してくれる方はスターをいただけると嬉しいです!!!
掲載フォーラム
再掲
Discussion