PHPでYahoo! Web APIを使う
公開日| 2009年10月13日 | コメントはまだありません。
カテゴリー:php |
概要:今回は、Yahoo! のWeb APIを使って、簡単な検索結果を表示したいと思います。
Yahoo! Web APIは、以前、記事にしました「PHPでAmazon Product Advertising APIを使う」のProduct Advertising APIに考え方がそっくりです。
Amazonは、最新バージョンでは、認証の手順が追加されましたが、Yahoo! には、まだ?、認証機能は、ありません。
Amazon同様、出力結果を、XML形式で出力します。(PHPをあえて指定する場合は、Serializeで隠ぺいされます。)
出力結果のXML情報を解析することで、自分が表示したい情報を取得し、HTML情報へ変換し、出力できます。
例えば、Amazonで提供されているアフィリエイトのウィジェットのようなものを、自分用のYahoo!Shop版として作成することもできるわけです。
また、Yahoo!には、Amazonと異なり、ここで紹介するYahoo!ショッピングのみでなく、Yahoo!の通常の検索サービスやYahoo!オークションなども、このWeb APIを用いて利用することができます。
では、早速、PHPのサンプルコードを作成して試してみましょう。
参照ページ : http://developer.yahoo.co.jp/ 参照ページ : http://shopping.yahoo.co.jp/affiliate/
まず、準備をしましょう。
Yahoo! IDは、必須です。
ここでは、Yahoo! IDをすでに持っているものとして、以降、記述します。
(お持ちでない方は、Yahoo!で取得しましょう。)
Yahoo! Web APIを利用するためには、まず、以下のIDを取得する必要があります。 また、アフィリエイトも同時に行う場合は、アフィリエイトIDも必要です。
アフィリエイトを行いたい場合は、
アフィリエイトID(Yahoo!アフィリエイトIDか、ValueCommerceのIDのいすれか)が必要となります。
Yahoo!ショッピング以外のアフィリエイトも行いたい方は、ValueCommerceのIDを取得しておいた方が無難でしょう。
ValueCommerceのIDは、
http://www.valuecommerce.ne.jp
から無料登録できます。
ValueCommerceのIDを持たない(登録しない)場合は、Yahoo!アフィリエイトIDが必要になります。
Yahoo!アフィリエイトIDは、Yahoo!IDではありません。
Yahoo!アフィリエイトIDは、以下のように取得します。
Yahoo!ショッピング以外のアフィリエイトも行いたい方は、ValueCommerceのIDを取得しておいた方が無難でしょう。
ValueCommerceのIDは、
ValueCommerceの場合は、アフィリエイトIDは、以降のようにして作成します。
-
ValueCommerceの場合は、無料登録が完了したら、ECサイトのYahooショッピングと提携します。
提携する場合、"オファー"の中からYahoo!ショッピングを探し、Yahoo!ショッピング情報を表示したときに"コードを取得"をクリックすると自動的に提携します。
この"コードを取得"するとき、"テキスト広告"の自由テキストの中で、"MyLink対応"という記述のあるものを"コードを取得"します。
- 以下のようなコードが表示されると思います。
1 2
<a href="http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=xxxxxx&pid=yyyyyy" target="_blank" > <img src="http://ad.jp.ap.valuecommerce.com/servlet/gifbanner?sid=xxxxxx&pid=yyyyyy" height="1" width="1" border="0">自由テキスト</a>
このコードの<a href=""でくくられた部分をコピーし、最後に"&vc_url="を追加したものが、ValueCommerceのアフィリエイトIDとなります。
例)
http://ck.jp.ap.valuecommerce.com/servlet/referral?sid=1234567&pid=890123456&vc_url=
ValueCommerceのIDを持たない(登録しない)場合は、Yahoo!アフィリエイトIDが必要になります。
Yahoo!アフィリエイトIDは、Yahoo!IDではありません。
Yahoo!アフィリエイトIDは、以下のように取得します。
- http://shopping.yahoo.co.jp/affiliate/へアクセスします。

