人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【PHP】【mixi】
PHPを使って、mixiのとあるページ(ユーザから指定される)に対して、file_get_contentsを行いたいのですが、何かいい方法はないでしょうか?

mixiの場合には、普通にmixi内のページに対してfile_get_contentsを行っても、ログイン情報がないのでログインページのソースを持ってきてしまいます。
PerlのモジュールでWWW::Mixiや、PHPのPHP_mixiクラスというのは見つけたのですが、前者はPerlであり、後者はダウンロードサイトが見つかりません……。

特にPHPにこだわりはないのですが、他の処理をPHPで作ってしまったので、できればPHPがよいです。
file_get_contentsでなくても、似たようなことができれば、よいです。

何かよい方法をご存知の方、どうぞよろしくお願いいたします。

●質問者: hina1981
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:mixi Perl PHP WWW とある
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● rewish
●150ポイント ベストアンサー

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' => 'hoge@example.com',
 '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追記:

バッチリ動きました!!

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