TRASH-NEWS MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

順路
  1. ホーム
  2. 2007年
  3. 12月
  4. 23日
  5. この記事 [現在地]
Search?
お知らせ
ここ数日更新が滞っていますが…… (2008/04/13 13:31)
4月より社会人となったため、時間の作り方がいまいちつかめないため、不定期の更新となります。まぁ……ニコニコメーカーでもお楽しみください!
1 2 3

MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

関連ページ
  1. MovableType4
  2. PHP
  3. 検索
TRASH-NEWSは
生きていくうえではあまり役立ちそうにないサイトです
初出時刻
2007年12月23日 03時35分 投稿
最終更新時刻
2008年02月21日 13時38分 改訂
  • この記事をはてブする
  • Yahoo!ブックマークに登録

MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上

唐突ですがTRASH-NEWSの検索結果がすこし見やすくなりました。これまでは検索で引っかかった記事本文の全文を表示していましたが、このたびGoogleやYahoo!などに準じた表示形式(マッチした検索語の前後数十文字をつなげて表示)に切り替えました。またそれに応じて表示件数も4件から10件に。すっきりしました(ex. 秋葉原』の検索結果)。

MovableType標準の検索エンジンはかなり病弱っ娘

TRASH-NEWSではブログ作成ツールとしてMovableTypeを利用しており、このMovableTypeには標準で検索エンジンが付属しています。MovableType4は検索エンジンが3時代より改善されたようですが、かわりに“謎のエラー(検索失敗)”をしょっちゅう起こすようになりました。どうも検索処理に高い負荷がかかる設計であるようです。10件しか記事がないときから既に“謎のエラー”が起きていましたから、これが1,000件単位の記事になったとき果たしてどうなるか……ガクブルがとまりません。こんな虚弱な検索エンジンに重荷など背負わせられない!

そこで検索結果をキャッシュする仕組みに作り替えました。以下PHPのプログラムの話です(MovableType4を前提として書いていますが同様のことはMovableType2/3でも可能です)。MovableTypeの改造に興味のある方はどうぞ。

このカスタマイズに際してはいじる場所が多いのですが、MovableTypeの設定自体はほとんど変更しないのでバージョンアップにも柔軟に対応できるのが強みです(すべてダッシュボードで変更できる範囲内)。またプラグインいらずであるため精神衛生上も安心です。

mt-search.cgiでの検索に自作プログラムをかませる

まず最初のステップは検索語を送信するフォームをmt-search.cgiから切り替えること。formのaction先をsearch.php(自作するプログラム)に書き換える、と書けば話が早いでしょうか。ここでこのsearch.phpの役目は大きく3つ。

search.phpの役目
  1. 検索語をMovableType4純正の検索エンジン(mt-search.cgi)に渡して結果を得る
  2. 得られた結果をPHP的な意味でserializeしキャッシュとして保存する
  3. もし生成から一定時間以内のキャッシュファイルが存在していればそれを次回以降表示する

つまりsearch.phpはキャッシュを作成・管理・表示させるためのゲートウェイプログラムとして使います。このPHPのプログラムを利用するメリットは検索結果がキャッシュされるためmt-search.cgiへのアクセスが減り検索ミスの心配が少なくなること。一度mt-search.cgiを経由して検索結果を取得すれば一定時間はその検索語に対して検索処理が行われません。MovableType風に言えば『検索結果のダイナミックパブリッシング』ですね。

また検索語や検索結果をPHPで自由にいじれるため、検索ランキングコーナーページ分割機能(Pager)を簡単に作ることが出来ます。いままでプラグインなどを要したものがPHPの外部ファイルをひとつ置くだけで解決してしまう、それがこのsearch.phpの最大の魅力かもしれません。冒頭の“検索結果の表示件数を調整した/表示形式をGoogleライクにした”というのもこの方法なればこそです。

システムテンプレートの書き換え

ここでいったんsearch.phpから離れて、システムテンプレートの『検索結果』をカスタマイズします。このテンプレートを以下のように書き換えます。