- 上の"ログイン"をクリックしてYahoo!IDでログインします。

ログイン後、同じ画面が表示されますから、今度は、左の"Yahoo!アフィリエイト利用規約に同意する"をクリックします。

- Yahoo!アフィリエイト利用規約画面が表示されますので、特に問題がなければ、画面下の"同意する"をクリックします。

手続きが完了後、元の画面に戻り、画面左の"アフィリエイトIDの確認"をクリックします。

- 以下のようにアフィリエイトIDが表示されますので、ここで、アフィリエイトIDをコピーしておきます。

Web API ID(アプリケーションID) を取得、確認します。
- http://developer.yahoo.co.jp/へアクセスします。

- 上の"ログイン"をクリックしてYahoo!IDでログインします。
ログイン後、同じ画面が表示されますから、今度は、右の"アプリケーションIDの登録(無料)"をクリックします。

連絡先メールアドレス、OAuthを利用しますか?、ガイドラインに同意しますか?
の項目を答えます。
OAuthは、ここでは使わないにしておきます。
入力を終えたら、"確認"ボタンをクリックします。
- 確認画面が表示されますので、特に誤りがなければ"登録"をクリックします。

以下の画面が、登録完了後の画面です。
以下の"あなたのYahoo! JAPAN IDに登録されたアプリケーションID"部分をコピーしておきましょう。

直接URLを入力して、検索してみましょう。
Yahoo! Web APIは、URLに操作パラメータを指定し、アクセスすることでXMLの情報を返信してくれます。
そのため、WEBブラウザで、直接URLアドレスを指定すれば確かめることができます。
では、このページを使って、URLコードを作って、試してみましょう。
- Yahoo!ショッピングで何かを検索するためのサンプルURLが、http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.htmlにあります。
http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch?appid=<your application id>&query=vaio
このサンプルURLの<your application id> : に先に取得した、Web API ID(アプリケーションID)を指定して、Webブラウザに直接入力してみましょう。

- 以下のような返信情報(XML情報が)が表示されるとおもいます。

