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())
「[data]シート内の重複行の削除する処理」については、これをしないと[data]シートに毎日同じ記事データが複数行に保存されていくので、それを防ぐための処理です。具体的にはGAS内で、removeDuplicates()メソッドを実行するだけです。
その他、特に複雑な処理は行う必要ありませんので、注意点は特になしです。
Google データポータル
Googleスプレッドシートの[data]シートデータシートとして参照させて、Googleデータポータルでダッシュボードをデザインします。こんな感じで、シンプルなRSSリーダーのインターフェースが用意できます。データポータルについては、日別の件数集計やグラフの表示なども簡単にレポート画面が構築できますので本当に便利だと思います。
スプレッドシートからのデータ更新頻度も15分ごと~12時間ごと設定できるので必要に応じて設定すればOKです。
まとめ・課題
GoogleスプレッドシートのIMPPORTFEED関数はとても便利なので、非エンジニアの方々も使いやすく、あまり大きな課題はないのですが、強いてあげるとRSSフィードで取得するサイトの数が増えると、それに合わせてスプレッドシート側のシートを用意する必要があり、管理などが煩雑になるかなと思います。GoogleスプレッドシートのIMPORTFEED関数を利用する方法を利用せず、GAS側でUrlFetchApp.fetchやXmlService.parseを利用してRSSリーダーの処理を完結させるパターンで構築してみた別の事例もありますので、そちらについては後日、別記事で紹介させていただきたいと思います。