検索
連載

最終回 Webアプリケーション開発にチャレンジ【後編】作って学ぶ、今どきのWebサービス(2/3 ページ)

PerlによるWebプログラミングの基礎から応用まで解説してきた本連載の締めくくりとして、今回は、これまで学んだことを踏まえた上で、実際にWWW::OpenSearchを使ってアプリケーションを組み立てていきましょう。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

 と、ここでちょっと戻ってUU::Index(リスト2)を良く見てみると、4行目からの処理は、どうやらUU::Searchでも同じように書く必要がありそうです。同じロジックが2つのクラスに存在しているのはいまいちなので、ここは継承を使って書き換えます。UU::Appというスーパークラスを作って、UU::IndexとUU::Searchはそれを継承させましょう。UU::Appはリスト4のようになります。また、UU::Indexを書き換えて、UU::Appを使うようにします(リスト5)。ずいぶんスッキリしましたね。続けてUU::Searchを見ていきましょう(リスト6)

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト4 UU::App

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト5 UU::Appを使うよう書き換えたUU::Index

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト6 UU::Search

 do_searchでやっていることはコマンドラインのスクリプトとほとんど同じです。入力がコマンドライン引数からCGIのクエリパラメータに変わっただけですね。異なる個所といえば、(A)の部分でしょうか。これはページングの処理で、検索結果に2ページ目以降がある場合にそれを表示できるよう、パラメータをセットしています。

 一方、テンプレートのsearch.ttですが、リスト7のような感じになります。テンプレートについて少し解説しておきましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

リスト7 検索のテンプレートsearch.tt(便宜上行番号を示しています)

 Googleなどの検索エンジンでは、トップページから検索して検索結果の画面に来たときも、フォームの中には使った検索語句が表示されます。細かい話なのですが、使い勝手に大きく影響する部分です。そこでGoogle同様に、指定された検索語句と検索エンジンの結果を、検索結果の画面でも保持するようにしたい、ということでTemplate::Plugin::FillInFormというTTのプラグインを使っています(6行目〜16行目)。

 TTのプラグインは、CPANでインストールした後、このようにテンプレートの中で「[% USE FillInForm %]」などとすれば使うことができます。FillInFormプラグインを使うと、「[% FILTERfillinform …… %]」〜「[% END %]」で囲まれた個所にあるformの各値が、fobjectで与えられたクエリを自動で保持するようになります。

 19行目〜20行目では、WWW::OpenSearchのインスタンス(engine)からpagerメソッドでインスタンスを取り出し、これに対してメソッドを使って検索結果の件数などを表示しています。WWW::OpenSearchでは、pagerメソッドでData::Page(ページング処理を管理するCPANモジュール)のインスタンスが取得でき、このインスタンスが検索結果の件数やページ数などの情報を持っています。

 最後に、29行目〜40行目の部分はいわゆるページャを表示するための個所です。マクロがちょっとたくさんありますが、よく見るとやっていることは簡単で、要は前のページがあったら「prev」のリンクを表示、次のページがあったら「next」のリンクを表示、後は各ページへのリンクを表示しているだけです。

 さて、このクラスとテンプレートも適宜配置して、先のトップページから適当な語句で検索してみましょう。エンジンをBulkfeedsに変えると、検索結果がはてな検索からBulkfeedsのものに変わることが確認できるかと思います。FillInFormプラグインで、クエリの内容や選んだエンジンも保持されていて、いい感じですね。スタイルシートで見た目を調整してやればもう少し格好いい表示ができるかと思います。

Copyright © ITmedia, Inc. All Rights Reserved.

ページトップに戻る