必要に迫られて、ヤフオクのウォッチリストのデータを取得しようと調べてみたところ、「※こちらのAPIはYahoo! ID連携に対応したAPIです。」となっています。
Yahoo! ID連携とは、Yahooの登録情報を自前のサイトのログインなどに使うサービスで、大手企業でも導入されているものです。
自分の登録しているオークションのデータを利用するのに、こんな大げさな仕組みは必要なのかと疑問ですが、データを提供してもらっている側に文句を言う筋合いはありませんので、しぶしぶ、この仕組みを実装することに。
いろいろ調べてみたところ、ずばりウォッチリストを取得する説明がされているサイトは見つけられなかったので、紹介したいと思います。
Yahoo! ID連携を使ってアクセストークンを取得
とりあえず、マイ・オークションを表示するために必要なのは、「アクセストークン」です。
これだけを取得できればいいので、提供されているサンプルコードを使って取得していきます。
もちろん、アプリケーションIDなどが必要ですが、このあたりの解説はたくさんあるので省略します。
YConnectで簡単ID連携!その1 ~ログインボタンの設置~
こちらのサイトで、詳しく解説されていますので、参照してください。
重要なのは、「コールバックURL」が必須だということです。
sample.phpを使うので、コールバックURLは以下のように指定してください。
http://[設置するドメイン・パス]/sample.php
PHP SDKをダウンロード
以下のページから、公式サンプルをダウンロードします。
sample.phpを変更
この中で変更する点は、sample.phpの4行目に「lib/」を追加します。
7行目と8行目のアプリケーションID、シークレットキーを入力します。
sample.php
<?php // YConnectライブラリ読み込み require("lib/YConnect.inc"); // アプリケーションID, シークレット $client_id = "YOUR_APPLICATION_ID"; $client_secret = "YOUR_SECRET"; ~以下略~
コールバックURLで指定した場所にアップロード
コールバックURLを指定しているので、そこにアップロードします。
ログインする
index.htmlにアクセスすれば、ログイン画面が表示されます。
ログインボタンを押すと、Yahooのログイン画面が表示されますので、Yahoo IDとパスワードを入力します。
すると、以下のような表示がされます。
Access Token Request
ACCESS TOKEN : [アクセストークン]
REFRESH TOKEN: [リフレッシュトークン]
EXPIRATION : 3600
ID TOKEN: [stdClass Object]
UserInfo Request
UserInfo:[ユーザー情報]
今回ほしかった情報は、「ACCESS TOKEN」欄に表示されています。
sample.phpの「$client->getAccessToken()」にアクセストークンが入っています。
サンプルでは、UserInfoも取得しているので、Yahooに登録されている情報が表示されて、若干気持ち悪いです。
オークションWeb APIを利用して、マイ・オークション表示(ウォッチリスト・開催中のオークション)
次に、これを利用してウォッチリストの情報を取得します。
アクセストークンを保持するために、セッションを利用しますので、sample.phpを少し変更します。
<?php session_start(); ~略~ $_SESSION["access_token"] = $client->getAccessToken(); header('Location: '.$_SESSION["My_url"]); ?>
以上のように、最初と最後に追加します。
仕組みとしては、アクセストークンの値を持っていなければsample.phpにアクセスして取得し、リダイレクトで元のページに戻るというものです。
samaple.phpには、今回の目的に不要なコードも含まれているので、その部分は削除しても構いません。
ウォッチリストを取得
sample_openWatchList.phpを作成し、ウォッチリストを取得していきます。
アクセストークンを利用するYahooのAPIは、アプリケーションIDは必要ありません。
cURLを使っています。
sample_openWatchList.php
<?php session_start(); // アクセストークンがなければsample.phpにアクセス if (empty($_SESSION["access_token"])) { $_SESSION["My_url"] = (empty($_SERVER["HTTPS"]) ? "http://" : "https://") . $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; header('Location: sample.php'); } // ウォッチリストのデータを取得 $i = 1; do { $api = 'https://auctions.yahooapis.jp/AuctionWebService/V2/openWatchList'; $params = array( 'start' => $i, ); $ch = curl_init($api.'?'.http_build_query($params, '', '&')); curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_HTTPHEADER => array('Authorization: Bearer ' . $_SESSION["access_token"]), )); $xml = simplexml_load_string(curl_exec($ch)); curl_close($ch); $totalResultsAvailable = (int)$xml->attributes()->totalResultsAvailable; $count = floor($totalResultsAvailable / 50) + 1; foreach ($xml->Result as $xml_result) { $Result[] = $xml_result; } $i++; } while ($i<=$count); unset($_SESSION["access_token"]); echo '<pre>'; var_dump ($Result) ; echo '</pre>'; ?>
ウォッチリストが2ページ以上ある場合も取得できるようになっています。
ウォッチリストの取得部分を関数化して、必要に応じて呼び出せば便利かもしれません。
アクセストークンの有効期限は1時間ですので、今回はウォッチリストを取得後に破棄していますが、リフレッシュトークンを利用することで再取得することもできます。
やっぱりめんどくさい
今回は、YahooID連携を利用して、開催中のウォッチリストを取得しました。
この他に、オークションWebAPIを利用して、入札中・落札分・ウォッチリストに追加・削除などが可能です。
一方、入札はすることができませんので、別の仕組みが必要になります。
ローカル環境から使えないYahooID連携を利用するのはやっぱりめんどくさいです。
次回は、cURLを使ってYahooにログインする方法を記事にしたいと思います。
コメント