GoogleスプレッドシートとGoogle Apps ScriptとGoogleデータポータルでRSSリーダーを構築してみた件(その2・GAS内でフィード取得編)

GMO NIKKOK.Aです。前回の記事に引き続きGoogleのサービスを組み合わせて簡単なツールを構築した事例の紹介です。
前回記事:GoogleスプレッドシートとGoogle Apps ScriptとGoogleデータポータルでRSSリーダーを構築してみた件(その1・IMPORTFEED関数編)

RSSリーダー|GAS版の全体フロー

前回はGoogleのスプレッドシート関数(IMPPORTFEED)だけでRSSのフィードデータ取得する方法で構成しましたが、今回はGoogle Apps Script(GAS)内でフィードデータ取得する方法で構成します。 利用ツールは、Googleスプレッドシート、Google Apps Script、Googleデータポータルを利用します。  

Googleスプレッドシート

スプレッドシートのファイル内にシートを2つ(RSS・Reader)用意します。

RSS(マスター用シート)

項目として以下を用意します。
  • 種別:ATOM / RSS1 / RSS2
  • フィードURL:取得先のRSSフィード
  • 企業名:ダッシュボード側でフィルタ用に利用
  • カテゴリ:ダッシュボード側でフィルタ用に利用

Reader(データ用シート)

GASで取得したRSSフィードのデータの保存先です。 データポータルで参照するデータソースは、このシートになります。

Google Apps Script

主な実装処理

大まかに以下の流れで処理しています。
  1. スプレッドシートのマスタシートからフィードURLを取得して、UrlFetchApp.fetchでリクエスト(図中②の処理)
  2. XmlService.parseで変換したデータを、RSSの種類(RSS1/RSS2/Atom)で分岐して必要な項目(URL・タイトルなど)を抽出(図中③の処理)
  3. 重複チェックして、スプレッドシートのデータシートに差分のみ追加(図中④の処理)
  現状、RSSフィードの種類をスプレッドシートのマスタシート内に記載するようにしておりまして、事前にRSSフィード種類を設定しておく必要があります。フィードURLだけの設定で、取得してきたデータの中身を自動で判別できたらよいなと思っているのですが、そこまで実装できていません。そもそも簡易的な構成で要件は十分満たしているので、そこまでチューニングは必要ないかなといったところです。

その他、未実装ですが、スプレッドシート側で[Title]や[URL]などのシートを用意して、除外キーワードや除外URLを予め登録しておくなどの運用で、データシートへ追加する前に特定キーワードや特定URLを除外する機能も実装するのも容易かなと思います。

Googleデータポータル

こちらについては前回同様、データソースを上記のスプレッドシートのデータシート(Reader)に指定して接続するだけで自由にダッシュボードの構築が可能なので、詳細は省略いたします。  

まとめ・課題

前回のスプレッドシート関数(IMPORTFEED)でRSSフィードのデータ取得する方法に比べて、GAS内で処理を色々完結できるため、スプレッドシート側の準備、管理などがシンプルになり運用はこちらの方が楽そうです。

その他課題としては、
取得する対象のRSSフィードの件数が多くなった場合に、Google Apps Script(GAS)の実行時間の制限(6分)を超えそうな場合に、対策が必要になるかなという懸念があります。(その場合も、データ取得の対象が増えたら、簡易的にファイルを複数に分けて対処するでも十分良さそうです)