読者です 読者をやめる 読者になる 読者になる

GoogleAppsScript で RSS を扱うメモ (2)

memo GoogleAppsScript

続き。少し考えて、試行錯誤した結果、望み通りの動作をするようになった。嬉しい。複数のフィードを処理するのは for 文だろうとすぐわかるが(さすがにそれくらいはわかる)、フィード URL を書いているセルを変更させていくところと結果を表示させるセルを変更させていくところの指定方法がわからなかった。
サンプルでは getRange() の引数が "A3" というセルの番地(?)を指定する書き方だったので、配列にセルの番地を複数入れてやればいいのかなとおもったけれど、そのやり方ではうまくできず。ドキュメントを読みつつ考えていたら下記のように書けばいいことに気づいた。

function getRss_16() {
  var ss = SpreadsheetApp.getActiveSheet();

  for(count = 1; count < 6;){
  
    var startRow1 = 3;
    var startCol1 = count*2-1;

    var rssUrl = ss.getRange(startRow1,startCol1,1,1).getValue();
    arguments.callee
    
    var advancedArgs = {
      headers: {"User-Agent":"UrlFetchApp(id="+Utilities.base64Encode(Utilities.computeHmacSha256Signature(Session.getUser().getUserLoginId(),ss.getName()))+")"}
    };

    var rssText = UrlFetchApp.fetch(rssUrl,advancedArgs).getContentText();
    var doc = Xml.parse(rssText);
  
    var items = doc.getElement().getElement("channel").getElements("item");
    var titles = new Array();
    var item;
    for( idx in items ){
      entryDate = items[idx].getElement("pubDate").getText();
      entryTitle = items[idx].getElement("title").getText();
      titles.push( [entryDate, entryTitle] ); 
    }
  
    var startRow2 = 5
    var startCol2 = count*2-1;
    var range = ss.getRange(startRow2, startCol2, titles.length, 2);
     //(最初の行,最初の列,行数,列数)
    range.setValues(titles);

    count++;
  }
}