以前、ヤフオクのウォッチリストのデータを取得するのに、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); ?>
その他
ヤフーにログインできれば、入札なども自動で行えるようになります(少し仕様が複雑ですが)。巷の自動入札ソフトなども、基本的にはブラウザ操作で入札しているようです。
このようなソフトを購入しなくても、自分で作れるようになりますね。
コメント