GoogleスプレッドシートとGoogle Apps ScriptとGoogleデータポータルでRSSリーダーを構築してみた件(その1・IMPORTFEED関数編)

GMO NIKKOK.Aです。今は開発エンジニアとしてではなく、ディレクション中心の業務が中心のため、プログラミングや技術的に深い内容ではなく、誰でも無料で利用できるGoogleのサービスを組み合わせて簡単なツールを構築した事例を紹介いたします。

RSSリーダーが復権?

先日、Android端末のChromeブラウザのアプリで「Follow」機能として、RSSフィードの情報を表示できる機能がリリースされたというニュースがありました。昨今、あまり注目を浴びていなかったRSSリーダーのニーズが今後、また少し盛り上がるかもしれません(?)。
今回は、そんな「RSSリーダー」を本格的なサーバーやDBを用意せずに、GoogleスプレッドシートとGoogle Apps ScriptとGoogleデータポータルとGoogleのスプレッドシートを利用して簡易的に構築した方法についての説明です。  

RSSリーダー|スプレッドシート版の全体フロー


Googleのスプレッドシート関数だけでデータ取得し、過去記事のデータもアーカイブし、ダッシュボードで閲覧するために利用した全体構成のイメージです。無料のツールを組み合わせ、役割分担するだけで、シンプルに構築できました。以下、細かいポイントだけ軽く説明いたします。

Googleスプレッドシート

スプレッドシートの用意

3種類のシートを用意しておきます。
  • [data]シート:記事データをアーカイブ保存する用
  • [rssフィード名]シート:RSSフィードを取得する用 ※フィード取得したいサイトの数だけ
  • [setting]シート:記事データをアーカイブするシート名などを管理

RSSフィード名シート

このシート内で、GoogleスプレッドシートのIMPPORTFEED関数を利用して、最新のRSSフィードの情報を取得します。(図中の②の処理)
IMPPORTFEED関数をセル内で利用するだけで、スプレッドシート側でデータを取得してきてくれます。
IMPORTFEED関数の詳しい利用の仕方は、公式の説明ページなどを参照頂ければと思いますが、自分の使い方はパラメータとして、RSSフィードのURLとクエリとして”items”を指定してあげているだけです。これだけで最新の情報がスプレッドシート上に展開されます。

=IMPORTFEED(C1&“?d=”&TODAY(),“items”)
※フィードURLのところに「?d=”&TODAY()」を追加していますが、キャッシュ対策です。
参考:IMPORTFEED関数
https://support.google.com/docs/answer/3093337?hl=ja
ここで注意しておきたいポイントは、RSSフィードで配信しているサイト側によるのですが、その当日にフィードで配信している記事しか取得できないので、過去の配信記事を蓄積して参照できるようにしたい場合は、後述のGoogle Apps Scriptを利用したアーカイブ化の処理が必須になります。  

Google Apps Script(GAS)

プログラム処理(GAS)の仕組み・仕様についてですが、1日1回シートの情報取得し、アーカイブ用のシートへ転記する以下の処理のみ行います。(図中③の処理)
  • [setting]シートの表に記載されているシート名のデータを[data]シートへコピーする処理
  • [data]シート内の重複行の削除する処理(removeDuplicates())
これらの処理を行う関数を用意したら、GASの画面でトリガーを設定し定期的に実行するようにします。

「[data]シート内の重複行の削除する処理」については、これをしないと[data]シートに毎日同じ記事データが複数行に保存されていくので、それを防ぐための処理です。具体的にはGAS内で、removeDuplicates()メソッドを実行するだけです。

その他、特に複雑な処理は行う必要ありませんので、注意点は特になしです。

Google データポータル

Googleスプレッドシートの[data]シートデータシートとして参照させて、Googleデータポータルでダッシュボードをデザインします。  



こんな感じで、シンプルなRSSリーダーのインターフェースが用意できます。データポータルについては、日別の件数集計やグラフの表示なども簡単にレポート画面が構築できますので本当に便利だと思います。
スプレッドシートからのデータ更新頻度も15分ごと~12時間ごと設定できるので必要に応じて設定すればOKです。

まとめ・課題

GoogleスプレッドシートのIMPPORTFEED関数はとても便利なので、非エンジニアの方々も使いやすく、あまり大きな課題はないのですが、強いてあげるとRSSフィードで取得するサイトの数が増えると、それに合わせてスプレッドシート側のシートを用意する必要があり、管理などが煩雑になるかなと思います。


GoogleスプレッドシートのIMPORTFEED関数を利用する方法を利用せず、GAS側でUrlFetchApp.fetchやXmlService.parseを利用してRSSリーダーの処理を完結させるパターンで構築してみた別の事例もありますので、そちらについては後日、別記事で紹介させていただきたいと思います。