Web連携プログラム
このページでは
「秀丸エディタ」でWebと連携したマクロを作る方法を、実例を挙げて紹介していきます。
Webと連携したマクロには、拙作の
「なみのり」を使います。
今回例として使うのは、
「Google Hit」というマクロです。
検索エンジンの
「Google」に、特定の単語がいくつ登録されているかを調べるためのマクロです。
私は、特定のURLがいくつ
「Google」に登録されているかで、そのWebサイトの価値を調べようと思いこのマクロを作りました。
「Google」自体が「そのWebサイトがどれくらいの場所からリンクを張られているか」ということで価値の大小を決める検索エンジンなので、この価値判断方法に適するわけです。
では、以下に実際のマクロを挙げて解説をしていきます。
マクロ自体が「Google」のレイアウトに依存しているために、ここにだけ置いておきます。
● 開始部分(Webとは無関係)
//------------------------------------------------------------------------------
// 「Google Hit」 ver 1.00
// google_hit.mac
//
// つくった人 柳井 政和
// URL : http://crocro.com/
// ver 1.00完成 2000.10.19
//------------------------------------------------------------------------------
// 本マクロの実行には、柳井政和作の「naminori.mac」が必要です。
//------------------------------------------------------------------------------
//----------------------------------------------------------------------
// 現在の秀丸ウィンドウを捕捉
#handleNow = hidemaruhandle(0); //handleを取得
//----------------------------------------------------------------------
// 結果書き込みウィンドウの作成
newfile; //ファイルの新規作成
#handleRes = hidemaruhandle(0); //handleを取得
insert "===== Google Hit 結果出力 ====="; //ヘッダー作成
insert "( http://www.google.com/intl/ja/ )=====\n\n"; //ヘッダー作成
//----------------------------------------------------------------------
// 作業ウィンドウの作成
newfile; //ファイルの新規作成
#handleWork = hidemaruhandle(0); //handleを取得
showwindow 0; //ウィンドウ非表示
//----------------------------------------------------------------------
// データ取得準備
setactivehidemaru #handleNow; //現在ウィンドウへ移動
gofiletop; //ファイルの先頭に移動
//----------------------------------------------------------------------
// データ取得ループ
#a = 0;
while(true){
// 各行の文字列を取得
golinetop; #x1 = x; #y1 = y; //行の先頭に移動
golineend; #x2 = x; #y2 = y; //行の最後に移動
$line_txt = gettext(#x1,#y1,#x2,#y2); //文字列取り込み
// 取得した文字列が空なら次の行へ
if ( $line_txt == "" )goto Label01;
// 作業ウィンドウを空に
setactivehidemaru #handleWork; //作業ウィンドウへ移動
selectall; //すべてを選択
backspace; //Backspace
// 作業ウィンドウに文字列張りつけ
insert $line_txt;
ここまでは、何の変哲もないプログラムです。
結果出力ウィンドウと作業ウィンドウを作成し、現在の行を作業ウィンドウに張りつけていく作業を延々とループさせているだけです。
このあと作業ウィンドウに張りつけた行を、Web連携用に加工する作業が入ります。
● 検索URLの作成
// 特定文字をエスケープ文字に置き換え
replaceall "/","%2F";
replaceall ":","%3A";
replaceall "~","%7E";
replaceall "+","%2B";
replaceall "?","%3F";
replaceall "=","%3D";
gofiletop; insert"http://www.google.com/search?q=";
gofileend; insert"&num=10&meta=hl%3Dja%26lr%3Dlang_ja&safe=off";
「http://www.google.com/search」が検索エンジンのURLで、
「?」以降がパラメータになります。
「?データ種類=データ」という組み合わせで延々とパラメータが続きます。
また、通常の日本語は
「なみのり」が自動的に
「%nn」といった文字列に変換してくれますが、
「/」などのURLに使われる文字は変換してくれません。
今回は、URL自体を検索エンジンで検索する対象にしますので、
「/」などの文字も
「%nn」の形に変換してやる必要があります。
それをおこなっているのが
「replaceall "/","%2F";」の部分になります。
● クリップボードに文字列をセット
gofiletop; insert"(&U)\n"; //なみのり制御用文字列挿入
// 検索用文字列取得
gofileend; #x2 = x; #y2 = y; //行の最後に移動
$line_search = gettext(0,0,#x2,#y2); //文字列取り込み
// クリップボードに文字列セット
setclipboard $line_search; //クリップボードに文字列を記入
「なみのり」では、クリップボードの文字列を調べて、1行目が
「(&U)」であれば2行目のURLを取得するようになっています。
なので、先ほど作ったURLの1行目に
「(&U)」を加え、クリップボードにその文字列をセットしています。
「なみのり」は、1行目にセットする文字列で、様々な動作を制御しています。
● なみのり実行
// 取得した文字列でGoogle検索
execmacro "naminori.mac"; //なみのり実行
#handleNami = hidemaruhandle(0); //handleを取得
「なみのり」を呼び出して作成したURLのページを取得しています。
ただ、
「なみのり」自体の精度がそれほど良くないので、ときどきエラーが発生します。その場合は手動でエラーダイアログを閉じる必要があります。
これは今後の課題になっています。
● Webページから目的のデータを抜き出し
// 取得したファイルから件数を抜き出し
searchdown "約<b>.*</b>件中",regular;
if ( result ){
right 4; #x1 = x; #y1 = y;
searchdown "</b>"; #x2 = x; #y2 = y;
$line_res = gettext(#x1,#y1,#x2,#y2); //文字列取り込み
}else{
searchdown "results <b>1-";
if ( result ){
right 13; #x1 = x; #y1 = y;
searchdown "</b>"; #x2 = x; #y2 = y;
$line_res = gettext(#x1,#y1,#x2,#y2); //文字列取り込み
}else{
searchdown "一致するページは見つかりませんでした";
if ( result ){
$line_res = "0";
}else{
$line_res = "err";
}
}
}
取得したページの中から、ヒット数を抜き出しています。
「Google」では、ヒット数によって表示方法が異なっているので、ちょっと複雑な抜き出し方法になっています。
この部分は、
「Google」自体表示方法が変わると書き換えないと行けない部分になるので、少々管理が面倒です。
使用するときには、きちんと動作するか事前に確認する必要があるでしょう。
● 終了部分(Webとは無関係)
// 開いたウィンドウを閉じる
setactivehidemaru #handleRes; //結果書き出しウィンドウへ移動
closehidemaruforced #handleNami; //なみウィンドウを強制終了
// 件数、URLを書き出し
gofileend; //行の最後に移動
insert $line_res+"\t"+$line_txt+"\n";
Label01:
setactivehidemaru #handleNow; //現在ウィンドウへ移動
movetolineno 1,#a+1; //任意の位置へのカーソル移動
down; //カーソル下移動
if ( !result )break; //最終行であれば終了
#a = #a+1;
}
//----------------------------------------------------------------------
// 終了処理
setactivehidemaru #handleRes; //結果書き出しウィンドウへ移動
closehidemaruforced #handleWork; //作業ウィンドウを強制終了
//------------------------------------------------------------------------------
// copyright (c)2000 Masakazu Yanai
以上でWeb連携プログラムは終了です。実際に実行した場合の結果サンプルを以下に示しておきます。
● 検索ページ
http://www.yahoo.co.jp/
http://www.goo.ne.jp/
http://www.infoseek.co.jp/
http://www.lycos.co.jp/
http://www2s.biglobe.ne.jp/~yanai/
● 結果ページ
===== Google Hit 結果出力 =====( http://www.google.com/intl/ja/ )=====
33900 http://www.yahoo.co.jp/
7320 http://www.goo.ne.jp/
2480 http://www.infoseek.co.jp/
2390 http://www.lycos.co.jp/
149 http://www2s.biglobe.ne.jp/~yanai/