PHPでWebAPIを呼び出す基礎知識

a woman sitting on a bench in front of a building 未分類

利用するAPIを選定する

現在、有料か無料か、法人対象か個人対象か、商用利用の可否など条件がありますが、様々なWebAPIが存在します。利用規約を確認しましょう。

YouTube、Qiita、OpenWeatherMap、Rakuten、Amazon、Yahoo(finance)、NHK番組API、GoogleBooksAPI、駅すぱあと、NAVITIME、coincheck、はてな、Hot Pepperなど

サンプルコードの具体例

ここでは、楽天ウェブサービスを使って、簡単な呼び出しをしてみます。

以下が、APIを呼び出して、ブラウザに表示させるPHPコードです。

日向坂の写真集の1ページに載っている商品を表示させるものです。

<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>楽天APIサンプルコード</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="main">

<?php

//自分で取得したIDを入力
$applicationId = '1013845562336343236';
$affiliateId = '13078974.c074128c.13078975.03b0a557';

$keyword = '日向坂 写真集';

$url = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706?';//①
$url.= 'applicationId='.$applicationId;//②
$url.= '&affiliateId='.$affiliateId;//③
$url.= '&keyword='.rawurlencode($keyword);//④
$url.= '&page=1';//⑤
$url.= '&format=xml';//⑥

//echo $url;

$data = file_get_contents($url);//⑦
$obj = simplexml_load_string($data);//⑧

echo '<ul>';//⑨

foreach($obj->Items->Item as $item){//⑩
	
	echo '<li>';
	echo '<a href="'.$item->itemUrl.'"><img src="'.$item->mediumImageUrls->imageUrl[0].'"></a>';
	echo '<a href="'.$item->itemUrl.'">'.$item->itemName.'</a>';
	echo '</li>';
	
}

echo '</ul>';

?>

</div>
</body>
</html>

API呼び出し、表示のscriptはbody部分に書きます。

例外もありますが、head部分に書いてしまうと、scriptが動く前に、画面表示されることがあるためです。

①にリクエストURLを書いて、続けて、パラメータを書いていきます。②アプリケーションID、③アフィリエイトID、④キーワードのエンコード、⑤1ページ、⑥xml文書とパラメータを指定しています。

楽天ウェブサービスの楽天市場、楽天トラベルなどの各API詳細に書いてあります。

contents関数を使って、APIから情報を呼び出します。⑦

string型で情報を呼び出します。⑧

ulタグで表示形式を整えます。⑨

foreach文で連想配列をタグ内に入れ込みます。⑩

すべては先人たちが教えてくれた - にほんブログ村

これが基本的な流れです。

あとは、ご自身で、表示されるフォーマット、配置をカスタマイズしてください。

四つの呼び出し機能

呼び出し方ーその1ー一覧取得

<?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>
?>

呼び出し方ーその2ー指定するレコードを取得

<?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>

呼び出し方ーその3ー新規登録

// 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;

呼び出し方ーその4ー削除

// 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;

API仕様書を見てみる

公開APIから、どの文書形式で、どの方式で呼び出すにしても、基本的な流れは変わりません。

HTTPリクエスト

HTTPレスポンス

GETとは?

データの取得に使います。WebAPIのデータ連携には、主にこちらを使います。

POSTとは?

データを更新するときにつかます。

コメント

タイトルとURLをコピーしました