利用する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とは?
データを更新するときにつかます。
コメント