たけるのプログラミング

作ったものとか、気ままにアップします。

【PHP】Web APIを作ってみた。【Lakers】

普段APIを使う側なので、作るのも体験しようかと思い簡単なAPIを作ってみました。

NBAが大好きなので、NBAに関するAPIを作りたいと思い、その中でもLeBron、ADが率いるLakersが好きなので、Lakersに関するテーマにしました。

API概要

PPG(1試合平均得点)、RPG(1試合平均リバウンド)、APG(1試合平均アシスト)のスタッツをパラメータに指定し、そのスタッツ以上の選手の情報をjson形式で返すというものです。

今回は2020-21シーズンのスタメンのデータを利用します。

f:id:takeru232423:20210828221432p:plain

実行結果

パラメータに何も指定しなかった場合

http://localhost:8888/make_api/my_api.php
f:id:takeru232423:20210828222155p:plain

ちなみにChrome拡張機能を使っています。
chrome.google.com

ソースコード

<?php
//db接続処理
try {
    $db = new PDO('mysql:dbname=lakers_api_db;host=localhost;charset=utf8', 'root', 'root');
} catch (PDOException $e) {
    echo 'DB接続エラーが起こりました。'. $e->getMessage();
}
//パラメーターはppgとrpgとapg
//指定された値以上の選手の情報をjson形式で出力する

if (isset($_GET['ppg'])) {
    //平均得点を取得
    $PPG = $_GET['ppg'];
} else {
    //0とすれば指定しないのと同じ
    $PPG = 0;
}
if (isset($_GET['rpg'])) {
    //平均リバウンドを取得
    $RPG = $_GET['rpg'];
} else {
    $RPG = 0;
}
if (isset($_GET['apg'])) {
    //平均アシストを取得
    $APG = $_GET['apg'];
} else {
    $APG = 0;
}

$statement = $db->prepare('SELECT * FROM member WHERE ppg >= ? AND rpg >= ? AND apg >= ?');
$statement->execute(array($PPG,$RPG,$APG));
$row_count = $statement->rowCount();
$loop_counter = 0;
header("Content-type: application/json; charset=utf-8");
echo "[\n";
while ($info = $statement->fetch()) {
    $loop_counter++;
    echo "{\n";
    echo "\"name\":"."\"".$info['name']."\",";
    echo "\n";
    echo "\"number\":".$info['number'].",";
    echo "\n";
    echo "\"PPG\":"."".$info['ppg'].",";
    echo "\n";
    echo "\"RPG\":"."".$info['rpg'].",";
    echo "\n";
    echo "\"APG\":"."".$info['apg']."\n";
    if ($row_count==$loop_counter) {
        echo "}\n";
        break;
    }
    echo "},\n";
}
echo "]";