TwitterはGoでゴー。

  • 12
    いいね
  • 0
    コメント

自己紹介

じゅんじゅんというニックネームで、関西を拠点に活動しているフロントエンドエンジニアです。

HAL大阪の2回生です👍 (2016.11.4現在)

よくstart up系イベントに行くので、大阪らへんの方は会いましょう!

GoでTwitter

最近Goの勉強をしています。そこでTwitterもGoでやっときたいな〜と。

そういえば...

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を作ってください。

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つぶやこう

まずツイートする方からいきましょう。

post.go
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が関数から返されます。

タイムラインを見てみよう。

では次は取得系をしていきたいと思います。

get.go
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