GAE/GOでTwitter Botを作ってみる~前編~

TwitterやFacebookのような有名サービスと連携したアプリを開発する場合、開発者はサービスが提供するREST APIを利用することになります。ただ、実際に開発をおこなう場合、開発者は自前でAPIを操作するコードを書く必要はないかもしれません。なぜなら、サービスのDeveloper向けドキュメントを探せば、開発言語に対応したライブラリを見つけることができる可能性があるからです。今回テーマとして扱うTwitterにも、もちろんライブラリが用意されています。 Twitterが公開している以下の開発者向けのページにアクセスすれば、JavaやPHP、Python等の言語別のライブラリを見つけることができます。 Twitter Libraries https://dev.twitter.com/resources/twitter-libraries 今回はその中からGO用のライブラリであるAnacondaを利用してGAE上で動作するbotアプリを作成してみます。AnacondaはTwitter API 1.1に対応したGO向けTwitterパッケージで、GAE/GOにも対応しています。詳しくはAnacondaのGitHub公式ページをご確認ください。 GitHub – ChimeraCoder/anaconda: A Go client library for the Twitter 1.1 API https://github.com/ChimeraCoder/anaconda 本記事ではAnaconda × GAE/GOでTwitter botを作成するための手順について説明します。ただし、内容の長さから本記事は内容を「前編」「後編」に分割します。それぞれの内容は以下の通りです。
  • 前編
  1. Twitterアプリの登録とアクセストークンの発行
  2. Anacondaのセットアップ
  3. ローカル環境でTwitter投稿プログラムを動作させる
  • 後編
  1. 天気情報お知らせbotの実装
  2. スケジューリングの設定
  3. デプロイする
  4. Botの動作確認
前編ではTwitterアプリを作成するための事前準備とローカル環境でTwitterアプリを動作させる手順について学び、後編では実際にbotアプリを作成してみます。 それではTwitter botを作成していきましょう。

アプリケーションを登録しアクセストークンを生成する!!

Twitter APIを利用するためには、Twitter APIを利用するアプリケーションをTwitterで登録する必要があります。以下の手順に従ってアプリケーションの登録をおこなってください。ただし、以下の手順を行うためにはTwitterアカウントによるログインが必要となります。アカウントを取得していない場合はまずはTwitterアカウントを取得してください。 (1) アプリ登録ページにアクセスします Twitter Apps https://apps.twitter.com/ (2) 「Create New App」ボタンを押下します (3)アプリケーションの登録フォームを入力し「Create your Twitter application」ボタンを押下します。
項目 説明
Name アプリケーション名を入力します。
Description アプリケーションの説明を入力します。
Website TwitterアプリケーションをホスティングするWebSiteのURLを入力します。 ※この時点では何でも良いので適当なURLを指定してください。後編記事でGCPプロジェクトを作成しますので、GAEのURLが決定した時にURLを再度設定します。
Callback URL ユーザ認証完了後のコールバック先URLを入力します。 ※本記事ではユーザ認証を利用しないため本項目は未入力とします。
  (4) 登録が完了するとアプリケーションの詳細ページに遷移するので「Keys and Access Tokens」タブをクリックします。 (5)「Keys and Access Tokens」ページに遷移後「Create my access token」ボタンを押下します。 (6)ボタンを押下すると画面がリロードされページにアクセストークン情報が表示されます。 以上でアプリ登録とアクセストークンの発行は完了です。ただし、Twitterにツイート投稿を行う場合、アクセストークンだけでなくConsumerKeyもAPI実行時に必要な情報となります。ConsumerKey情報は「Keys and Access Tokens」ページの「Application Settings」で確認することができるので、こちらについてもメモしておいてください。 [注意点] 以下のようなエラーメッセージが表示される場合、Twitterアカウントの設定ページで電話番号を登録する必要があります。Twitterアプリケーションを作成する場合、電話番号の登録は必須項目です。電話番号の登録方法については以下URLをご参考ください。 アカウントへの携帯電話番号の登録 https://support.twitter.com/articles/20172611

Anacondaをセットアップする!!