『検索結果』のカスタマイズ(実際に改行やタブは要りません)
<MTSearchResults> <$MTEntryID$><> <$MTEntryTitle encode_html="1"$><> <$MTEntryLink encode_html="1"$><> <$MTEntryBody encode_html="1" convert_breaks="0"$><> <$MTEntryDate format="%Y%m%d"$><> <$MTEntryKeywords encode_html="1"$><> <MTEntryTags glue="," replace='"',"""> <$MTTagLabel$> </MTEntryTags> <EOL> </MTSearchResults>

上記のようにwebアプリでよく用いられる"<>"セパレート形式で加工用データを吐き出すようにします。つまりhttp://(URL)/mt-search.cgi?IncludeBlogs=1&search=(URL変換した検索語)にfile_get_contentsをかければ上記のような書式の文字列がずらずらと取得できる寸法です。

閑話休題、URLにアクセスしてデータを得るくらいなら直にMovableTypeのデータベースにアクセスしてデータを引っ張ってきたほうが早いじゃないか……とは思いますが、今後のアップデートでデータベースの仕様が変わらないともいえませんし、データベースの種類に関わらず利用できる手法ということでこのような手法をとっています。URL取得できるということはAjax展開も出来ますしね(と同時にセキュリティ面を考慮してmt-search.cgiは保護/隠蔽するなどすべき)!

検索結果を取得、別個静的ファイルにキャッシュする

さて本論に戻りますが、取得してきたデータはimplodeで配列に分割し、そのデータを適宜加工した後serialize関数でファイルに保存できるように変換、キャッシュ用のディレクトリに保存します。このあたりの作業はシステムテンプレート側でも出来るので、そこはどちらでも。またここでxml形式で保存するようにすれば使い道がいろいろと増しますね。

ここまでの工程で検索結果のデータをPHPで加工しやすいかたちに整形してキャッシュすることが出来ました。あとはこれを表示するだけなのですが、うまくこなすためにはその解説に多くの文章が割かれそうなので以下次回に続きます。

余談。

MovableType4の最悪な点。一度タイムアウトでログアウトしてから(それに気づかず)記事を投稿すると、不明のエラーが起きて書いていた記事がすべて消えてしまう。ログアウトした時点でご自慢のオートセーブもストップしてしまうのでまったくアテにならない。なぜかウチの環境では15分おきにタイムアウトを起こしてしまうようなので実に良い死活問題。無線LANがブチブチ切れるからだとか、そういった理由なのかしら……。なんにせよ非常にやるせなくなります。

ちなみにOperaのもつ便利機能『戻るボタンを押してもフォームの中身を復帰するよ!』も、iframeの中のフォームまでは復帰不能。iframeをわざわざ好んで使うwebツールなど滅びてしまえ。

というわけでこの記事はパトスをたぎらせた1時間と涙にぬれた30分と涙をぬぐった30分をかけて半ばやっつけ気味に書かれました。そういう防衛線。

サイト内検索
検索する
このサイトについて
  • サイト名 : TRASH-NEWS
  • 分類 : ニュースとネタのサイト
  • ジャンル : 井戸端からアレゲまで
  • もっと詳しく見る
最近の記事
08月31日の記事
  1. Quad+GeForce 9600GTの新PCでタイムリープぶーとべんちしてみた
08月28日の記事
  1. 初音ミクの星間飛行や振り付けランカちゃんなど最近見たニコニコ動画
08月25日の記事
  1. 初音ミクと小林オニキスさんの新曲『ORCA』がまたも素晴らしい
08月19日の記事
  1. こもんちゃん(ニコニ・コモンズ)で解説する『PhotoshopCS3でアニメgifを編集する方法』
08月18日の記事
  1. ブルースクリーン・ブルース
08月17日の記事
  1. 夏コミのために有給を取ったにもかかわらず
07月16日の記事
  1. マルタと釘宮のために買ったWii、Priceless.
07月12日の記事
  1. 2008年7月に発売されるマンガのスケジュール表
07月06日の記事
  1. I'veコンピアルバム 『master groove circle』など気になったニュース
07月05日の記事
  1. テイルズオブ釘宮やSound Blaster Play!など購入検討物リスト
日刊人気記事ランキング
2008年09月05日のぶん
1
Windows XP SP3インストールで不具合が起きることが発覚
213
2
XP SP3における不具合報告と32bitOSでのメモリのRAMDisk化の話
54
3
画像解析系ジェネレータ・BannerCodeBattler2(仮)着手開始
45
4
Windows XPのSP3は思いのほかスゴいらしい
39
5
テイルズオブ新作『テイルズ オブ ヴェスペリア』のまとめと推察
30
6
「テイルズ オブ」シリーズが全世界で売り上げ1,000万本突破
20
7
I'veコンピアルバム 『master groove circle』など気になったニュース
16
8
マリオっぽい自作のゲーム改めしょぼんのアクション公開開始
16
9
アリゾナ在住のアニメ大好きGrumpyJiisanなど最近見たニコニコ動画
16
10
ハニカム1巻や花やしきの住人たち1巻など最近読んだマンガの感想
16

2008年09月06日 0時更新

人気記事ランキング

カテゴリ(折畳表示)
ニュース・ネタ
サブカテゴリを開く
俺研究舎
サブカテゴリを開く
お知らせ
サブカテゴリを開く
特集・企画
サブカテゴリを開く
管理人近況
サブカテゴリを開く
カスタムアーキテクチャ
1回めのようこそ!
ゲストさん
  • 文字の大きさ : 12px
  • フォント : MS Pゴシック
  • レイアウト : 3段組
  • カスタムする
カレンダー
2007年12月
«  11月 - 01月  »
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31          
管理人について
管理人 : 八満かシアン
文系なのにエンジニア、なんてこったい(八満のほう)
今頃たぶん聴いている曲
☆☆☆☆☆☆ by 榎津まお・春日りか・倉沢はるか・榊原ゆい・茶谷やすら
月別アーカイブ
2008年
2007年
最近記事に掲載した画像
タイムリープぶーとべんち本編開始前の寸劇でKO
タイムリープぶーとべんち本編開始前の寸劇でKO
タイムリープぶーとべんちでも比較的驚きの結果
タイムリープぶーとべんちでも比較的驚きの結果
Vista標準搭載のエクスペリエンスインデックススコアで性能評価
Vista標準搭載のエクスペリエンスインデックススコアで性能評価
ラタトスクとWiiはマルタと釘宮のために存在している
ラタトスクとWiiはマルタと釘宮のために存在している
夏海ケイ作画『うみねこのなく頃にEP1』が面白い
夏海ケイ作画『うみねこのなく頃にEP1』が面白い
画像に関するリンク
ユーティリティ
RSSフィード
ソーシャルブックマーク
  • iGoogle
  • はてなアンテナにTRASH-NEWSを追加する TRASH-NEWSのはてなブックマーク数 この記事を含むはてなブックマーク
サイトプロフィール
Powered by
  • Movable Type 4.1 + [XHTML + CSS + JavaScript] + PHP
  • TRASH-NEWS / Hachiman_Cian 2007-
このページについて
題名
MovableType4の検索結果の自作ダイナミックパブリッシング化解説・上
内容
  • 唐突ですがTRASH-NEWSの検索結果がすこし見やすくなりました。これまでは
TRASH-NEWS ロゴ
TRASH-NEWS ロゴ
TRASH-NEWS : http://www.trash-news.net/