views4GCPのストレージサービスについてまとめてみた。Exp:190284普段はGCP専門のエンジニアをやっています。最近は個人的な活動としてGOとswiftでアプリ作ってます。G+TweetShareHatena注意この記事は2017年4月18日に更新されたもので、内容が古い可能性がありますのでご注意ください。Botを作ってみる」の後編記事です。前編記事では、Twitterアプリの登録方法からローカル環境でTwitter投稿するまでの手順について説明しました。後編の記事内容は以下の通りです。前編記事のURLは以下の通りです。botを作成していきましょう。APIのURLを決定する!天気情報はLivedoorのお天気WebサービスのAPIから取得します。APIのURLを特定しましょう。-お天気Webサービス仕様コードhttp://weather.livedoor.com/weather_hacks/webserviceクエリパラメータ「city」に地域IDを指定することでその地域の天気情報を取得することができます。地域IDは以下RSSのURLから確認することができます。コードhttp://weather.livedoor.com/forecast/rss/primary_area.xml今回は東京の天気情報を取得してみましょう。いうことで地域IDは「130010」です。APIのURLとして定義すると、東京の天気は以下URLから取得することができます。APIのURLが確定したので、次はこのURLからデータの取得を行います。APIからレスポンス(JSON)を取得する!それでは実装してみましょう。GAEから外部APIへのhttpリクエストを送信するためにはurlfetchを利用します。urlfetchで取得したJSONをログ出力するコードを実装します。前編で説明した手順で以下のプログラムをローカル環境で実行してみましょう。以下を実行すると、単純にJSONデータがコンソール上に出力されます。string(body))}レスポンスを取得するためのコードはこれだけです。次はJSONデータのパースをおこないます。レスポンスJSONをパースする!JSONのパースにはサードパーティパッケージの「jason」を利用します。「jason」を以下のコマンドからダウンロードします。github.com/antonholmquist/jasonプログラムを実装する前にパースするJSONを確認します。以下がAPIレスポンスのサンプルとなります。今回取得するパラメータは「publicTime」「title」「link」とします。descriptionはTwitterの140文字制限に抵触してしまうため今回は取得しません。北日本は高気圧に覆われています。低気圧が黄海にあって、東北東へ進んでいます。関東甲信地方は、晴れまたは曇りとなっています。17日は、はじめ高気圧に覆われて晴れますが、日本海を北東へ進む低気圧に向かって南海上から湿った空気が入るため次第に曇りとなり、夕方から雨となる見込みです。甲信地方では夜遅く雷を伴い激しい雨の降る所があるでしょう。18日は、日本海を北東へ進む低気圧の影響で午前中は雨となり、雷を伴い激しい雨の降る所がある見込みです。午後は次第に曇りや晴れとなるでしょう。関東近海では、17日は波が高く、18日はしけるでしょう。所々で霧が発生しています。船舶は高波や視程障害に注意してください。17日は、晴れ後曇りで、夕方からは雨となるでしょう。18日は、雨が降りますが、昼過ぎからは曇りとなるでしょう。...}それでは実装してみます。以下がJSONのパースを行うプログラムです。最初にjason.NewObjectFromBytes()を利用してJSONをオブジェクトに変換し、あとはパラメータ単位でデータのアクセスを行なっています。link)前章で作成したTweet関数の中身をコメントアウトし、関数の中身を上記プログラムに差し替えてください。serveで開発サーバを起動します。twitter-bot※「twitter-bot」は前章で作成したGAEアプリのルートフォルダです。前章から手順通りにBot作成を行っている場合は「twitter-bot」で問題ありませんが、異なる場合は任意のフォルダパスを指定してください。開発サーバを起動後、以下のcurlコマンドを実行します。http://localhost:8080/tweet上記のプログラムを実行すると以下のようなログがコンソール上に出力されます。コード通りにパラメータが出力されていることがわかります。これでパース部分の実装は完了です。http://weather.livedoor.com/area/forecast/130010パースしたパラメータを結合してTwitterに投稿する!次に取得した「publicTime」「title」「link」を文字列結合し、Twitterに投稿するコードを実装します。Twitterに投稿するコードは前編で実装したコードを利用します。http.StatusInternalServerError)}最終的なコードは以下の通りです。前編記事からの変更箇所はハイライトさせています。以上で天気情報の自動投稿botの作成は完了です。consumerKeyとaccessToken情報については、前編で作成した値をセットしてください。http.StatusInternalServerError)}}GAEでスケジューリング(cron)設定をおこなう!次は前章で作成した投稿プログラムを定期実行するためのスケジューリング設定をおこないます。「特定の日時になったらバッチプログラムを実行する」「1時間毎にレポートメールを送信する」といった自動定期処理をGAEから実行したい場合は、GAEのcron機能を利用します。cron機能を有効化するのはとても簡単で、cron.yamlにスケジューリングの設定を定義しデプロイを実行するだけです。前章で作成したGAEプロジェクトフォルダ直下にcron.yamlというファイルを作成し、以下の内容をコピペします。Asia/Tokyo上記設定によって毎朝11:00に「/tweet」のURL(前章で作成したプログラムのURI)がGAEから実行されるようになります。前述した通り、この設定はデプロイされない限りGAE上で実行されません。次はGAEへのデプロイの準備に入ります。GCPプロジェクトを作成する!GAEアプリケーションをデプロイするためにはGCPプロジェクトを作成する必要があります。GCPプロジェクトの作成手順がわからない場合は以下URLをご参考ください。初心者のためのGCPプロジェクト始め方入門https://apps-gcp-tokyo.appspot.com/gcp-startup/登録したTwitterアプリの設定データ(WebSite)を変更する!前章でTwitterアプリを登録した時に「WebSite」の項目には「この時点では何でも良いので適当なURLを指定してください」と記載しました。それは、Twitterアプリ登録時点でGAEアプリのURLが決定していなかったからです。GAEのURLはプロジェクトのIDによって決まるため、前章でプロジェクトを作成していればURLを登録できる状態となります。Appshttps://apps.twitter.com/上記URLから前章で作成したTwitterアプリを編集し「WebSite」に以下のURLを入力しアプリデータを更新してください。コードhttp://<作成したプロジェクトのID>.appspot.comGAEにアプリケーションをデプロイする!それでは、いよいよデプロイの準備が整いました。以下の手順に従ってGAEアプリのデプロイを実行してください。前章で作成したapp.yamlを編集し<プロジェクトID>に作成したGCPプロジェクトのIDを指定します。admin※「login:admin」を指定することで外部からのアクセスを制限しています。この設定によってBotアプリのアクセスはアプリ管理者やcronによるアクセスに絞られます。以下のコマンドを実行してGAEアプリケーションをデプロイします。goappはGAE/GO用のSDKに同梱されているツールです。「path/to/project」はGAEアプリ(プログラムファイルやapp.yamlが置かれているフォルダ)のパスを指定します。successful.」と表示されればデプロイは成功です。entries.デプロイしたら、あとはcron.yamlで設定した時間になるのを待つだけです。ブラウザ等、外部から直接URL(http://○○○○.appspot.com/tweet)にアクセスしたい場合はBotアプリ(GAEアプリ)の管理者になる必要があります。アプリの管理者であれば、Google認証によってcronが実行する前にプログラムの実行が可能です。botの動作をGAEのサーバ上で確認する!cron.yamlで指定した時間になったらTwitterを確認してみましょう。Bot作成のまとめ以上で天気予報を自動ツイートするbotの作成は完了です。今回取り扱ったサンプルコードはコピペすればGAE上で動作するコードになっています(トークン情報やアプリケーションIDの書き換えは必要です)。そのまま動作させるのも良いですし、自分用のbotになるように簡単な所では地域コード等修正を加えてみるのも良いかもしれません。ちなみにこの程度の内容のプログラムであれば、GAEでは無料で運用することが可能です(これでも無料クオータを持て余してしまうくらいです)。Ace)というGCPの導入・運用支援サービスを提供しておりますので、ご興味のある方はこちらまでお問い合わせください。GAEに限らず、あらゆるGCPサービスのサポートが可能です。