次はGOPATHにAnacondaパッケージのダウンロードをおこないます。以下のコマンドを実行しダウンロードを実行してください。
$ go get github.com/ChimeraCoder/anaconda
※GOPATHの設定については以下をご参考ください。 The GOPATH environment variable https://golang.org/doc/code.html#GOPATH 以上でAnacondaのセットアップは完了です。とても簡単ですね。

ローカル環境でTwitter投稿プログラムを動作させる!

次はローカル環境で開発サーバを起動しTwitterにツイートを投稿してみます。ただし、GAE/GOアプリをローカルで動作させるためにはGO用のGAE SDKのインストールが必要になります。GAE SDKがインストールされていない場合は以下URLを参考にSDKのインストールを行ってください。 Download the SDK for App Engine https://cloud.google.com/appengine/docs/standard/go/download SDKのインストールが完了したら、以下の手順に従ってTwitterにツイートを投稿してみましょう。 (1) GAEプロジェクト用のフォルダを作成します
$ mkdir twitter-bot
(2) プロジェクトフォルダへ移動します
$ cd twitter-bot
(3) GAE設定ファイル(app.yaml)を作成します ※ローカル環境で実行するだけですので「application」で指定するGCPプロジェクトのIDは任意の文字列で問題ありません。
application: morita-demo

version: 1

runtime: go

api_version: go1
handlers:
- url: /.*

script: _go_app
(4) 以下プログラムをコピーしtwitter.goというファイルを作成します ※以下4点の項目にはTwitterアプリ登録時に発行されたトークン情報を指定してください。
  • consumerKey
  • consumerSecret
  • accessToken
  • accessTokenSecret
package main
import ( "net/http""github.com/ChimeraCoder/anaconda"

"net/url"

"appengine/urlfetch"

"appengine"

)
const (

consumerKey = "******************************"

consumerSecret = "******************************"

accessToken = "******************************"

accessTokenSecret = "******************************"

)
func init() {

http.HandleFunc("/tweet", Tweet)

}
func Tweet(w http.ResponseWriter, r *http.Request) {
// ConsumerKeyのセット

anaconda.SetConsumerKey(consumerKey)

// ConsumerSecretのセット

anaconda.SetConsumerSecret(consumerSecret)

// AccessTokenとAccessTokenSecretのセット

api := anaconda.NewTwitterApi(accessToken, accessTokenSecret)

ctx := appengine.NewContext(r)
// apiのHttpClient.TransportにurlfetchのTransportを利用する

api.HttpClient.Transport = &urlfetch.Transport{Context: ctx}
v := url.Values{}

// ツイートする

_, err := api.PostTweet("hello anaconda", v)

if err != nil {

http.Error(w, err.Error(), http.StatusInternalServerError)

}
}
(5)SDKに同梱されているgoappツールを利用して開発サーバを起動します ※「serve」は開発サーバを起動するためのサブコマンドで「twitter-bot」は(1)で作成したGAEプロジェクトのフォルダパスです。
$ goapp serve twitter-bot
(6)curlコマンドでプログラムを実行します
$ curl http://localhost:8080/tweet
(7)Twitterを確認しツイートが投稿されていればプログラムの実行は成功です 以上でローカル環境からのプログラム実行手順の説明は終了となります。

前編まとめ

以上でローカル環境でTwitterアプリを動作させる手順の説明は終了です。導入はとても簡単だったのではないでしょうか。ただし、今のままではHTTPリクエスト経由で固定文言をツイートするだけの不完全なプログラムで、まだまだbotとは言えません。後編記事では、前編で作成したプログラムを改造し、自動で定期的にツイートを投稿するbotプログラムを完成させます。ぜひ後編記事もチェックしてください。 ※ 弊社ではクラウドエース(Cloud Ace)というGCPの導入・運用支援サービスを提供しておりますので、ご興味のある方はこちらまでお問い合わせください。GAEに限らず、あらゆるGCPサービスのサポートが可能です。

Google のクラウドサービスについてもっと詳しく知りたい、直接話が聞いてみたいという方のために、クラウドエースでは無料相談会を実施しております。お申し込みは下記ボタンより承っておりますので、この機会にぜひ弊社をご利用いただければと思います。

無料相談会のお申込みはこちら