LoginSignup
0
0

More than 1 year has passed since last update.

GASでRSSから情報を持ってきてスプレッドシートにDBライクに溜めておくコード

Posted at

目的

RSSで取得したデータをどこかに保管しておきたいと思った。GASで手軽にできるようにコード書いた。

コード全体

この関数を時間でトリガーしておけばOK。


function get_rss_first(){


    //rssを読み込む
  var my_rss="https://news.yahoo.co.jp/rss/topics/top-picks.xml";
  var rss_data=UrlFetchApp.fetch(my_rss);
  var rss_xml = XmlService.parse(rss_data.getContentText());

  //アクティブシートを取得
  var activeSheet = SpreadsheetApp.getActiveSheet();

  //最後の行を特定
  const FValues = activeSheet.getRange('A:A').getValues();  //A列の値を全て取得
  const LastRow = FValues.filter(String).length;  //空白の要素を除いた長さを取得

  //パースして配列にする
  var rss_entries = rss_xml.getRootElement().getChildren('channel')[0].getChildren('item');

  //配列の要素の順を逆にする=これやらないと順番おかしくなる
  var rss_setValue = rss_entries.reverse();
  var array_length = rss_entries.length;
  console.log(array_length);

  //タイトルの検索用=重複してたら取り込まない
  var search_range = activeSheet.getRange('A:A').getValues();
  var src_flat = search_range.flat();
  var n =0;


  if (LastRow > array_length) {

    //配列からデータ取ってくる
    for ( var i=1; i < array_length ; i++){
    var title = rss_entries[i].getChildText("title");
    var link = rss_entries[i].getChildText("link");
    var date = rss_entries[i].getChildText("pubDate");
    var description=rss_entries[i].getChildText("description");

 //書き込む行を取得
   var activerow = LastRow + i;

   activeSheet.getRange('A'+activerow).setValue(title);
   activeSheet.getRange('B'+activerow).setValue(link);
  activeSheet.getRange('C'+activerow).setValue(date);
  activeSheet.getRange('D'+activerow).setValue(description);

}
  }
  else{
    for ( var i=1; i < array_length ; i++){
    var title = rss_entries[i].getChildText("title");
    var link = rss_entries[i].getChildText("link");
    var date = rss_entries[i].getChildText("pubDate");
    var description=rss_entries[i].getChildText("description");

   var activerow = LastRow + i;

    if (src_flat.includes(title)===true){

    }else{

   n++;
   var number = LastRow + n;
   activeSheet.getRange('A'+number).setValue(title);
   activeSheet.getRange('B'+number).setValue(link);
  activeSheet.getRange('C'+number).setValue(date);
  activeSheet.getRange('D'+number).setValue(description);
}
}
  }


}

問題点

なぞにタイトル全部をルックアップしてしまっているので、必要最低限にした方が良いかも。6分制限超えたらマズイので。

  var search_range = activeSheet.getRange('A:A').getValues();
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0