自己紹介
じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。
HAL大阪の2回生です👍 (2016.11.4現在)
よくstart up系イベントに行くので、大阪らへんの方は会いましょう!
GoでTwitter
最近Goの勉強をしています。そこでTwitterもGoでやっときたいな〜と。
そういえば...
こんなQiitaの投稿がありました。。
今回はもっとGoの言語的な部分の説明なども含めながら詳しく書いていきたいと思います。
TwitterのエンドポイントなどはReference Documentationを参考にしていきます。
今回は、フルスクラッチはする気ないのでライブラリとしてanacondaを使いました。
$ go get github.com/ChimeraCoder/anaconda
は各自お願いします。
まずは4つのキーから
まずTwitterAPIを使うのにOAuth認証を通すためコンシューマキー
,コンシューマシークレットキー``アクセストークン
,アクセストークンシークレット
を用意する必要があります。
プロジェクトフォルダに移動したら
$ mkdir keys
$ touch keys/keys.go
と、直下にkeys
フォルダとkeys.go
を作ってください。
package keys
import (
"github.com/ChimeraCoder/anaconda"
. "os"
)
func GetTwitterApi() *anaconda.TwitterApi {
anaconda.SetConsumerKey(Getenv("TWITTER_CONSUMER_KEY"))
anaconda.SetConsumerSecret(Getenv("TWITTER_CONSUMER_SECRET"))
api := anaconda.NewTwitterApi(Getenv("TWITTER_ACCESS_TOKEN"), Getenv("TWITTER_ACCESS_TOKEN_SECRET"))
return api
}
Twitter_*
の部分は、適宜そのまま書いてしまうか、環境変数に書くかなんなり書き換えてください!
環境変数を使わない場合は、import
にあるos
は消して大丈夫です。
keys.go
では、func GetTwitterApi
という関数を作りました。
この関数を、外部から呼ぶとanacondaでいい感じにしてくれた後ポインタが返されます。
そのポインタの型が*anaconda.TwitterApi
です。
goには命名規則があり、関数名を頭文字大文字で定義することでアクセス権がpublic
になります。
外部から呼ぶ関数なので絶対に頭文字を大文字にしておいてください。
Getenv()
関数はos
のメソッドで、環境変数を呼び出すことのできるものです。
本来はos.Getenv()
なんですが、os
は別につけなくてもいいようにimport
部分で
import (
. "os"
)
と、.
をつけています。
これでこの返却されたapi
を使ってTwitterライフを楽しんでいきます!
Hello worldつぶやこう
まずツイートする方からいきましょう。
package main
import (
. "./keys"
. "fmt"
)
func main(){
api := GetTwitterApi()
text := "Hello world"
tweet, err := api.PostTweet(text, nil)
if err != nil {
panic(err)
}
Print(tweet.Text)
}
textに"Hello world"
を代入して、api.PostTweet(text,nil)
を実行します。
その結果がtweet,err
にかえってきます。
goは返り値を複数返すことができます。
そして、try,catch
みたいなことはせず、エラーが起きたかどうかは返り値を見ることで確認できます。
今回の場合はtweet
に自分がつぶやいたものが、err
にエラーが入ります。
もしエラーがあった場合はpanic
という関数で処理をします。
panicはプログラムの継続的な実行が難しく、どうしよもなくなった時にプログラムを強制的に終了させるために発生するエラーです。
Effective -> panic ここにも
ときおり、プログラムは全く継続できない事態に陥ることがあります。
こういったときのために、組み込み関数panicがあります。これは、実質的にプログラムを停止させるランタイムエラーを作成します。
と書いています。
エラーがなければnil
が関数から返されます。
タイムラインを見てみよう。
では次は取得系をしていきたいと思います。
package main
import (
. "./keys"
. "fmt"
"net/url"
)
func main(){
api := GetTwitterApi()
v := url.Values{}
v.Set("count","10")
tweets, err := api.GetHomeTimeline(v)
if err != nil {
panic(err)
}
for _, tweet := range tweets {
Println("tweet: ", tweet.Text)
}
}
今回もそんなに変わらないですが、url.Values
が新しく出てきました。
twitterのtimelineを取得する際に使うオプションの設定のために使います。
他の言語でやるときに使う{count: 10}
とか見たいなやつです。
v.Set(<key>,<value>)
の関係で書くことができます。
ではそのv
を使ってタイムラインの取得をしていきます。
tweets, err := api.GetHomeTimeline(v)
tweets
にツイートが入っているので
for _, tweet := range tweets {
Println("tweet: ", tweet.Text)
}
range
を使って一つずつ表示していきます。
ちなみにgoにはfor
以外のループ文はないので、覚えておきましょう!
最後に
LINEのMessaging APIもGoでやったり、WebサイトのサーバもGoで書いてたりと最近よく触っているのでいい備忘録になるし、誰かの助けになれば幸いです!
初言語はTwitter APIから始めましょう!と言ってるだけあってTwitter大好きなのでぜひフォローしてください!
Twitter @konojunya