このような画面が表示されればOKです。
PHPの動作環境を確認しましょう。
PHPが動作可能か確認します。
以下は、Windowsのコマンドプロンプトで確認した例です。
UNIXでも同様のコマンドを入力して確認できます。
1 2 3 4 | C:\> php -v PHP 5.1.2 (cli) (built: Jan 11 2006 16:40:00) Copyright (c) 1997-2006 The PHP Group Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies |
今回の記事では、バージョンがPHP5以上でなければなりません。
これで準備が整いました。 次に、PHPのサンプルコードを元に、試してみましょう。
PHPのサンプルソースを使って、試してみましょう。
以下は、簡単なソフトウェアの検索を行うためのPHPのサンプルソースです。
[sample.php]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 | //------------------------------------------------------------------- // Define your id. //------------------------------------------------------------------- // user id information define("ACCESS_KEY_ID" , 'Your Yahoo! Web API id. '); // yid = Yahoo! affiliate id , vc = ValueCommerce id define("AFFILIATE_COM" , 'yid/vc' ); define("AFFILIATE_TAG" , 'Your Yahoo! or ValueCommerce affiliate id.' ); // access url(Jpanan) define("ACCESS_URL" , 'http://shopping.yahooapis.jp/ShoppingWebService/V1/'); //------------------------------------------------------------------- //http://shopping.yahooapis.jp/ShoppingWebService/V1/itemSearch? -- item search //http://shopping.yahooapis.jp/ShoppingWebService/V1/categorySearch? -- category search //------------------------------------------------------------------- // this function is encode with RFC3986 format. //------------------------------------------------------------------- function urlencode_RFC3986($str) { return str_replace('%7E', '~', rawurlencode($str)); } //------------------------------------------------------------------- // Main routine. //------------------------------------------------------------------- $base_param = 'appid='.ACCESS_KEY_ID; $params = array(); $params['affiliate_type'] = AFFILIATE_COM; $params['affiliate_id'] = AFFILIATE_TAG; $params['sort'] = '-sold'; // price/name/score/sold/affiliate/review_count (+/-) $params['type'] = 'all'; // all/any //$params['category_id'] = 10002; // category (book) $params['category_id'] = 2502; // category (pc/software) $params['query'] = 'Windows 7 Microsoft'; // search key ( UTF-8 ) $params['offset'] = 0; // [1-20] // sort $param by asc. ksort($params); // create canonical string. $canonical_string = $base_param; foreach ($params as $k => $v) { $canonical_string .= '&'.urlencode_RFC3986($k).'='.urlencode_RFC3986($v); } // create URL strings. $url = ACCESS_URL.'itemSearch?'.$canonical_string; // service = itemSearch // request to yahoo !! $response = file_get_contents($url); // response to strings. $parsed_xml = null; if(isset($response)){ $parsed_xml = simplexml_load_string($response); } $err_count=0; // print out of response. if( $response && isset($parsed_xml) && isset($parsed_xml-->attributes()-->totalResultsReturned) ){ // total results num. $total_results = $parsed_xml-->attributes()-->totalResultsAvailable; // total results pages. $total_pages = floor(($parsed_xml-->attributes()-->totalResultsAvailable + 19)/20); print("All Result Count:".$total_results." | Pages :".$total_pages ); print("<table>"); foreach($parsed_xml-->Result-->Hit as $current){ $nerr=0; print("<tr><td><font size='-1'>"); print('<a href="'.$current-->Url.'"><img src="'.$current-->Image-->Small.'" border=0></a><br >'); print('<a href="'.$current-->Url.'">'.$current-->Name.'</a><br />'); // print('JAN CODE : '.$current-->JanCode.'<br />'); print($current-->Price-->attributes()-->currency); if($current-->PriceLabel-->attributes()-->taxIncluded){ print( " TAX (INCLUDE) : "); } else { print( " TAX (Not INCLUDE) : "); } if(isset($current-->PriceLabel-->SalePrice) && $current-->PriceLabel-->SalePrice>0){ print('<br />'); if(isset($current-->PriceLabel-->FixedPrice) && $current-->PriceLabel-->FixedPrice>0){ print($current-->PriceLabel-->FixedPrice.'<br />'); } else if( (int)$current-->PriceLabel-->SalePrice != (int)$current-->Price ){ print($current-->Price.'<br />'); } print('<font color=red>Sale : '.$current-->PriceLabel-->SalePrice.'</font><br />'); } else { print($current-->Price.'<br />'); } if(isset($current-->Review) && isset($current-->Review-->Rate) && $current-->Review-->Count>0){ print('Rate:<a href="'.$current-->Review-->Url.'">'); print($current-->Review-->Rate.'('. $current-->Review-->Count .')'.'<br />'); print('</a><hr />'); } print("</td></tr>"); } print("</table>"); } |
もし、そのまま利用する場合は、以下の3項目を設定すれば、"パソコン、周辺機器"のカテゴリ内を、"Windows 7 Microsoft"というキーワードで検索した結果を売れ筋順(昇順)で取得します。 6行目:あなたのWeb API ID(アプリケーションID)を設定します。
8行目:あなたのアフィリエイトIDのタイプ(Yahoo!アフィリエイトID(=yid)かValueCommerceのID(=vc)かいずれかを指定)を設定します。
9行目:あなたのアフィリエイトID(Yahoo!アフィリエイトIDかValueCommerceのIDかいずれか)を設定します。
設定したphpファイルをあなたのWEBサーバ上でアクセスできるところへアップロードします。
WEBブラウザから、アップロードしたphpへアクセスしてみてください。
例えば、WEBサーバのカレントから、yahooディレクトリの配下へアップロードした場合は、以下のようなURLでアクセスします。
http://www.example.com/yahoo/sample.php
以下のような画面が表示されるはずです。

