2012.07.02 PHPでヤフーにログインする - Digitarhythm
こちらでアップデートしました
以下昔の内容です
早々と使えなくなりました・・・。*1悲しい・・・。
PHPでYahooにログイン出来なくなったでも書きましたが書きなおしたので公開します。継承とかいまだによく分からないですが、すこしは綺麗になったでしょうか・・・。原因はここの通り*2「ログイン時のクッキーを取得して再度ログイン画面を開く」というのを追加したところログインできました。
ここで取得したクッキーを使用すればログイン状態でページ情報が取得できます。
<?php require_once 'HTTP/Request.php'; PEAR::setErrorHandling(PEAR_ERROR_DIE); class yahooBlog extends HTTP_Request { function init() { parent::__construct(); $this->addHeader('User-Agent', 'Mozilla/5.0 (Windows; U; Windows NT 6.0; ja; rv:1.9.1.1) Gecko/20090715 Firefox/3.5.1 (.NET CLR 3.5.30729)'); $this->addHeader('Keep-Alive', 115); $this->addHeader('Connection', 'keep-alive'); $this->addHeader('Referer', 'https://login.yahoo.co.jp/config/login?'); } // ログインしクッキーを返す function login($id, $pw) { $this->init(); $this->setURL('https://login.yahoo.co.jp/config/login?'); // リクエスト $this->sendRequest(); // HTMLソースの取得 $html = $this->getResponseBody(); // ログイン時のクッキーを取得し再度ログイン画面を開く $cookies = $this->getResponseCookies(); foreach ($cookies as $cookie) $this->addCookie($cookie['name'], $cookie['value']); // リクエスト $this->sendRequest(); // HTMLソースの取得 $html = $this->getResponseBody(); // POSTする項目とデータをを取得 preg_match_all('/<input type="hidden" name="(.*?)" value="(.*?)">/', $html, $matches, PREG_SET_ORDER); // 認証ページを開く $this->setURL('https://login.yahoo.co.jp/config/login?'); // POSTデータのセット $this->setMethod(HTTP_REQUEST_METHOD_POST); foreach ($matches as $entry) $this->addPostData($entry[1], $entry[2]); // IDとパスワードのセット $this->addPostdata('login', $id); $this->addPostdata('passwd', $pw); // ログイン状態を保存 $this->addPostdata('.persistent', 'y'); // リクエスト $this->sendRequest(); // Cookieの取得 $cookies = $this->getResponseCookies(); if (empty($cookies)) { echo 'Cannot log in.'; echo $this->getResponseBody(); exit; } else { return $cookies; } } ?>