Rubyで書かれている Alfred Qiita Workflow をバグ修正のついでにGoで書き直した。
Qiita API v2にも対応し、ユーザー名とパスワードの代わりにPersonal Access Tokenを使うようにした。これで、ストックした記事や自分で書いた記事を検索することがより気軽に出来るようになった。
Alfredに返却するXMLの生成にはgo-alfredというライブラリを利用した。
go-qiita
Alfred Qiita Workflow の APIクライアント部分を切り出して go-qiita としてリリースした。Workflowで必要だった部分しか実装してないが、記事の検索など基本的なことは出来る。
設計はGoogleの go-github を参考にしており、クライアントの初期化時に、以下のようにhttp.Client互換のインターフェースを渡してやれば、それを経由して通信するようになっている。
// Personal Access Tokenを使ったOAuth2クライアントを作る
ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: "personal access token"})
tc := oauth2.NewClient(oauth2.NoContext, ts)
// OAuth2クライアントをgo-qiitaに引き渡す
client := qiita.NewClient(tc)
// 今までに書いた記事を取得
items, _, _ := client.AuthenticatedUser.Items()
このようにすることで、APIクライアントは認証系を気にせずAPIサーバーとのやりとりを考えることが出来る。このやり方はかなりスマートだと思うのでもっと流行って欲しい。
ちなみに認証をしない場合はNewClient()
にnil
を渡せばよい。
client := qiita.NewClient(nil)