マッシュアップ・サイトを作る話の4回目です。
★ 検索ページを作る
さて、APIを使って楽天の商品を検索できるツールが完成しました。
流れとしては、
【検索キーワードや条件などをHTMLフォームで入れる】
↓
【検索用phpプログラムでキーワードなど検索情報を受ける】
↓
【APIに投げるリクエストURLを組み立ててリクエストを送る】
↓
【返ってくるXML形式のレスポンスを変数に入れる】
↓
【simplexml関数などを使ってXMLを分解する】
↓
【分解した情報で使うモノを配列に作り替える】
↓
【スマーティに配列を送って検索結果を表示する】
こういう感じです。
で、これがスタートのページになります。
これは更年期障害のサイトにつけた検索ページなので、
選べるジャンルカテゴリーは、医薬品関連と健康関連だけ
ラジオボタンを表示するようにしています。
楽天のジャンルは百くらいあるので、
全て表示すると、かえって検索しにくいとの判断です。
価格幅の設定も、元々の楽天のサンプルコードでは
ブランクになっていたんですが、
そうすると数字以外も入力できて、
検索がうまく行かなかったので、
ラジオボタンに変更しました。
ネットワークの負荷を軽減する
で、ここで問題になるのが、
検索によるサーバーの負荷です。
検索すると、サーバーのCPUや外部との通信で
ネットワークを使うわけですから、
いろいろ負荷がかかります。
phpプログラム自体は軽いので、さほどの負荷にはなりません。
が、APIサーバにリクエストを投げたり、
レスポンス(返答)を受けたりと言う作業には、
ネットワークの負荷がかかります。
だからかも知れませんが、ハッスルサーバーなどでは、
こう言う随時外部にアクセスするプログラムは
禁止になってます。
サーバー自体のスピードは速くても、
ネットワークにつないで情報をやりとりするのは、
どうしても遅くなるし、コストや負荷もかかりますから。
なので同じキーワードで何度も検索する場合、
検索結果を貯めて、キャッシュファイルを作った方が
良いわけです。
そんなに短時間で検索結果は変わりませんし、
ネットワークの負荷が万が一大きくなると、
自分の他のページの表示も遅くなってしまいます。
なのでキャッシュは必須ですね。
スマーティで、ページキャッシュ
そしてこれは、ページごとにキーワードに
合った商品を表示する際には、もっと問題になります。
というのも、元々このAPIツールを作っているのは、
ページにあったキーワードの商品を探してきて
それを表示する目的なんですね。
amazonや楽天には、ページに最適な商品を表示する
スクリプトというのがあるんですが、
あんまり狙ったキーワードに合ったモノは出ないんです。
なのでこちらが表示したいキーワードの商品を、
自動で表示しようと思ったのが開発動機だったんです。
検索しないのに検索するわけですから、
サーバーの負荷はできるだけ抑えたい。
そのためには絶対にキャッシュ機能は必要でした。
で、どうしたらいいか色々調べてみたんですが、
幸いスマーティ(Smarty)の機能に、
キャッシュが使える機能がありました。
仕組みとしては、
【キーワードを検索phpプログラムに投げる】
↓
【キャッシュがあるかどうか調べる】
↓
【キャッシュがあればそれを表示、無ければ検索】
こういう分岐でキャッシュを使うんですね。
ちなみにキャッシュのモードには三つあって、
・0はキャッシュしない、
・1は3600秒有効
・2は、キャッシュタイムを自由に設定できる、
というモノで、設定時間を超えていたら
再検索する仕組みになります。
キャッシュ機能を使うと、検索するたびに、
キャッシュファイルはどんどん増えていきますが、
負荷は減らせそうです。
コアサーバーは20万ファイルが上限で、
まだ10万近く余裕があるので、大丈夫そう。
いざとなったら、キャッシュを消すプログラムを
cronで動かせばいいということでOKでしょう。
これを使えば、お薦め商品ページのキャッシュを、
使う事ができます。
Pre >
マッシュアップ・サイトの作り方(3)
Next >
マッシュアップ・サイトの作り方(5)