感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

PHPでHTTP_ClientやHTTP_Requestを使って、Yahooのbody要素を取得して、検索結果を表示してみる。

<スポンサーリンク>

HTTP_Requestのドキュメントページは以下。
http://pear.php.net/manual/ja/package.http.http-request.php

とりあえず手元のWindows(XAMPPを使ってる)で以下のコマンドを実行する。

>pear install --alldeps HTTP_Request2-2.0.0
pear/HTTP_Request2 is already installed and is newer than detected released version 2.0.0
install failed

既にインストールされていたようだ。

試しにマニュアルにも載っている以下のようなサンプルを動かしてみると・・・

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

$req = new HTTP_Request("http://yahoo.co.jp/");

if (!PEAR::isError($req->sendRequest())) {
	echo $req->getResponseBody();
}

ブラウザには

The document has moved here.

というように表示されて、Yahooのページヘのリダイレクトリンクが貼られている。

次に、HTTP_Clientなるものを使ってみる。

>pear install --alldeps HTTP_Client
WARNING: "pear/HTTP_Client" is deprecated in favor of "pear/HTTP_Request2"
WARNING: channel "pear.php.net" has updated its protocols, use "pear channel-update pear.php.net" to update
WARNING: "pear/HTTP_Request" is deprecated in favor of "pear/HTTP_Request2"
downloading HTTP_Client-1.2.1.tgz ...
Starting to download HTTP_Client-1.2.1.tgz (10,202 bytes)
.....done: 10,202 bytes
ERROR: failed to mkdir C:\php\pear\docs\HTTP_Client\examples

とやると、

ERROR: failed to mkdir C:\php\pear\docs\HTTP_Client\examples

というエラーが出た。これは、「管理者権限で実行」をしていないからで、管理者として実行するとうまくいった。
以下のStackOverFlowを参考にした。
http://stackoverflow.com/questions/5801111/installing-pear-and-phpunit-with-xampp

それでは、とりあえずHTTP_Clientを使って、ヤフーの検索結果を表示してみる。
参考にしたのは以下の記事。
35. PEAR::HTTP_Clientでサイトの内容取得

<?php
require_once('HTTP/Client.php');

header('Content-Type: text/html; charset=utf-8');
$client = new Http_Client();
$targetUrl = "http://search.yahoo.co.jp/search?p=michael+jordan";
$client->get($targetUrl);
$response =  $client->currentResponse(); 
echo $response['body'];

このPHPに対してブラウザでアクセスすると、以下のように表示される。

f:id:sho322:20131201192130p:plain

参考にした本

PHPによるWebアプリケーションスーパーサンプル活用編 第3版
この本の5章「PHPで外部のページにアクセスする」をきっかけにしたけど、だいたいはネットを調べていた。