*/
/*
* ##### 使用前に読んでね #####
*
* 「vars.php.example」を「vars.php」にコピーして、「<……>」を取り替えます。
* 次に、vars.phpに指定データベースを作成して、以下のテーブルを作成します。
*
* CREATE TABLE favorites (
* fav_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
* stop INT,
* priority INT,
* description VARCHAR(2048),
* key VARCHAR(64)
* );
*
* CREATE TABLE history (
* history_id INT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
* stop INT,
* key VARCHAR(64)
* );
*/
require_once('vars.php');
// ソースコードを送信
if(isset($_GET['source'])) {
header("Content-Type: text/plain");
die(file_get_contents(basename($_SERVER['PHP_SELF'])));
}
?>
停留所のNexTrip情報
"北行",
"EB" => "東行",
"SB" => "南行",
"WB" => "西行"
];
// APIデータを取得
$content = file_get_contents("https://svc.metrotransit.org/nextripv2/$stop");
$json = json_decode($content);
if(isset($json)) {
// 情報をプリント
$stop_name = str_replace(' & ', 'と', $json->stops[0]->description);
echo "停留所{$stop} – $stop_name
";
echo '';
foreach($json->departures as $bus) {
if($bus->actual) {
$time = str_replace(" Min", "分", $bus->departure_text);
$time = str_replace("Due", "今すぐ", $time);
} else {
$time = date('H:i', $bus->departure_time);
}
$warn = "";
$warnClass = "";
if($bus->schedule_relationship == "Skipped") {
$warn = "キャンセル";
$warnClass = 'text-danger';
} else if($bus->schedule_relationship == "NoData") {
$warn = "データなし";
$warnClass = 'text-warning';
} else if($bus->schedule_relationship != "Scheduled") {
$warn = $bus->schedule_relationship;
$warnClass = 'text-warning';
}
echo "
";
$route_name = str_replace(' Line', '線', $bus->route_short_name) . $bus->terminal;
echo "{$route_name}({$directions[$bus->direction_text]})";
echo "
$time";
if($warn)
echo "
$warn";
echo '
';
}
echo '
';
if($json->alerts)
echo 'アラート
';
foreach($json->alerts as $alert) {
$alertClass = $alert->stop_closed ? "alert-danger" : "alert-warning";
echo "$alert->alert_text
";
}
if(!empty($key)) {
// お気に入りフォームをプリント
$query = 'SELECT description FROM favorites WHERE favorites.key=$1 AND favorites.stop=$2 LIMIT 1';
$res = pg_query_params($query, [$key, $stop]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
echo '';
// 亭の古い行を削除
$query = 'SELECT history_id FROM history WHERE history.key=$1 AND history.stop=$2 LIMIT 1';
$res = pg_query_params($query, [$key, $stop]) or die('Query failed: ' . pg_last_error());
while($row = pg_fetch_array($res)) {
$query = 'DELETE FROM history WHERE history_id=$1';
$res = pg_query_params($query, [$row['history_id']]) or die('Query failed: ' . pg_last_error());
}
// 新たな行を入れる
$query = 'INSERT INTO history (stop, key) VALUES ($1, $2)';
$res = pg_query_params($query, [$stop, $key]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
}
} else {
echo "{$stop}は無効な停留所です。
";
}
} else if($keyMenu) { //キーを設定
echo '';
echo 'キーを設定して、お気に入りを使用できます。キーを持つ誰でもあなたのお気に入りを見ることができますので、秘密にしておきましょう。
';
} else { // HPを表示
// 停留所フォームをプリント
echo '';
if(!empty($key)) {
if(isset($favSet)) { // お気に入りに追加
$query = 'SELECT fav_id, stop, description FROM favorites WHERE favorites.key=$1 AND favorites.stop=$2 LIMIT 1';
$res = pg_query_params($query, [$key, $favSet]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
$desc = $_POST['desc'];
if(!$row) {
$query = 'INSERT INTO favorites (stop, priority, description, key) VALUES ($1, 0, $2, $3)';
pg_query_params($query, [$favSet, $desc, $key]);
echo "$favSet – {$desc}は設定しました。
";
} else if($desc != $row['description']) {
$query = 'UPDATE favorites SET description=$1 WHERE favorites.key=$2 AND favorites.fav_id=$3';
pg_query_params($query, [$desc, $key, $row['fav_id']]);
echo "$favSet – {$desc}は更新しました。
";
} else {
echo "{$favSet}はすでに設定しました。
";
}
} else if(isset($favRemove)) { // お気に入りから削除
$query = 'SELECT stop, description FROM favorites WHERE favorites.key=$1 AND favorites.fav_id=$2';
$res = pg_query_params($query, [$key, $favRemove]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
if($row) {
$stop = $row['stop'];
$desc = $row['description'];
$query = 'DELETE FROM favorites WHERE favorites.fav_id=$1';
pg_query_params($query, [$favRemove]);
echo "$stop – {$desc}は削除しました。
";
} else {
echo "亭はお気に入りにありません。
";
}
} else if(isset($favUp)) { // お気に入りを上げる
$query = 'SELECT stop, description, priority FROM favorites WHERE favorites.key=$1 AND favorites.fav_id=$2';
$res = pg_query_params($query, [$key, $favUp]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
if($row) {
$stop = $row['stop'];
$desc = $row['description'];
$priority = $row['priority'] + 1;
$query = 'UPDATE favorites SET priority=priority+1 WHERE favorites.fav_id=$1';
pg_query_params($query, [$favUp]) or die('Query failed: ' . pg_last_error());
echo "$stop – {$desc}は{$priority}に上げました。
";
} else {
echo "亭はお気に入りにありません。
";
}
} else if(isset($favDown)) { // お気に入りを下げる
$query = 'SELECT stop, description, priority FROM favorites WHERE favorites.key=$1 AND favorites.fav_id=$2';
$res = pg_query_params($query, [$key, $favDown]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
if($row) {
$stop = $row['stop'];
$desc = $row['description'];
$priority = $row['priority'] - 1;
$query = 'UPDATE favorites SET priority=priority-1 WHERE favorites.fav_id=$1';
pg_query_params($query, [$favDown]) or die('Query failed: ' . pg_last_error());
echo "$stop – {$desc}は{$priority}に下げました。
";
} else {
echo "亭はお気に入りにありません。
";
}
} else if(isset($keySet)) {
if(!empty($keySet)) {
echo "ようこそ、{$shortKey}さん。
";
} else {
echo "さようなら、{$shortKey}さん。
";
}
} else if(isset($historyRemove)) { // 履歴から削除
$query = 'SELECT history_id, stop FROM history WHERE history.key=$1 AND history_id=$2';
$res = pg_query_params($query, [$key, $historyRemove]) or die('Query failed: ' . pg_last_error());
$row = pg_fetch_array($res);
if($row) {
$stop = $row['stop'];
$query = 'DELETE FROM history WHERE history_id=$1';
$res = pg_query_params($query, [$row['history_id']]) or die('Query failed: ' . pg_last_error());
echo "{$stop}は削除しました。
";
} else {
echo "亭は履歴にありません。
";
}
}
// お気に入り一覧
$query = 'SELECT fav_id, stop, description, priority FROM favorites WHERE favorites.key=$1 ORDER BY favorites.priority DESC, favorites.stop ASC';
$res = pg_query_params($query, [$key]) or die('Query failed: ' . pg_last_error());
// お気に入りがある場合、プリント
if(pg_num_rows($res) > 0) {
echo 'お気に入り
';
echo '';
}
// 履歴一覧
$query = 'SELECT history_id, stop FROM history WHERE history.key=$1 ORDER BY history_id DESC LIMIT 5';
$res = pg_query_params($query, [$key]) or die('Query failed: ' . pg_last_error());
// 履歴がある場合、プリント
if(pg_num_rows($res) > 0) {
echo '履歴
';
echo '';
}
} else {
echo '';
}
}
pg_close($dbc);
?>