読者です 読者をやめる 読者になる 読者になる

技術のメモ帳

気が向いたときに書いてます

[GAS]kimono APIから変更通知を受け取り、変更内容をGmailで送信する

Google Apps Script

下記にインスパイアされたエントリとなります。

こちらの記事では、SendGridではなく、Gmailを利用して実装していきます。

それでは、まずは、kimono APIの設定から。

kimonoとは?

APIを提供していないウェブサイトの情報が収集できるWEBサービスです。

スクレイピングが簡単になる、といった方が分かりやすいですね。

使い方は、以下のエントリが詳しいでしょう。

Kimono : Turn websites into structured APIs from your browser in seconds

以下を見ると、実現できることが理解でき、夢が広がります。

Analyses & Visualizations - #builtwithkimono

kimono APIの設定

Amazonの特定商品の価格一覧(中古・新品)をkimonoでAPI化しました。

JSONでの出力結果は次の通りです。

{
  "name": "Amazon Book Price",
  "count": 17,
  "frequency": "Daily",
  "version": 2,
  "newdata": true,
  "lastrunstatus": "success",
  "thisversionstatus": "success",
  "nextrun": "Sun Sep 27 2015 07:29:17 GMT+0000 (UTC)",
  "thisversionrun": "Sat Sep 26 2015 07:29:17 GMT+0000 (UTC)",
  "results": {
    "prices": [
      {
        "price": "¥ 3,201",
        "postage": "¥ 257",
        "condition": "新品",
        "shop": {
          "href": "http://www.amazon.co.jp/gp/aag/main/ref=olp_merch_name_1/375-8507054-9096730?ie=UTF8&asin=1941222129&isAmazonFulfilled=0&seller=A2NWJYQC8FZIIZ",
          "text": "ワールド・ブックス"
        },
        "index": 1,
        "url": "http://www.amazon.co.jp/gp/offer-listing/1941222129/ref=olp_fsf"
      },
      {
        "price": "¥ 3,202",
        "postage": "¥ 257",
        "condition": "新品",
        "shop": {
          "href": "http://www.amazon.co.jp/gp/aag/main/ref=olp_merch_name_2/375-8507054-9096730?ie=UTF8&asin=1941222129&isAmazonFulfilled=0&seller=A3HWKZWB6XZ7QB",
          "text": "ブックデポジトリー (Book Depository)"
        },
        "index": 2,
        "url": "http://www.amazon.co.jp/gp/offer-listing/1941222129/ref=olp_fsf"
      }
      // 中略
    ],
    "meta": [
      {
        "title": "「すべての出品」 Metaprogramming Ruby 2: Program Like the Ruby Pros (Facets of Ruby) (ペーパーバック)",
        "author": "Paolo Perrotta (著)",
        "index": 16,
        "url": "http://www.amazon.co.jp/gp/offer-listing/1941222129/ref=olp_fsf"
      },
      {
        "title": "「すべての出品」 Metaprogramming Ruby 2: Program Like the Ruby Pros (Facets of Ruby) (ペーパーバック)",
        "author": "Paolo Perrotta (著)",
        "index": 17,
        "url": "http://www.amazon.co.jp/gp/offer-listing/1941222129/ref=olp_page_next/375-8507054-9096730?ie=UTF8&startIndex=10"
      }
    ]
  }
}

続けて、監視対象のページに変更があった場合に発生する、Web Hookの設定をします。

[USE DATA]→[WEBHOOKS]より、URL設定とテスト送信が実行できます。

POST送信を受け付けるメソッドを作った後に、再度、設定しましょう。

Web Hookをハンドリングする

Google Apps Scriptで、kimonoから送信されるWeb Hookをハンドリングする関数を書きます。

POST送信なので、doPost関数を実装してデプロイします。

function doPost(e) {
  if (!e.postData) return null;
  var contents = JSON.parse(e.postData.contents),
      subject  = contents.name,
      body     = '';
  body += contents.results.meta[0].title  + '\n';
  body += contents.results.meta[0].author + '\n';
  body += contents.results.meta[0].url    + '\n\n';
  Object.keys(contents.results.prices).map(function(i) {
    body += contents.results.prices[i]['price'] + '\n';
  });
  MailApp.sendEmail('admin@example.com', subject, body);
}

動作確認

先ほど紹介したkimonoのAPI管理画面から、GASアプリケーションのURLを登録し、[Test Webhooks]を実行します。

成功すると、URLの右側に[200]が表示されます。

テスト実行後、以下の形式のメールが送信されました。

kimono APIが駆使できると、APIを提供していない不動産サイトやグルメサイトからデータを集計し、分析できますね。

また、分析データの加工をGoogle Apps Scriptで行えば、実質無料でいろいろな分析が楽しめそうです。

kimonoの操作にもうちょっと慣れたいところです。