PHPでYahoo! Web APIを使う
ご利用のブラウザは、JavaScript が無効 となっていませんか?
このサイトでは、コンテンツの一部が非表示 、あるいは、コメント、お問い合わせの投稿ができない 、検索ができない ことがあります。
概要:
今回は、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は、以降のようにして作成します。
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" alt = "" / >自由テキスト</ 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
//-------------------------------------------------------------------
// 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 -- alt= "" /> 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 ( '<span class="red">Sale : ' . $current -> PriceLabel -> SalePrice . '</span><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で確認することができます。
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について、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。
コメントをどうぞ