PHPを使って、mixiのとあるページ(ユーザから指定される)に対して、file_get_contentsを行いたいのですが、何かいい方法はないでしょうか?
mixiの場合には、普通にmixi内のページに対してfile_get_contentsを行っても、ログイン情報がないのでログインページのソースを持ってきてしまいます。
PerlのモジュールでWWW::Mixiや、PHPのPHP_mixiクラスというのは見つけたのですが、前者はPerlであり、後者はダウンロードサイトが見つかりません……。
特にPHPにこだわりはないのですが、他の処理をPHPで作ってしまったので、できればPHPがよいです。
file_get_contentsでなくても、似たようなことができれば、よいです。
何かよい方法をご存知の方、どうぞよろしくお願いいたします。
file_get_contentsを使ってシンプルに実現したい場合は、
<?php /** * mixiにログイン * * @param array $data ログインデータ * @return array $cookies クッキー */ function MixiLogin($data) { $data = http_build_query($data + array('next_url' => 'home.pl'), '', '&'); $context = stream_context_create(array( 'http' => array( 'method' => 'POST', 'header' => implode("\r\n", array( 'Content-Type: application/x-www-form-urlencoded', 'Content-Length: ' . strlen($data) )), 'content' => $data ) )); file_get_contents('http://mixi.jp/login.pl', false, $context); $cookies = array(); foreach ($http_response_header as $r) { if (strpos($r, 'Set-Cookie') === false) { continue; } $c = explode(' ', $r); $c = str_replace(';', '', $c[1]); $cookies[] = $c; } return $cookies; } /** * mixiのページを取得 * * @param string $url 取得URL * @param array $cookies クッキー * @return string $content ページの内容 */ function MixiGetPage($url, $cookies) { $context = stream_context_create(array( 'http' => array( 'method' => 'GET', 'header' => implode("\r\n", array( 'Cookie: ' . implode('; ', $cookies) )) ) )); return file_get_contents($url, false, $context); } // ログインデータ $data = array( 'email' => '[email protected]', 'password' => 'hogehoge' ); // ログインクッキー $cookies = MixiLogin($data); // ホーム $page1 = MixiGetPage('http://mixi.jp/home.pl', $cookies); // マイミク一覧 $page2 = MixiGetPage('http://mixi.jp/list_friend.pl', $cookies);
こんな感じで行けます。
もっとガッツリやりたい場合(セッション管理など)は id:mue さんの提示されているPHP_Mixiや、アレゲwiki - PEAR/Services_Mixiなどを使うのが良いと思います。
回答ありがとうございます。
そのまま使えそうなサンプルまでつけていただき、非常に感謝です。
今日、自宅に帰って早速、試してみます。
2009/07/22 23:27追記:
バッチリ動きました!!
ありがとうございます。