Web連携プログラム


 このページでは「秀丸エディタ」でWebと連携したマクロを作る方法を、実例を挙げて紹介していきます。

 Webと連携したマクロには、拙作の「なみのり」を使います。

 今回例として使うのは、「Google Hit」というマクロです。

 検索エンジンの「Google」に、特定の単語がいくつ登録されているかを調べるためのマクロです。

 私は、特定のURLがいくつ「Google」に登録されているかで、そのWebサイトの価値を調べようと思いこのマクロを作りました。

 「Google」自体が「そのWebサイトがどれくらいの場所からリンクを張られているか」ということで価値の大小を決める検索エンジンなので、この価値判断方法に適するわけです。

 では、以下に実際のマクロを挙げて解説をしていきます。

● マクロをダウンロード  「Google Hit」(3KB)
 マクロ自体が「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/
        

Cronus Crown(クロノス・クラウン)のトップページに戻る
(c)2002-2024 Cronus Crown (c)1997-2024 Masakazu Yanai
ご意見・お問い合わせはサイト情報 弊社への連絡までお願いします
個人情報の取り扱い、利用者情報の外部送信について