ぱんぶろ

パンジーの「いいね!」ブログ

Yahoo! APIの使い方!PHPのコードサンプルを付き

      2016/03/30  

yahoo_api_7

Yahoo! APIの使い方を紹介します。
楽天APIと使い方が似ていて簡単に使えるようになると思いますよ。

Yaoo!が提供してくれているAPIってたくさんあるんですけど、今回はショッピングについてサンプルコードを書きました。
これからYahoo! APIを勉強する人の手助けになれれば嬉しく思います。

では早速、登録から行っていきましょう!

スポンサード リンク

アプリケーションの登録

Yahoo! APIを利用するには、まずアプリケーションを登録する必要があります。

Yahoo!デベロッパーにアクセス。
Yahoo!デベロッパーネットワーク

「アプリケショーンの管理」を選択します。
もしくは、https://e.developer.yahoo.co.jp/dashboard/
yahoo_api

Yahoo!のアカウントでログインしてください。
(Yahoo!のアカウントを持っていない方は、まず取得してください。)
yahoo_api_2

「新しいアプリケーションを開発」を選択します。
yahoo_api_3

Yahoo! APIを利用するアプリケーションを選択します。
必須なのは、

  • アプリケーションの種類
  • 連絡先メールアドレス
  • アプリケーション名
  • サイトURL

yahoo_api_4

PHPなどのサーバーサイドのプログラムを利用したWebサービスであれば、
「アプリケーションの種類」は「サーバーサイド」で大丈夫です。

ガイドラインを読み、「同意」したら「確認」ボタンをクリックします。
記入した内容に問題なければ「登録」ボタンで登録完了です。

Yahoo APIを利用するのに必要な「アプリケーションID」と「シークレット」が発行されます。
yahoo_api_5

この情報はYahooデベロッパーの「アプリケーションの管理」から確認できるので特にメモしておく必要はありません。

Yahoo!が提供しているAPI一覧

その前にYahoo!が提供してくれているAPIの一覧を確認しておきましょう。
商品検索以外にも便利なAPIがあるので一通り目を通しておくといいかもしれません。

http://developer.yahoo.co.jp/sitemap/
yahoo_api_6

わたしがよく利用するのは、「ショッピング」「オークション」「テキスト解析」あたりですかね。
「テキスト解析」の形態素解析は日本語を分解するのにとても便利です。

今回は、「ショッピング」のAPIを利用して、商品検索を行うサンプルプログラムを作っていきます!

Yahoo!ショッピングから最安値の商品を見つけるサンプル

Yahoo!ショッピングから任意のキーワードで検索した時に安い順で結果を返してもらうようなコードを書いていきます。

商品検索に関するパラメーターなどの情報は以下から。
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html

<!DOCTYPE html>
<html lang='ja'>
<head>
<title>楽天商品検索API テスト</title>
<meta charset='utf-8'>
</head>
<body>
<?php

$yahoo_relust = getYahooResult('進撃の巨人'); // キーワードと最低価格を指定
foreach ($yahoo_relust as $item) :
?>
<div style='margin-bottom: 20px; padding: 30px; border: 1px solid #000; overflow:hidden;'>
<div style='float: left;'><img src='<?php echo $item['img']; ?>'></div>
<div style='float: left; padding: 20px;'>
<div><?php echo $item['name']; ?></div>
<div><a href='<?php echo $item['url']; ?>' target="_blank"><?php echo $item['url']; ?></a></div>
<div><?php echo $item['price']; ?>円</div>
</div>
</div>
<?php
endforeach;
?>
</body>
</html>

<?php

function getYahooResult($keyword) {

// リクエストURL
$baseurl = "http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch"; //XML
// リクエストのパラメータ作成
$params = array();
$params["appid"] = "[自分のアプリケーションID]"; // アプリケーションID
$params["query"] = urlencode_rfc3986($keyword);
$params["sort"] = urlencode_rfc3986("+price");

// canonical string を作成
$canonical_string = "";
foreach ($params as $k => $v) {
$canonical_string .= "&" . $k . "=" . $v;
}
// 先頭の'&'を除去
$canonical_string = substr($canonical_string, 1);

// URL を作成
$url = $baseurl . "?" . $canonical_string;

echo $url . "<br>";

// XMLをオブジェクトに代入
$yahoo_xml = simplexml_load_string(@file_get_contents($url));

$items = array();
foreach($yahoo_xml->Result->Hit as $item){

$items[] = array(
'name' => (string)$item->Name,
'url' => (string)$item->Url,
'img' => (string)$item->Image->Medium,
'price' => (string)$item->Price,
);

}
return $items;
}

// RFC3986 形式で URL エンコードする関数
function urlencode_rfc3986($str) {
return str_replace("%7E", "~", rawurlencode($str));
}

35行目に自分のアプリケーションIDを入力してください。

10行目の「進撃の巨人」は自分の好きなキーワードに変更してもらって構いません。

実行すると以下のようになります。
yahoo_api_7

大雑把に解説

Yahoo!ショッピングでの商品検索APIは、
リクエストURLをYahoo!に投げて、結果を受け取るという流れになります。

商品検索における、リクエストURLとは、以下のURLです。
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
yahoo_api_8

32行目で指定しています。

これがベースとなるURLでここに「パラメーター」をつけていきます。
ちょっとスクロールすると「リクエストパラメータ」という箇所があります。
yahoo_api_9

「リクエストURL」に「リクエストパラメーター」をくっつけることで、Yahooは結果を返してくれるようになります。
今回必須となる「リクエストパラメーター」は、「アプリケーションID」と「キーワード検索」でした。

で、このパラメーターの付け方は、

http://「リクエストURL」?「パラメーター」=「値」&「パラメーター」=「値」&「パラメーター」=「値」&・・・

といった形です。

このリクエストURLとパラメーターをくっつける処理を31行目から50行目で行っています。
50行目でecho $urlで作成したURLを表示させたのでどんな風にできあがるか見てみてください。

こいつをYahooに投げれば結果を返してくれます。
ただ、いろんな結果が返ってくるので、こちらで表示させたいやつだけ抜き出してやる必要があります。

その処理が、52行目から65行目です。
リクエストURLで「XML」を選んだので結果はxmlの形式で返ってきます。

そのxmlのデータをphpが読み込めるような形に変え、「名前」「URL」「画像」「価格」だけ取得する処理をしています。
$yahoo_xmlが編集する前の結果そのものなので、より理解したい方は中身を覗くといいと思います。
ver_dump($yahoo_xml)などで。)

そして最後に、htmlとcssで整形して出力しているといった流れです。

まとめ

駆け足で説明しましたが、なんとなく理解できたでしょうか?
YahooのAPIは他のWeb APIに比べるとマニュアルがしっかりしていて、公式のガイダンスをちゃんと読めば理解できると思います。
(AmazonとかTwitterとかは基本的に英語でしか説明してくれない・・・。)

最後に、途中でYahoo公式のPHPサンプル見つけたので貼り付けておきます。
(コード書き終わってから気づきました・・・笑)
http://developer.yahoo.co.jp/sample/shopping/sample1.html