目的
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();