ホーム

OFF-SOFT.net

OFF-SOFT.net

ウェブやソフトウェアに関するサポート&情報サイトです。サイト構築からソフトウェアの作成、利用まであなたの助けになるかも・・・・しれません。たぶん・・。

PHPでYahoo! Web APIを使う

公開日| 2009年10月13日 | コメントはまだありません。
概要:

今回は、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は、以降のようにして作成します。
  1. ValueCommerceの場合は、無料登録が完了したら、ECサイトのYahooショッピングと提携します。
    提携する場合、"オファー"の中からYahoo!ショッピングを探し、Yahoo!ショッピング情報を表示したときに"コードを取得"をクリックすると自動的に提携します。
    この"コードを取得"するとき、"テキスト広告"の自由テキストの中で、"MyLink対応"という記述のあるものを"コードを取得"します。

  2. 以下のようなコードが表示されると思います。
    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は、以下のように取得します。

  1. http://shopping.yahoo.co.jp/affiliate/へアクセスします。

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

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

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

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

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



Web API ID(アプリケーションID) を取得、確認します。

  1. http://developer.yahoo.co.jp/へアクセスします。

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

    連絡先メールアドレス、OAuthを利用しますか?、ガイドラインに同意しますか?
    の項目を答えます。
    OAuthは、ここでは使わないにしておきます。

    入力を終えたら、"確認"ボタンをクリックします。
  3. 確認画面が表示されますので、特に誤りがなければ"登録"をクリックします。

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





直接URLを入力して、検索してみましょう。

Yahoo! Web APIは、URLに操作パラメータを指定し、アクセスすることでXMLの情報を返信してくれます。
そのため、WEBブラウザで、直接URLアドレスを指定すれば確かめることができます。

では、このページを使って、URLコードを作って、試してみましょう。

  1. 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ブラウザに直接入力してみましょう。


  2. 以下のような返信情報(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について、少し知識が必要です。詳しく知りたい方は、以下の本なども良いと思います。
本から学ぶことは多いと思います。ネットだけでは判らない様々な事に気づかされます。


コメント

コメントをどうぞ







  • はてなブックマークへ追加する
  • Facebookでシェアする
  • twitter でつぶやく
  • Google Plusでシェアする
  • Pocketでシェアする
ページトップへ