鉄道遅延情報の取得先の変更

最終更新時間:2020年06月29日 19時30分41秒

 毎朝、その日の予定や天気予報などをGoogle Homeにしゃべらせている。
 通勤に使う鉄道の運行遅延情報もしゃべらせているのだが、ここ数日(2020/06/25以降)、なぜかしゃべらなくなってしまった。
 原因は、以下の「鉄道遅延情報のjson」のAPIが止まってしまったから。

 提供元のサイトには何のアナウンスもないが、元々善意で運営されていたものであり、「予告なく中断することがあります」との記載もあることから、まあ、仕方がない。
 今までありがとうございました。

 もしかしたら、しばらく待っていれば復活するのかもしれないが、いい機会なので、止まってしまったAPIのネタ元である「Tetdudo.com(鉄道コム)」の「運行情報サイト更新状況」のページのフィード(Atom1.0形式)

から遅延情報を取得するよう、変更することにした。

 以下にGAS(Google Apps Script)の該当の関数を示す。

修正前

function trainDelay() {
  var url = "https://tetsudo.rti-giken.jp/free/delay.json";
  var response = UrlFetchApp.fetch(url); 
  var json = JSON.parse(response.getContentText()); 

  var text = "";
  for (var i in json) {
    if (json[i].name === "水郡線" || json[i].name === "七尾線" || json[i].name === "瀬戸大橋線") {
      text += json[i].name + "、";
    }
  }
  
  if (!text) {
    text = "鉄道の運行遅延情報はありません。";
  } else {
    text += "が遅延しています。";
  }

  return text;
}

修正後

function trainDelay() {
  var url = 'http://api.tetsudo.com/traffic/atom.xml';
  var response = UrlFetchApp.fetch(url);
  var xml = XmlService.parse(response.getContentText());
  var ns = XmlService.getNamespace('', 'http://www.w3.org/2005/Atom');
  var items = xml.getRootElement().getChildren('entry', ns);

  var check = ['水郡線', '七尾線', '瀬戸大橋線'];

  var text = "";
  for(var i in items) {
    title = items[i].getChild('title', ns).getText();
    for (var j in check) {
      reg = new RegExp(check[j]);
      if (title.match(reg)) {
        text += check[j] + "、";
      }
    }
  }

  if (!text) {
    text = "鉄道の運行遅延情報はありません。";
  } else {
    text += "が遅延しています。";
  }

  return text;
}

 悩んだのは、なぜかXMLがうまくパースできなかったこと。ググってみつけたこちらのページの記載から、いちいち名前空間を指定する必要があることを知る。めんどくせえ。