レシピ |
■ PHP 4.xまたは5.x (http://www.php.net/) |
■ PHP標準添付のmbstringモジュール |
IT業界には,次から次へと新語や造語が登場します。しかし,わからない言葉を検索エンジンで確認するとき,ドキュメントから検索フォームにいちいち単語をコピー&ペーストする作業は面倒です。そこでドキュメントを読み込ませると,キーワードに自動的に検索エンジンへのリンクを張ったHTML文書を生成するスクリプトを作ってみました。
今回のサンプルはPHP(PHP:Hypertext Preprocessor)を使用します。バージョンは4.xでも5.xでもかまいません。デフォルト設定でインストールされている(C:\PHP にインストール済)としてお話を進めさせてください。
PHPというと「Webアプリケーション開発の専用言語」と思い込んでいる方がいるかもしれません。しかし,実際にはコマンドラインで使用するスクリプト言語環境です。ですから,ApacheのようなWebサーバーもMySQLのようなデータベースも使わず,純粋にスクリプト言語として,コマンドラインでPHPを動かせます。
ちなみにこのPHPへの誤解は,Web開発に多用されるPerlも同様でしょう。Perlはコマンドライン・スクリプト言語と認識されていた時代のほうが長いのですが,最近だと「PerlはWeb専用」と思っている人は案外います。
PHPのmbstringを使う
今回のサンプルの処理は,テキスト・ファイルの読み込み→アルファベットの文字列を抽出してリンク付け→新たにテキスト・ファイル(HTML)を生成,という流れになります。調べたいキーワードは何でもかんでもというわけにもいかないので,アルファベットにしぼります。とりあえずファイル生成付きパイプ・プログラムとでも呼んでおきましょう。
プログラム内では,読み込んだテキスト・ファイル内にあるアルファベットの単語をHTMLの<a>タグでくくります。<a>タグはリンク付けをするためのタグです。リンク先は検索エンジンの定番Googleです。リンクの際に抽出した英単語を検索語句として渡し,クリックするとその語句をキーワードとした検索結果のページが出てくるという仕様になっています。なお,新たに生成するHTMLは非常に簡単なもので,タグの書き方などはW3Cの勧告に従ってはいません。目的はあくまで文中の英単語に対して検索リンクを付けることで,完全にHTML化することではありませんからね。
Googleを使って,キーワード検索するには
http://www.google.co.jp/search?hl=ja&q=検索語句&ie=Shift_JIS
という書式を使います。「q=」の後ろに検索語句を入れます。本サンプルはWindowsでの使用を前提とし,カタカナも抽出するといった拡張を考えて「ie=Shift_JIS」のように文字コードにシフトJISを指定しています。「ie=」というくらいなのでInternet Explorer限定かのように見えますが,Firefoxでも問題なく検索できます。
キーワードの抽出には正規表現を使います。日本語を処理するので,PHPのマルチバイト文字列関数mbstringモジュールが動くように設定してください。php.iniなどいくつか細かい設定が必要です(詳しくはhttp://www.php.net/manual/ja/ref.mbstring.phpを参照してください)。サンプル・コード(リスト1[拡大表示])は,C:\Sampleというフォルダ(ディレクトリ)を作成し,text2html.phpの名前で保存してください。
<?php $exec_path = "C:\Sample"; $src_file = "\src.txt"; $dist_file = "\dist.html"; $filename = $exec_path.$src_file; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); fclose($handle); $rec_str = ""; //HTMLに記録するテキストの生成 $link_buf = ""; //検索語句になる部分用の一時バッファ $flag = 0; //検索語句感知状態フラグ $max = mb_strlen($contents,"sjis"); for($i=0;$i<=$max;$i++){ $one_str = mb_substr ($contents,$i ,1,"sjis"); $chk_eng = preg_match('/^[a-z0-9\.\s]/i', $one_str); if($chk_eng && !$flag){ $link_buf = $one_note; $flag = 1; } //英単語記録モード中 if($flag){ if($chk_eng){ $link_buf = $link_buf.$one_str; } if(!$chk_eng){ $flag = 0; $tag_str = "<a href='http://www.google.co.jp/search?hl=ja&q=".$link_buf."&ie=Shift_JIS'>"; $link_buf = $tag_str.$link_buf."</a>"; $rec_str = $rec_str.$link_buf; $rec_str = $rec_str.$one_str; } }else{ $rec_str = $rec_str.$one_str; } } $rec_str = nl2br($rec_str); $filename = $exec_path.$dist_file; $handle = fopen($filename, 'w'); fwrite($handle, $rec_str); fclose($handle); ?> |
使い方です。処理したい元ネタのテキスト・ファイルをC:\Sampleに「src.txt」という名前で保存します(図1[拡大表示])。[スタート]→[アクセサリ]→[コマンドプロンプト]とたどってコマンドプロンプトを起動し,
C:\PHP\PHP C:\sample\text2html.php
と打ち込んでリターンキーを押すと処理が開始され(図2[拡大表示]),C:\Sampleに「dist.html」が生成されます。エクスプローラでC:\Sampleを開いてdist.htmlをダブルクリックするとWebブラウザが起動して簡易HTMLが表示されます(図3[拡大表示])。調べたい語句のリンクをクリックすればGoogleの検索結果が出ます。
日記のテキスト・ファイルをこのプログラムを通してHTMLとして生成し自分のブログに貼り付ければ,簡易検索機能付きブログの誕生です。いちいち自前でリンクを張るのは面倒な作業ですが,こういう仕組みを持っていると労力を低減できますよ。