日記/2020-6-29

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

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

 

 毎朝、その日の予定や天気予報などを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がうまくパースできなかったこと。ググってみつけたこちらのページの記載から、いちいち名前空間を指定する必要があることを知る。めんどくせえ。