まえおき
Andrew Gerrandさんのgithubはgolangの宝の宝庫。その中に
https://github.com/nf/gotweet{.broken_link}というTwitter APIを使うサンプルがあったので(2013/04/07追加 リポジトリが削除されてました)、
参考にさせてもらって、それにGAEのチュートリアルをあわせて、
Twitterのuser_timelineをブラウザに表示させるようにしてみました。
準備
gotweetのプロジェクトをcloneします。(あとで名前をgotweet_changeプロジェクトに変更しています)
READMEにも書かれてますが、mrjonesさんのoauthライブラリを使用するので、まずインストールしてください。
go install とありますが、うまく動かなかったので、clone しています。
(goファイルのimport文には"github.com/mrjones/oauth"
となっているのを
"oauth"
と変更しています。)
clone先のディレクトリは、僕が確認したのは、myappのGAEのプロジェクトだとすると、myappディレクトリの直下においてください。
下図のようなイメージです。
READMEには、ドキュメントを読んでください、と書いています。oauth
ライブラリの使い方の説明などが書いています。
(まだ軽くしか読んでないので、いずれちゃんと読みます。。)
実際にTwitterAPIを使用する際は、
Consumer IDとConsumer Secret をTwitter Devloperサイト{.broken_link}から取得しておいてください。
ソースごにょごにょ
全体のソースはgithubにあげました。
忘れそうなポイントだけ書いておくことにします。
JSONデータのたくさんのパラメータから、type structで取得したいパラメータ名のみを定義すると、
そのパラメータのみ取得できます。(取得したいデータを絞り込むことができます)
下記は、TwitterのtimelineをGETしてパースしてテンプレートに出力しているところです。
コメント参照。
Go version 1 になってからかなりのパッケージが変更になっています。詳細は以下のページが分りやすいかもです。
http://golang.org/doc/go1.html#packages
たとえば、"json"
は"json"
だけでよかったのが、"encoding/json"
と変更になっています。
7行目のjson.Unmarshal
について、
JSONエンコードされたデータ(ここではbody
)を解析し、tweets
に格納しています。
テンプレートとなるファイルを指定することが出来ます。template.ParseFiles("template/tweet.html")
と書くと、
gotweet_changeプロジェクトであれば、gotweet_change/template/tweet.html
としてテンプレートファイルを作成します。
また、template.ParseFiles()
の引数には、複数ファイルを指定することができ、
たとえば、header.html、main.html、footer.html
などに分けることができます。
さて、tweet.html
の中身は以下のようになっています。
{{range .}} T1 {{end}}
でT1
を繰り返します。ドットは、この例ではtweets
です。
{{.Created_at}}
や{{.Text}}
は、TweetObject
のメンバ変数に当たるもので、それらを表示します。
{{.User.Screen_name}}
はUserObject
のメンバ変数Screen_name
を表示するということです。
これらの書き方は、http://golang.org/pkg/text/template/#hdr-Actionsが参考になると思います。
これを実行すると、下図のように、ユーザータイムラインを取得することができました。
参考
- jsonのUnmarshalについて参考にしたgist
- https://gist.github.com/775526
- Templateについて参考にしたgolang_guestbook
- https://bitbucket.org/IanLewis/golang_guestbook/src/ece99a50ddfa/templates/base.html