Google Apps Scriptでお手軽RSS配信サービスを作る

| コメントをどうぞ

Google Apps Scriptで簡単なRSS配信サービスを作ってみました。

仕様

  • スプレッドシートを読み込み、行データを RSS の item 要素として出力
  • RSSタイトルはスプレッドシート名を利用
  • XML出力はテンプレートを利用(出力内容をカスタマイズ可能に)

スプレッドシート

spreadsheet_gas_rss

読み込み元のスプレッドシートはこのような感じ。 データ部はヘッダ行を除いた2行目からとします。

コード

server.js

// Script-as-app template.

var spreadSheetId = "[読み込みスプレッドシートのID]";
var spreadSheet;
var range;

function doGet() {
 // スプレッドシート取得
 spreadSheet = SpreadsheetApp.openById(spreadSheetId);
 
 // 20x20セルのデータを一度に取得しておく
 range = spreadSheet.getActiveSheet().getRange(2, 1, 20, 20);
 
 // テンプレート呼び出し(rssTemplate.html)
 var output = HtmlService.createTemplateFromFile('rssTemplate');
 var result= output.evaluate();
 
// コンテントタイプ指定
 return ContentService.createTextOutput(result.getContent())
 .setMimeType(ContentService.MimeType.XML);
}

// 行データ取得
function getRowData(rowNum){
 return range.getValues()[rowNum];
}

// シートのタイトル取得
function getSpreadSheetTitle(){
 return spreadSheet.getName();
}

// シートのリンク取得
function getSpreadSheerLink(){
 return spreadSheet.getUrl();
}

メインのスクリプトです。

スプレッドシートの情報はあらかじめ一定範囲を読み込んでおきます。セル単位での取得はパフォーマンスが悪く、APIコール回数も増えてしまうためです。20x20セル程度読み込んで保持しておきます。

テンプレートファイル rssTemplate.html を利用してXMLを作成します。

出力時のコンテントタイプはXMLとします。

get~の関数はスプレッドシートのデータを取得する関数で、テンプレートから呼び出しを行います。(テンプレ―トからも変数 spreadSheet を直接参照できてしまうので微妙ですが)

 

rssTemplate.html

<rss version="2.0"
 xmlns:content="http://purl.org/rss/1.0/modules/content/"
 xmlns:dc="http://purl.org/dc/elements/1.1/">

<channel>
 <title><?= getSpreadSheetTitle() ?></title>
 <link><?= getSpreadSheerLink() ?></link>
 <description></description>
 <?
 for(var i=0;i<20;i++){
 if(!getRowData(i)[1]) continue;
 ?>
 <item>
 <title><?= getRowData(i)[0] ?></title>
 <link><?= getRowData(i)[1] ?></link>
 <pubDate><?= getRowData(i)[2] ?></pubDate>
 <dc:creator><![CDATA[<?= getRowData(i)[3] ?>]]></dc:creator>
 <category><![CDATA[<?= getRowData(i)[4] ?>]]></category>
 <description><![CDATA[<?= getRowData(i)[5] ?>]]]></description>
 </item>
 <? } ?>
</channel>

</rss>

RSS XML出力用のテンプレートです。

HTMLテンプレートファイルをXML用として利用します。動作は問題なかったので大丈夫です。(多分)

スクリプトレットを使ってスプレッドシートのデータを埋め込みます。 getRowData( rowNum ) で行情報のArrayを取得できます。

実行

[公開]->[Webアプリケーションとして導入]を行い、アプリケーションを公開して動作を確認します。

xml_gas_rss

無事出力されました。

infoscoop_gas_rss

infoScoopでもちゃんと読めました。

雑感

1時間ほどで実装できました。お手軽ですね。

アンケートフォームの入力内容をスプレッドシートに出力している場合など、通知代わりに使えるかもしれません。(メール通知でもできそうですが)

既存のスプレッドシートデータなども、テンプレートや取得範囲をいじるだけでRSS化できそうです。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>