ページ)今回から、いよいよPerlプログラミングの世界に入っていきましょう。手始めに、PerlにおけるWebプログラミングの要ともいえるLWPを用いた、HTTPコンテンツをPerlでHackする手法を解説します。伊藤直也,ITmedia]前回は、CPANモジュールのインストールを説明しました。今回から、いよいよPerlプログラミングの世界に入っていきましょう。Perl)を用いた、HTTPコンテンツをPerlでHackする手法を解説します。XMLの扱い方も少々、ということで、比較的扱いやすいRSSも題材にミックスしたいと思います。LWPの役割プログラムの中から、あるWebサイトで公開されているコンテンツを利用したい、というケースはよくありますね。HTMLを取得してそこから必要な値を抜き出したり、あるいはWeb上に公開されているXML文書を取ってきて別の形に作り替えたり。リモートのコンテンツを自由自在に操れるようになると、「あるサイトとあるサイトを組み合わせて、もう一つ別のサイトを作り出す」なんてことが実現できるようになります。そんなとき利用するのがLWPです。LWPはWWW上のデータを処理するためのライブラリの集まりです。その中にLWP::UserAgentなどのモジュールが含まれています*。LWP::SimpleでXML文書を取得Web上のコンテンツを取得するには、LWP::Simpleを使うのが最も簡単です。わたしのブログのRSSフィードを取得して、それを標準出力に書き出すにはリスト1のスクリプトでOKです。LWP::SimpleでXML文書をGET以下、リスト1の内容を簡単に解説していきましょう。strict」を記述すると、そのスクリプト内では必ず変数を、myやlocalで局所化しなければならなくなります。そのため、バグの少ないきれいなソースを書くための助けになります。strict」は、基本中の基本です。LWP::Simple;」です。」としてその利用を宣言します。処理の本体は5〜7行目です。コマンドライン引数で受け取ったURLのコンテンツを、LWP::Simpleのgetメソッドで取得します。この戻り値に、リモートコンテンツのドキュメントが丸ごと入っています。実行すると実行例1のようになります。コマンドライン引数にRSSフィードのURLを指定して実行すると、リモートからRSSフィードを取得して書き出します。LWP::SimpleでXML文書をGETRSSフィードって何?多少順番が前後してしまいましたが、先ほどから何度か出てきているRSSフィードについても簡単に説明しておきます。RSSフィードは、Webサイトに書かれている内容の要約や更新情報が掲載されているXML文書です。RSSリーダーと呼ばれる巡回ソフトで読むことや、ほかのアプリケーションからサイトのデータを利用するときに使われることを想定している文書です。ブログツールなどで記事を書くと、自動でRSSフィードが公開されたりします。RSSフィードはXML文書なので、サイトの記事タイトルや本文の内容などを効率的に抜き出せます。具体例を見てみましょう。リスト2は、わたしのブログのRSSフィード*です。http://d.hatena.ne.jp/naoya/rssから取得できます。rdf:about="http://d.hatena.ne.jp/naoya/20050330/1112136510"><title>会社にお泊まり</title><link>http://d.hatena.ne.jp/naoya/20050330/1112136510</link><description>夜遅かったので会社に泊まることにしました。筆者のブログのRSSフィード(一部省略)ざっと斜め読みしても、何となく日記そのもののタイトル、各日記の記事タイトルや要約などが含まれているのが分かりますね。このXML文書をパース*すれば、それらを抜き出して利用するプログラムが書ける、というわけです。XML::RSSでRSSフィードをパースXML文書のパースの仕方にはいろいろな方法がありますが、ことRSSに関しては、RSSのパースに特化したモジュールであるXML::RSSを使うのが簡単かつ定番です。XML::RSSはCPANからインストール可能です。先のLWP::Simpleで取得したRSSフィードをXML::RSSでパースして、各日記のタイトルだけを出力するスクリプトを書いてみます(リスト3)。以下、要所を解説していきましょう。XML::RSSでRSSフィードをパース3〜5行目では、LWP::Simpleに加えてXML::RSS、それから出力の文字コードをUTF-8からEUC-JPに変換するためにEncodeモジュールをuseでロード*します。飛んで11行目、XML::RSSモジュールはオブジェクト指向インタフェースのモジュールなので、まずnewメソッドでインスタンスを生成します。その後、12〜15行目で、XML::RSSオブジェクトのparseメソッドに取得したドキュメントを渡すと、オブジェクトが内部でそれをパースして、その結果を保持します。後はそのオブジェクトが保持しているデータ構造をループで回して必要な値を取得し出力すれば完了です。スクリプトを実行すると、実行例2のように記事のタイトルが出力されます。別のRSSフィードを指定してみましょう(実行例3)。RSSフィードであればどんなものでも同様の手順でパースできるので、いろいろなサイトのタイトルでも抜き出すことができるというわけです。別のRSSフィードを指定−−このページで出てきた専門用語LWP::UserAgentなどのモジュールが含まれていますLWPはPerlの標準モジュールなので、CPANからインストールする必要はない。筆者のブログのRSSフィードなお、はてなダイアリーのRSSにはXSLTが適用されているので、ブラウザで見ても通常のページのように見えるが、内容はXML文書で記述されている。パース文法に沿ってデータを分析・分解すること。EncodeモジュールをuseでロードPerlのバージョンが5.6系以下の場合はEncodeモジュールではなくJcodeモジュールを使う。広告に関するお問い合わせメールマガジンSpecialインデックスRSSFacebookX利用規約ITmediaはアイティメディア株式会社の登録商標です。