PHPプロ!TIPS+
PEAR::HTTP_Clientでサイトの内容取得
他のサイトの内容を取得したいと思ったことはありませんか?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/
バックナンバーについて
TIPS-MLは、毎週金曜日に更新され、新しい記事が掲載されます。





ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。