/var/www/yatta47.log

/var/www/yatta47.log

やったのログ置場です。スクラップみたいな短編が多いかと。

GoogleAppsScriptでRSS2.0かAtomかを判断する

f:id:yatta47:20210221101900p:plain

久しぶりにGoogle Apps Script を触ったらだいぶUIが変わっていてびっくりしました。

慣れの問題でしょうかね。おそらく使いやすくなっている・・・・んだと思う。

ってことで今日の話題はRSSの種類を判断するケースがありそれをまとめてみました。

RSSAtomを判断する

判断部分のソースコードはこちら。(もっといい方法あったらご指摘ください)

function getRSSType(root) {
  try {
    var items = root.getChild('channel').getChildren('item');
    Logger.log("RSS2.0");
    return "RSS2.0"
  }
  catch(error) {
    Logger.log("Atom");
    return "Atom"
  }
}

RSSの場合はitemというツリーが、Atomの場合はentryになっています。

xmlをパースして、itemがあればRSS、無ければAtomという雑な感じで判断しています。

 

使い方は取ってきたxmlを渡して判断します。こんな感じ。

function getRSSType(root) {
  try {
    var items = root.getChild('channel').getChildren('item');
    Logger.log("RSS2.0");
    return "RSS2.0"
  }
  catch(error) {
    Logger.log("Atom");
    return "Atom"
  }
}

function main(feedURL) {
  var title = "";
  var xml = UrlFetchApp.fetch(feedURL).getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();

  type = getRSSType(root);

  if(type === "RSS2.0") {
    title = root.getChild('channel').getChild('title').getText();

    Logger.log(title);
  }
  else if(type === "Atom") {
    var atom = XmlService.getNamespace('http://www.w3.org/2005/Atom');

    title = root.getChild('title', atom).getText();
    Logger.log(title);
  }
  return title
}

 

まとめ

なんかもっとスマートなやり方がありそうな気がするけど何かいい方法ないかもう少し探してみようと思います。

それでは。