他のサイトの内容を取得したいと思ったことはありませんか?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開発者をサポートする情報を掲載しています。