以前、ヤフオクのウォッチリストのデータを取得するのに、Yahoo! ID連携を使う方法を紹介しました。
【PHP】Yahoo! ID連携でヤフオク(マイ・オークション)データを取得
正攻法ならこの方法だと思いますが、いろいろとめんどくさい点があります。
そこで、ローカル環境からウォッチリストを取得するために、cURLでYahooにログインしてみたいと思います。
以下のブログを参照してますが、現在はYahooの仕様が変更されているため、そのままでは使えません。
PHPでヤフーにログインする - Digitarhythm
一連の続き。もうほとぼり冷めたし、そうすぐに仕様変えないだろうからと思って公開します。Github使ってたらかっこ良さそうなので、そっちで公開します。よろしくです。 comeonly/yahoobrowser · GitHub 公開してから知りましたが、こんなちょっとしたコードならGistが良かったんですかね。まいっか...
Yahooは頻繁に仕様が変わるため、今回紹介するものもいつまで使えるかはわかりませんので、ご了承ください。
まずはYahooにログインする
ログインさえできれば、ヤフオクのウォッチリストを取得したり、ヤフーショッピングの注文履歴をみたりできますので、まずはトップページにログインしてみます。
YahooのIDとパスワードさえ入力すれば動くと思います。
ユーザーエージェントは好きなものに変えても大丈夫です。
<?php
//Yahoo!のアカウント名
$id = '[YahooID]';
$pass = '[パスワード]';
$cookie = './cookie.txt';
// 好きなユーザーエージェントを設定
$user_agent = 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; Touch; rv:11.0) like Gecko';
// ログインページを開く
$url = 'https://login.yahoo.co.jp/config/login?';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
$html = curl_exec($ch);
curl_close($ch);
// 必要なポストデータを取得
preg_match_all(
'/document\.getElementsByName\("\.albatross"\)\[0\]\.value = "(.*?)";/',
$html,
$albatross,
PREG_SET_ORDER
);
// ポストデータをセット
$POST_DATA = array(
'.ct' => '',
'.display' => '',
'.done' => 'http://www.yahoo.co.jp',
'.keep' => '',
'.reg' => 'https://account.edit.yahoo.co.jp/registration?src=www&done=http%3A%2F%2Fwww.yahoo.co.jp',
'.src' => 'www',
'.suppreg_skip' => '',
'.yby' => '',
'auth_lv' => '',
'card_cushion_skip' => '',
'ckey' => '',
'nolink' => '',
'nonotice' => '',
'noreg' => '',
'referrer' => '',
't_cushion' => '',
'.albatross' => $albatross[0][1],
'.requiredPsCheckBox' => '',
'.slogin' => '',
'.tries' => '1',
'ls_autocomp' => '',
'showpw_status' => '',
'login' => $id,
'passwd' => $pass,
'persistent' => 'y'
);
// Yahoo!トップページにログイン
$url = 'https://login.yahoo.co.jp/config/login?.src=www&.done=http://www.yahoo.co.jp';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $POST_DATA);
echo $html = curl_exec($ch);
curl_close($ch);
?>ログインした状態のトップページが表示されれば成功です。
ログインしてできること
取得したクッキーを使って、他のサービスも利用できます。
Yahooはサービスによって、文字コードが違うので、文字化けする場合はその辺りを疑ってください。
マイ・オークション(ウォッチリスト)を表示
<?php // ヤフオク!のマイ・オークション(ウォッチリスト)を表示 $url = 'http://openwatchlist.auctions.yahoo.co.jp/jp/show/mystatus?select=watchlist'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); echo $html = curl_exec($ch); curl_close($ch); ?>
Yahoo!ショッピングの注文履歴を表示
<?php // Yahoo!ショッピングの注文履歴を表示 $url = 'https://odhistory.shopping.yahoo.co.jp/cgi-bin/history-list?sc_i=shp_pc_top_MHD_order_history'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); curl_setopt($ch, CURLOPT_USERAGENT, $user_agent); echo $html = mb_convert_encoding(curl_exec($ch), 'UTF-8', 'AUTO'); curl_close($ch); ?>
その他
ヤフーにログインできれば、入札なども自動で行えるようになります(少し仕様が複雑ですが)。巷の自動入札ソフトなども、基本的にはブラウザ操作で入札しているようです。
このようなソフトを購入しなくても、自分で作れるようになりますね。



コメント