なか日記

一度きりの人生、楽しく生きよう。

C#とAzureでPVをつぶやくBotを作ってみよう -第5回 Webアプリケーションにまとめる-

連載第5回目は今までの処理をWebアプリケーションにまとめます。

連載目次

はじめに
第1回 Google Analytics APIの利用準備
第2回 Google AnalyticsからPVを取得する
第3回 Twitter APIの利用準備
第4回 Twitterに投稿する
第5回 Webアプリケーションにまとめる
最終回 Azureへのデプロイ

ASP.NET Webアプリケーションプロジェクトの追加

ソリューションにASP.NET Webアプリケーションプロジェクトを追加します。

プロジェクト名は「WebApplication」にしました。

テンプレートは「Web API」にし、認証は「なし」にしておきましょう。

f:id:nakaji999:20150701021959p:plain

参照の追加

前回までで作ったクラスが参照できるよう、プロジェクトの参照に TweetPVApps を追加しておきます。

コントローラの作成

テンプレートで「ValuesController」というコントーラーが作成されていますので、これを「TweetPVController」に変更します。

public class TweetPVController : ApiController
{
    // GET api/TweetPV
    public async Task<string> Get()
    {
        var file = ConfigurationManager.AppSettings["analyticsKeyFile"];
        var analyticsKeyFile = file.StartsWith("~") ? HttpContext.Current.Server.MapPath(file) : file; // ~で始まっていれば絶対パスに変換
        var helper = new AnalyticsHelper(analyticsKeyFile);

        var pv = await helper.GetPvAsync();
        var message = string.Format("昨日のなか日記のPVは{0}でしたyo https://nakaji.hatenablog.com/ ", pv);
        await TwitterHelper.UpdateStatusAsync(message);

        return message;
    }
}

確認し易いようにGETメソッドで実装していますが、必要に応じてPOSTに変更するなどして下さい。

前半でGoogle AnalyticsからのPV取得、後半でTwitterへの投稿を行っています。

P12キーファイルの配置

Google Analytics の P12キーファイルを、App_Dataフォルダにコピーします。

f:id:nakaji999:20150703021357p:plain

忘れがちですが、このファイルがリリース対象になるようファイルのプロパティにある「出力ディレクトリにコピー」にて、「新しい場合はコピーする」もしくは「常にコピー」に変更しておきます。

f:id:nakaji999:20150708034938p:plain

web.configの編集

第2回、第4回で app.config に設定した内容を web.config に追加します。

P12キーファイルの指定(analyticsKeyFile)ですが、Azureにデプロイしたときのことを考え、Webサイトの相対パスで指定しておき、TweetPVController内で絶対パスに変換するようにしています*1

<configuration>
  <appSettings>
    <add key="analyticsKeyFile" value="~/App_Data/xxxxx.p12"/>
    <add key="analyticsCredentialId" value="xxxxx@developer.gserviceaccount.com"/>
    <add key="analyticsViewId" value="99999999"/>

    <add key="consumerKey" value="xxxxxxxxxx"/>
    <add key="consumerSecret" value="xxxxxxxxxx"/>
    <add key="accessToken" value="xxxxxxxxxx-xxxxxxxxxx"/>
    <add key="accessTokenSecret" value="xxxxxxxxxx"/>

動作確認

動作確認ですが、デバッグ実行してみましょう。

その後、ブラウザで「http://localhost:22763/api/TweetPV*2にアクセスしてみます。

正常に動作すれば以下の様な結果が返ってくるはずです。

f:id:nakaji999:20150701031418p:plain

そして、Twitterには同じ内容でつぶやかれているはずです。

f:id:nakaji999:20150701031730p:plain

おわり

さて、いよいよ大詰め。最終回はAzureへのデプロイとスケジュール実行の設定を行います。

*1:Azure上では「D:\home\site\wwwroot\App_Data」になるので絶対パス指定もできるけど、環境に依存することになるので

*2:22763は環境によって異なります