4. Webサイトの情報取得方法
4.1. proxy.php を利用したWebサイトの情報取得方法
前章までで環境の整備ができたので、ここからは実際のプログラミングについて勉強してみましょう。
ドキュメントルートフォルダの直下に「test01」フォルダを作成しましょう。更に「proxy.php」については、いつも利用するので、これはドキュメントフォルダの直下に新たに 「init」というフォルダを作成しましょう。そして、「init」フォルダに先ほどダウンロードした「proxy.php」ファイルをおきましょう。こうすることで、何時でも同じ場所からこのproxy.phpファイルを読み込むことができるでしょう。
ちなみに、phpで外部ファイルを読み込む際は下記のようにします。
これで、proxy.phpの中の関数を読み込んだファイルの中で利用できます。
4.1. proxy.php を利用したWebサイトの情報取得方法
では今からはてなブックマークのトップページのHTMLファイルを取得するプログラムを記載してみます。
先にプログラムを記載し、説明は後述します。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta name="keywords" content="php,tidy,スクレイピング,API,Webサービス" /> <meta name="description" content="phpによるスクレイピング処理入門" /> <title>phpによるスクレイピング処理入門:はてなブックマークの情報を取得 <link href="style.css" rel="stylesheet" type="text/css"> </head> '.INIT_URL.'
'; $data = get_html(INIT_URL); $html = htmlspecialchars($data); echo ''; ?> </body> </html>
ではプログラムを見てみましょう。まず、このプログラムを実行した結果を想像してみてください。
実際にデータを表示している部分は、27行目から32行目の部分になると思います。情報を取得する関数はどこで利用しているかといえば、23行目になります
28行目で、get_html()という内部関数(22~26行目)に11行目で定義したINIT_URLの値を渡しています。
get_html()で渡された$urlは、http_request()という関数に更にデータを渡しています。このhttp_request()関数はこのソースの中にはどこにも見当たりません。この関数は21行目で読み込んだproxy.php内に存在しています。
http_request()にURLを渡した結果を$r_dataに取得する際、その結果は連想配列のデータとして戻ってきます。今回利用するのは、その連想配列の中で$rdata['data']という連想配列のみになります(他のキーに何が入っているか興味がある方は、print_r($rdata);などとしてみてみるとよいと思います)。
この$rdata['data']の文字コードは現時点ではよくわかっていないので、78行目で mb_convert_encoding() 関数(ここで、mb_string関数が必要になってくるのですね)でUTF-8に一括で変換しています。そして変換した結果を $data に入れて return() して28行目の $data に戻しています。
このまま生のHTMLファイルを表示するのではなく、29行目でhtmlspecialchars()関数を利用して、HTMLタグをサニタイズして、TEXTAREAに表示するようにしています。
現状は11行目で固定されたURLのみしか変換しないプログラムになっていますが、フォームからURLを取得して、動的にHTMLファイルを取得するなんてことも勿論できますね。
これでも、ある目的を持った(立派な?)プログラムではあるのですが、このサイトの目的はこの取得したHTMLファイルのスクレイピングにあるので、まだまだこの先は存在します。次章では、スクレイピングの基本として、TIDY関数を実際に利用してみましょう