*/ /* * ##### 使用前に読んでね ##### * * 「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 '
'; $now = intdiv(time(), 60); foreach($json->departures as $bus) { if($bus->actual) { $time = str_replace(" Min", "分", $bus->departure_text); $time = str_replace("Due", "今すぐ", $time); $minutes = intval($time); $time .= '
(' . date('H:i', $bus->departure_time) . ')'; } else { $time = date('H:i', $bus->departure_time); } $warn = ""; $warnClass = ""; if($bus->schedule_relationship == "Skipped") { $warn = "キャンセル"; $warnClass = 'danger'; } else if($bus->schedule_relationship == "NoData") { $warn = "データなし"; $warnClass = 'warning'; } else if($bus->schedule_relationship != "Scheduled") { $warn = $bus->schedule_relationship; $warnClass = '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 ? "danger" : "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 '
'; echo ''; echo '

'; echo ''; echo ''; 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 '

'; echo ''; echo ''; echo '
'; echo '

キーを設定して、お気に入りを使用できます。キーを持つ誰でもあなたのお気に入りを見ることができますので、秘密にしておきましょう。

'; } else { // HPを表示 // 停留所フォームをプリント echo '
'; echo '

'; echo ''; echo ''; 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 '
'; 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 '
'; echo ''; echo '
'; } } else { echo '
キーを設定すると、お気に入りの停留所を保存できます。既存のお気に入りため、古い版も使用可能です。
'; } } pg_close($dbc); if(strstr($_SERVER['HTTP_USER_AGENT'], "KAIOS")) echo ''; ?>