GoogleスプレッドシートにGoogle apps scriptを使ってRSSを取得する

  Google apps script

前回の「GoogleスプレッドシートにGoogle apps scriptを使ってカスタムメニューを追加」で作ったスプレッドシートを使ってRSSを取得できるようにしてみます。

 

前回までのスクリプト
function onOpen(){
  var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var myMenuEntries = [];
  myMenuEntries.push({name: "myFunctionの実行", functionName: "myFunction"});
  mySpreadsheet.addMenu("追加メニュー", myMenuEntries);
}

function myFunction() {
  // スプレッドシートを取得
  var mySheet = SpreadsheetApp.getActiveSheet();

  // シートのA1から値を取得
  var valueA1 = mySheet.getRange("A1").getValue();
  // シートのA2にa1valueを出力
  mySheet.getRange("A2").setValue(valueA1);
}

 

RSSの取得

サンプルとして「wrodpress.com」が出力しているニュースのRSSを取得してみます。

http://ja.blog.wordpress.com/

RSSのURL
http://ja.blog.wordpress.com/feed/

 

スプレッドシートの「A1」にURLを入力し、その値を取得できるようにします。
スクリプトはそのままです。

// シートのA1から値を取得
var valueA1 = mySheet.getRange("A1").getValue();

 

「UrlFetchApp.fetch」でURLを取得して「Xml.parse」でXMLをパースします。
「title」をスプレッドシートの「B列」、「link」を「C列」に表示させてみます。
「var cellnum」で開始する行を設定します。

  // シートのA1から値を取得
  var valueA1 = mySheet.getRange("A1").getValue();
  var response = UrlFetchApp.fetch(valueA1);
  var xmlparse = Xml.parse(response.getContentText());
  var items = xmlparse.getElement().getElement("channel").getElements("item");

  // 開始位置
  var cellnum = 1;

  for(var i = 0; i < items.length; i++) {
    var title = items[i].getElement("title").getText();
    var link = items[i].getElement("link").getText();
    mySheet.getRange("B" + cellnum).setValue(title);
    mySheet.getRange("C" + cellnum).setValue(link);
    cellnum++;
  }

 

スクリプトを保存してからスプレッドシートに戻りプログラムを実行してみます。
「A1」セルにRSSのURLを入力してから「追加メニュー」-「myFunctionの実行」を実行します。

 

googleappsscript-13

 

表示されれば成功です。

 

プログラムの調整

このスクリプトだと2回目以降の実行では、2回目以降のRSS取得が失敗した場合は初回の表示が残ったままになります。

失敗した場合は空欄になるように、実行のたびにスプレッドシートのセルをリフレッシュするようにしてみます。

スクリプトエディタに戻って「myFunction()」の外に新たにファンクションを追加します。

function clearCell(sheet, range) {
  // Rangeの初期化
  sheet.getRange(range).clear();
}

 

次に「myFunction()」の中に「clearCell(sheet, range)」を追加します。

function onOpen(){
  var mySpreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  var myMenuEntries = [];
  myMenuEntries.push({name: "myFunctionの実行", functionName: "myFunction"});
  mySpreadsheet.addMenu("追加メニュー", myMenuEntries);
}

function myFunction() {
  //スプレッドシートを取得
  var mySheet = SpreadsheetApp.getActiveSheet();

  clearCell(mySheet, "A2");
  clearCell(mySheet, "B:C");

  // シートのA1から値を取得
  var valueA1 = mySheet.getRange("A1").getValue();
  // シートのA2にa1valueを出力
  mySheet.getRange("A2").setValue(valueA1);

  var response = UrlFetchApp.fetch(valueA1);
  var xmlparse = Xml.parse(response.getContentText());

  var items = xmlparse.getElement().getElement("channel").getElements("item");

  // 開始位置
  var cellnum = 1;

  for(var i = 0; i < items.length; i++) {
    var title = items[i].getElement("title").getText();
    var link = items[i].getElement("link").getText();
    mySheet.getRange("B" + cellnum).setValue(title);
    mySheet.getRange("C" + cellnum).setValue(link);
    cellnum++;
  }
}

function clearCell(sheet, range) {
  // Rangeの初期化
  sheet.getRange(range).clear();
}

 

スクリプトを保存してスプレッドシートに戻り実行してみます。
スプレッドシートのセルが一度リフレッシュしてからRSSのタイトルとリンクが表示されれば完了です。

 

  Google apps script     by