前回記事: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
主な実装処理
大まかに以下の流れで処理しています。- スプレッドシートのマスタシートからフィードURLを取得して、UrlFetchApp.fetchでリクエスト(図中②の処理)
- XmlService.parseで変換したデータを、RSSの種類(RSS1/RSS2/Atom)で分岐して必要な項目(URL・タイトルなど)を抽出(図中③の処理)
- 重複チェックして、スプレッドシートのデータシートに差分のみ追加(図中④の処理)
その他、未実装ですが、スプレッドシート側で[Title]や[URL]などのシートを用意して、除外キーワードや除外URLを予め登録しておくなどの運用で、データシートへ追加する前に特定キーワードや特定URLを除外する機能も実装するのも容易かなと思います。
Googleデータポータル
こちらについては前回同様、データソースを上記のスプレッドシートのデータシート(Reader)に指定して接続するだけで自由にダッシュボードの構築が可能なので、詳細は省略いたします。まとめ・課題
前回のスプレッドシート関数(IMPORTFEED)でRSSフィードのデータ取得する方法に比べて、GAS内で処理を色々完結できるため、スプレッドシート側の準備、管理などがシンプルになり運用はこちらの方が楽そうです。その他課題としては、取得する対象のRSSフィードの件数が多くなった場合に、Google Apps Script(GAS)の実行時間の制限(6分)を超えそうな場合に、対策が必要になるかなという懸念があります。(その場合も、データ取得の対象が増えたら、簡易的にファイルを複数に分けて対処するでも十分良さそうです)