Parallax Image

Cutls Code Archives


SNZ 2016

JR西日本の1分以上の遅れを通知するPHP

カテゴリ:Code Archives, PHP, サーバー 投稿日:2017年4月29日

お久しぶりです。
昨日始発より、JR西日本のリアルタイム列車走行位置表示機能が始まりました。
こちら
1分単位の遅れや列車の駅間の走行位置を1分毎に表示できます。残念ながら自動更新には対応していないので1分毎に更新ボタンを押さねばなりません。
でもやはり新しいサービスとあって、デザインはシンプルで好感が持てます。

さて、この遅れ情報、Chromeの開発者ツールで見てみると、

JSONで提供されていました。
これじゃこっちでもカンタンに遅れ情報出せるやんと思って、とりあえず1分以上遅れていたらメールを送るPHPを書いてみました。
$jsonのURLは、調べたい路線のページアドレスに対して
環状線ならhttps://www.train-guide.westjr.co.jp/osakaloop.htmlの
osakaloopが路線名なのでJSONは
https://www.train-guide.westjr.co.jp/api/v1/osakaloop.json
です。
また、列車番号は、冊子型の時刻表を見たり、えきから時刻表の路線名から検索したりすれば調べられます。

<?php 
$json="https://www.train-guide.westjr.co.jp/api/v1/kobesanyo.json";
$obj=json_decode(file_get_contents($json));
//時刻
$update=$obj->update;
//時刻データを日本語にする。substrを使うのはデータにミリ秒まで含まれていてstrtotimeが上手く働かないから
$strtime=date("m月d日 H時i分",strtotime(substr($update,0,-5)));
//列車番号
$targetid="152B";
//メールアドレス
$mail="[email protected]";
$trains=$obj->trains;
for($i=0;$i<count($trains);$i++){
	$train=$trains[$i];
	$trainid=$train->no;
	if($trainid==$targetid){
		//遅れを取得
		$delay=$train->delayMinutes;
		if($delay>0){
			//種別・行き先取得
			$type=$train->displayType;
			$dest=$train->dest;
			$dest=$dest->text;
			//メール文章
			$text=$strtime."現在".$type." ".$dest."行きは".$delay."分遅れています。";
		}
		break;
	}
}
if(isset($text)){
	//mb_send_mail(メアド,件名,文章)の順番
	mb_send_mail($mail, "JR遅れメール", $text);
}


これをCRONなどで毎日乗る電車の発車時刻の数分前などに実行すれば、JRの発表よりもより細かく遅れを知ることができます。