backstage

合唱音源の新着情報の舞台裏

Azure API Appsで、はてブしたURLをpocketしてみた

ふと「はてなブックマークしたURLをPocketに送りたい!」と思いIFTTTを探してみたのですが、残念ながらはてブに対応していませんでした。

しかしpocketにはAPIがあり、はてブにはweb hookがあります。 これらを繋ぐAPIを開発すれば要望は満たせるのではないかと思いました。

適当にググってみると、PHPPerlソースコードがヒットします。簡単そうです。

はてなブックマーク Web Hook - Hatena Developer Center

しかしここで魔が差して、絶賛パブリックベータ中であるMicrosoft Azure API Appsを使って、ASP.NET C#APIを開発してみることにしました。

Azure API Appsとは?

最近発表されたAzureのあたらしいPaaS。APIホスティングに特化したクラウドサービスです。 先日Global Azure Boot Camp(GABC) 2015 in Japan(大人の部の方)でその名を聞いて、ずっと気になっていました。

料金のページを見てみると書いてある条件がよく分かりませんが一応無料のプランがあるようです。 さっそく試してみましょう。

Azure API AppsはAzureの新しい方のポータルからしか作成できないようです。 「新規」→「Web + モバイル」→「API Apps」から作成できます。

f:id:s2terminal:20150705164029p:plain

設定する点としては、freeのプランを選ぶ事と、アクセスレベルをpublicにしておく事ぐらいです。

APIを開発する

↓の記事などを参考に、Pocket APIのコンシューマキーとアクセストークンを取得し、はてブweb hookを設定しておきます。

pocket APIの使い方まとめ(サンプルコード付き)

次にAPIを開発します。 ↓の記事に沿って、Visual StudioでAzure API アプリ プロジェクトを作成します。

Azure App Service での ASP.NET API アプリの作成

下記のようにモデルとコントローラクラスを定義します。

https://gist.github.com/s2terminal/77210b052290aebdf7e6

注意点としては、Postメソッドの引数にurl,keyをプリミティブ型として指定してPOSTパラメータを受け取る方法ではうまくいかず、モデルオブジェクトとしてバインドする必要がありました。

はてな側の仕様が単純なPOSTパラメータではなくapplication/jsonか何かで送ってきているから受け取れないと思うのですが、ASP.NETに詳しくないのでよく分かりません。 Azure側にも現状デバッグする仕組みが無い?ようで、はてな側がAPIを叩いた時のリクエストも掴めず詳細不明です。

参考:連載:ASP.NET Web API 入門:第3回 APIコントローラの実装方法 (2/3) - @IT

あとはデプロイすれば完成です。 予めAzure Web Appをポータルから作成しておけば、Visual StudioからAzureにログインしてデプロイ設定をインポートできるので、数クリックでデプロイできます。

試しに、デプロイ完了時に開かれるAPIのルートパスをはてブしてみました。

f:id:s2terminal:20150705164649p:plain

無事pocketに入りました。

Microsoft Azure API Appsを利用して、簡単にAPIを作成してデプロイすることができました。 Azure API Appsはまだベータ版のようですが、正式リリースが楽しみですね。