どもです。
梅雨なのにあまり雨を見ない餅。です。
引き篭もりだから、ではなく、何故か今年の僕の町は、
異様に雨に避けられる地帯になっているらしいです。
それはともかく、今回はYahooオークションについて。
今回の依頼は、
「Yahooオークションに複数ID(店舗)で出品している商品を一覧にして、
自社サイトで表示したい」とのことでした。
この道のりがなかなかややこしかったので、紹介しようと思います。
「商品リストAPI」を使用する
Yahooでは、自社コンテンツを幅広く利用されるために
データをエクスポートするサービスがあります。
それが、YahooAPI。
今回は、その中でオークション用の「商品リストAPI」というものを使います。
①アプリケーションIDを発行する
商品リストAPIを利用するには、YahooアプリケーションIDというものを発行する必要があります。
登録ページはこちら。
Yahooアカウント1つにつき、10個まで発行できるそうです。
②商品リストAPIを使用する
アプリケーションIDを作成したら、次は商品リストAPIを使用します。
URL欄に、
http://auctions.yahooapis.jp/AuctionWebService/V2/categoryLeaf?appid=<アプリケーションID>&category=<商品リストのカテゴリID>
を貼り付け、そのページへ飛びます。
厄介なのは、カテゴリーIDを入力するのが必須であること。
おかげで、表示させたいカテゴリの分だけアドレスを発行することになります。
また、WordPressでも見た感じですが、
(条件1)=(条件1のパラメータ)&(条件2)=(条件2のパラメータ)…
といった感じで、&で接続することでデータの状態を指定することができます。
そこで、
&seller=(自社ID①),(自社ID②),(自社ID③)…
を付け加えることで、IDを指定してデータを取得することが可能になります。
取得したデータは、XMLの形をしています。
APIで取得したXMLデータをサイトに表示する
データを取得することは出来ましたが、このままでは利用できません。
サイトに表示させるには、jQuery(Ajax)を使う必要があります。
やり方としましては、こちらのサイト様がとても分かり易い。
こちらのスクリプトを、取得したデータ名に置き換えたものがこちら。
<script>
$(function(){
$.ajax({
url:'取得したデータのURL',
type:'GET',
dataType:'xml',
timeout:5000,
error:function() {
alert("ロード失敗");
},
success:function(xml){
$(xml).find("Item").each(function() {
$("#sample ul").append('<li><a href="' + $(this).find('AuctionItemUrl').text() + '" target="_blank">' + $(this).find('Title').text() + '</a></li>');
});
}
});
});
</script>
但し、これだけではエラーが起こります。
理由は、詳しくはこちらのサイト様を見て頂くとして、簡潔に言うと、
外部サイトのデータをAjaxで引っ張ってくることはできない、
というものです。
そこで、自社ドメイン内にAjaxのデータを引っ張ってきます。
$url = "取得したデータのURL";
$xml = file_get_contents($url);
header("Content-type: application/xml; charset=UTF-8");
print $xml;
これで、このPHPの内容=取得したデータの内容になります。
先のページのURLのところには、このPHPのURLを記述します。
先のサイト様によれば、この手順を踏まずともデータを取得することが可能らしい
のですが、僕は上手くいきませんでした…(´・ω・`)
これで、やっとのことデータを表示させることができました。
あとは、やりたいことに応じて取得するデータ・表示させるデータを変更し、
カテゴリの数だけPHPを増やしてjsを量産します。