PHPでWebAPI(外部API)を呼び出す

2021/10/10

Web上には API を使ってWebサービスのデータを取得し利用することができるサービス(WebAPI)があります。

  • Yahoo!デベロッパーネットワーク
  • Rakuten Developers
  • Amazonアソシエイト
  • リクルートWebサービス

PHP プログラムで WebAPI を呼び出すやり方がわかると、Webサービスが提供しているデータを取得し、自分のWebサイトで利用することができます。

今回は PHP で WebAPI の呼び出しをやってみます。

INDEX

 

1)利用する WebAPI を選定

今回利用させていただく WebAPI ですが、「Visual Basic 中学校」の「すぐ呼び出し可能なWebAPIサンプル」を選定させていただきました。

すぐ呼び出し可能なWebAPIのサンプル|Visual Basic 中学校

上記のページにあるAPI仕様を確認すると、人物の新規登録や更新、また削除までできるみたいですね。

一覧取得から特定の人物の取得、新規登録、削除を一通りやってみましょう。

WebAPI でのアクセスは curl を使うのが一般的ですが、この記事では file_get_contents 関数を使ってWebAPI にアクセスします。

file_get_contents を使って JSON の送信についての記事は以下をご参照ください。

JSON はよく API などを使ってデータをやり取りする際に使われますので、この機会にマスターしましょう。

 

2)PHPでWebAPIの呼び出し(一覧取得)

とりあえず、素の PHP で書いていきます。

Laravel のフレームワークの場合、 public 以下に素の PHP を置くといいです。

ファイル名 api_sample1.php で作成します。


<?php
// APIアクセスURL
$url = 'https://umayadia-apisample.azurewebsites.net/api/persons';

// ストリームコンテキストのオプションを作成
$options = array(
    // HTTPコンテキストオプションをセット
    'http' => array(
        'method'=> 'GET',
        'header'=> 'Content-type: application/json; charset=UTF-8' //JSON形式で表示
    )
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

$raw_data = file_get_contents($url, false,$context);

// debug
//var_dump($raw_data);

// json の内容を連想配列として $data に格納する
$data = json_decode($raw_data,true);
?>
<table>
    <tr>
        <th>name</th>
        <th>note</th>
    </tr>
    <?php foreach($data as $key => $value){ // 連想配列を取り出す ?>
        <?php if(is_array($value)){ // 値が配列のみループで回して表示 ?>
            <?php foreach($value as $column){ ?>
            <tr>
                <td><?php echo $column['name']; ?></td>
                <td><?php echo $column['note']; ?></td>
            </tr>
           <?php } ?>
        <?php } ?>
    <?php } ?>
</table>
?>

 

http://localhost/api_sample1.php(もしくは http://127.0.0.1/api_sample1.php) にアクセスしてレコードの一覧を表示します。

上記のように表示されればOK。

 

3)PHPでWebAPIの呼び出し(特定のレコードを取得)

ファイル名 api_sample2.php で作成します。


<?php
// APIログインURL
// '織田信長' → URLエンコード
$url = 'https://umayadia-apisample.azurewebsites.net/api/persons/%E7%B9%94%E7%94%B0%E4%BF%A1%E9%95%B7';

// ストリームコンテキストのオプションを作成
$options = array(
    // HTTPコンテキストオプションをセット
    'http' => array(
        'method'=> 'GET',
        'header'=> 'Content-type: application/json; charset=UTF-8' //JSON形式で表示
    )
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

$raw_data = file_get_contents($url, false,$context);

// debug
// var_dump($raw_data);

// json の内容を連想配列として $data に格納する
$data = json_decode($raw_data,true);
?>
<table>
    <tr>
        <th>name</th>
        <th>note</th>
    </tr>
    <?php foreach($data as $key => $value){ // 連想配列を取り出す ?>
        <?php if(is_array($value)){ // 値が配列のみ表示 ?>
            <tr>
                <td><?php echo $value['name']; ?></td>
                <td><?php echo $value['note']; ?></td>
            </tr>
        <?php } ?>
    <?php } ?>
</table>

 

http://localhost/api_sample2.php(もしくは http://127.0.0.1/api_sample2.php) にアクセスして特定の人物(※織田信長)が表示されたか確認します。

上記のように表示されればOK。

 

4)PHPでWebAPIの呼び出し(新規登録)

ファイル名 api_sample3.php で作成します。


// APIログインURL
$url = 'https://umayadia-apisample.azurewebsites.net/api/persons';

// ストリームコンテキストのオプションを作成
$options = array(
    // HTTPコンテキストオプションをセット
    'http' => array(
        'method'=> 'POST',
        'header'=> 'Content-type: application/json; charset=UTF-8', //JSON形式で表示
        'content' => '{"name":"坂本龍馬","note":"日本の幕末の政治家","age":31,"registerDate":"1867-10-07"}'
    )
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

// POST送信
$contents = file_get_contents($url, false,$context);

// reception.php のレスポンスを表示
echo $contents;

 

http://localhost/api_sample3.php にアクセスしてレコードを登録します。

次にJSON形式で送ったデータ(※坂本龍馬)がちゃんと追加されたか確認してみます。

http://localhost/api_sample1.php にアクセス。

上記のように表示されればOKです。

 

5)PHPでWebAPIの呼び出し(削除)

ファイル名 api_sample4.php で作成します。


// APIログインURL
// '坂本龍馬' → URLエンコード
$url = 'https://umayadia-apisample.azurewebsites.net/api/persons/%E5%9D%82%E6%9C%AC%E9%BE%8D%E9%A6%AC';

// ストリームコンテキストのオプションを作成
$options = array(
    // HTTPコンテキストオプションをセット
    'http' => array(
        'method'=> 'DELETE',
        'header'=> 'Content-type: application/json; charset=UTF-8', //JSON形式で表示
    )
);

// ストリームコンテキストの作成
$context = stream_context_create($options);

// DELETE送信
$contents = file_get_contents($url, false,$context);

// reception.php のレスポンスを表示
echo $contents;

 

http://localhost/api_sample4.php にアクセスしてレコードを削除します。

次にJSON形式で送ったデータ(※坂本龍馬)がちゃんと削除されたか確認してみます。

http://localhost/api_sample1.php にアクセス。

上記のように表示されればOKです。

以上です。

本庄マサノリ

仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら

>> Twitter をフォローする

 

-周辺知識