先のphpコードのパラメータについて、簡単に解説しておきます。
変更が必要な個所は、以下の行だと思います。
37行目:'sort'は、検索結果の順番を指定します。ここでは、'sold'=売れ筋順 の昇順を指定しています。
price:商品価格
name:ストア名
score:おすすめ順
sold:売れ筋順
affiliate:アフィリエイト料率順
review_count:レビュー数順
先頭に、+-を付加すると、-(降順)もしくは+(昇順)となります。
38行目:'type'は、複数の検索文字のAND検索(=all)をするか、OR検索(=any)をするかを指定します。
ここでは、AND検索を実施しています。
40行目:'category_id'は、検索対象のカテゴリIDを指定します。
ここでは、"2502"の"パソコン、周辺機器"を指定しています。
ここで指定するカテゴリIDは、以下のURLで確認することができます。
出力されたXML情報のIdタグが、カテゴリIDとなります。
41行目:'query'は、検索する文字列です。ここでは、"Windows 7 Microsoft"のAND検索を実施しています。
42行目:'offset'は、検索結果の何番目からを出力するかを指定します。1回の検索結果で、最大20個の検索結果を得ます。0は、先頭を意味します。
検索条件は、他にもいろいろと指定することができます。詳細は、以下のページを参照してください。
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
63行目:出力情報のXML情報をパーサにかけて文字列へ変換しています。
変更が必要な個所は、以下の行だと思います。
37行目:'sort'は、検索結果の順番を指定します。ここでは、'sold'=売れ筋順 の昇順を指定しています。
price:商品価格
name:ストア名
score:おすすめ順
sold:売れ筋順
affiliate:アフィリエイト料率順
review_count:レビュー数順
先頭に、+-を付加すると、-(降順)もしくは+(昇順)となります。
38行目:'type'は、複数の検索文字のAND検索(=all)をするか、OR検索(=any)をするかを指定します。
ここでは、AND検索を実施しています。
40行目:'category_id'は、検索対象のカテゴリIDを指定します。
ここでは、"2502"の"パソコン、周辺機器"を指定しています。
ここで指定するカテゴリIDは、以下のURLで確認することができます。
http://shopping.yahooapis.jp/ShoppingWebService/V1/categorySearch?appid=<your application id>&category_id=1このサンプルURLの<your application id> : に先に取得した、Web API ID(アプリケーションID)を指定して、Webブラウザに直接入力してみましょう。
出力されたXML情報のIdタグが、カテゴリIDとなります。
41行目:'query'は、検索する文字列です。ここでは、"Windows 7 Microsoft"のAND検索を実施しています。
42行目:'offset'は、検索結果の何番目からを出力するかを指定します。1回の検索結果で、最大20個の検索結果を得ます。0は、先頭を意味します。
検索条件は、他にもいろいろと指定することができます。詳細は、以下のページを参照してください。
http://developer.yahoo.co.jp/webapi/shopping/shopping/v1/itemsearch.html
63行目:出力情報のXML情報をパーサにかけて文字列へ変換しています。
簡単な説明でしたが、こんな感じでYahoo!ショッピングの検索を行うことができます。
少しのPHPの知識があれば、自分用のAmazonウィジェットのようなYahoo!ショッピング版を作成できます。
今回は、わかりやすいように、XMLのベタ出力で作成してみました。 Yahoo! Web APIでは、PHP用も用意されていますので、そちらを利用するといくらか楽に作成できると思います。
また、自分で、いろいろと触ってみると、理解も深まると思います。一度、試されてみてはいかがでしょうか。
(以下に表示される本の紹介は、このYahoo! Web APIを使って検索された結果を表示しています。)
少しのPHPの知識があれば、自分用のAmazonウィジェットのようなYahoo!ショッピング版を作成できます。
今回は、わかりやすいように、XMLのベタ出力で作成してみました。 Yahoo! Web APIでは、PHP用も用意されていますので、そちらを利用するといくらか楽に作成できると思います。
また、自分で、いろいろと触ってみると、理解も深まると思います。一度、試されてみてはいかがでしょうか。
(以下に表示される本の紹介は、このYahoo! Web APIを使って検索された結果を表示しています。)
今回の記事では、PHPについて、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。


