他のサイトの内容を取得したいと思ったことはありませんか?PHPで他のサイトの内容を取得する方法はいくつかあります。file_get_contents()を使ったりfsockopen()を使ったりcurlを使ったり。今回はその中からPEARで提供されているPEAR::HTTP_Clientを紹介したいと思います。

このPEAR::HTTP_ClientはHTTP_Requestをラップしたクラスなので、依存してい るパッケージがいくつかあります。インストールするときには

pear install --alldeps HTTP_Client

上記のように--alldepsオプションを用いて依存関係にあるパッケージも一緒に インストールすると便利です。

では早速他のサイトの内容を取得してみましょう。ターゲットになるサイトは mixiです。mixiとはもう説明するまでもありませんが、ソーシャルネットワーキ ングサイトの一つで国内では圧倒的な規模と人気を誇ります。今回はこのmixiに PEAR::HTTP_Clientを使ってアクセスし、マイミクシィ最新日記を取得してみま しょう。

下記のスクリプトがそれになります。

<?php
require_once "HTTP/Client.php";

$email "メールアドレス";
$password "パスワード";

$login_params = array("next_url" => "/home.pl""email" => $email,
"password" => $password);

$login_url "http://mixi.jp/login.pl";
$new_friend_diary_url "http://mixi.jp/new_friend_diary.pl";

$client =& new HTTP_Client();
$client->post($login_url$login_params);
$client->get($new_friend_diary_url);

$response $client->currentResponse();
preg_match_all("/<td WIDTH=180><img.*?>(.*)<\/td>/"$response['body'],
$date_matches);
preg_match_all("/<td WIDTH=450>(.*)/"$response['body'], $title_matches);

$title "";
foreach (
$title_matches[1] as $key => $value) {
  
$value preg_replace("/view_diary.pl/",
"http://mixi.jp/view_diary.pl"$value);
  
$title .= '<dt>'.$date_matches[1][$key].'</dt><dd>'.$value.'</dd>';
}

print(
'<dl>'.$title.'</dl>');

?>

$emailと$passwordの部分には自身のものをそれぞれ入力してください。実行す るとマイミクシィ最新日記が表示されます。

スクリプトの流れを説明すると、まずHTTP_Clientのインスタンスを作成しま す。次にpost()メソッドでログイン画面のURLとクエリを送信します。次にget() メソッドを使用してマイミクシィ最新日記のURLに飛びcurrentResponse()メソッ ドでサイトの内容を取得します。後はこの内容をパースして日付とタイトルを取 得し表示しています。

以上のように、PEAR::HTTP_Clientを使うと手軽にサイトの内容を取得すること ができます。この他にもpost()メソッドの第4引数にファイル名等を指定すると ファイルのアップロード処理やクッキーのストア、HTTPリダイレクト、リファラ の設定等様々なことができます。興味のある方はぜひ使ってみてはいかがでしょ うか。

PEAR::HTTP_Client http://pear.php.net/package/HTTP_Client/

mixi http://mixi.jp/


(アシアル 熊谷裕志)

この記事は、アシアルが運営するPHP開発者のためのポータル&コミュニティサイト「PHPプロ!」で毎週配信しているPHP・TIPSメーリングリストを再録したものです。
同サイトでは、他にもPHP最新ニュースや、困ったときのQ&A掲示板、初心者向けのPHP講座など、PHP開発者をサポートする情報を掲載しています。