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

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2009/07/23 08:40:14
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:Rewish No.1

回答回数9ベストアンサー獲得回数3

ポイント150pt

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などを使うのが良いと思います。

id:hina1981

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

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


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


2009/07/22 23:27追記:

バッチリ動きました!!

ありがとうございます。

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

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

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません
${title} {{if price }}
${price}円
{{/if}}