ようこそゲスト さん ユーザー登録 ログイン

【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でなくても、似たようなことができれば、よいです。

何かよい方法をご存知の方、どうぞよろしくお願いいたします。 【PHP】【mixi】 PHPを使って、mixiのとあるページ(ユーザから指定される)に対して、file_get_contentsを行いたいのですが、何かいい方法はないでしょうか? mixiの場合.. を含むブックマークはてなブックマーク - 【PHP】【mixi】 PHPを使って、mixiのとあるページ(ユーザから指定される)に対して、file_get_contentsを行いたいのですが、何かいい方法はないでしょうか? mixiの場合.. - 人力検索はてな

  • hina1981 あなたも質問に答えられます! ウォッチリストに追加
  • 状態:終了 いるか
  • 回答数:1 / 45件
  • 回答ポイント:150ポイント
  • 登録:2009-07-22 08:54:39
  • 終了:2009-07-23 08:40:14
  • カテゴリー:コンピュータコンピュータ ウェブ制作ウェブ制作

1 回答者:Rewish 2009-07-22 09:52:38 満足! 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などを使うのが良いと思います。

質問者:hina1981 2009-07-22 23:30:57

回答ありがとうございます。

そのまま使えそうなサンプルまでつけていただき、非常に感謝です。


今日、自宅に帰って早速、試してみます。


2009/07/22 23:27追記:

バッチリ動きました!!

ありがとうございます。

おとなり質問

この質問・回答へのコメント

それっぽいurlを貼ります。未検討に付きポイントは不要です。
http://www.komagata.dreamhosters.com/svn/labs/trunk/foafwidget/lib/phpMixi.class.php_
>> mue様
ありがとうございます。
php_mixiクラスですね!

また、時間があるときに試してみます。

この質問・回答へのトラックバックこの質問・回答へのトラックバック