Written 12/5/98
infoseek.js
このスクリプトは、更新されたあるいは新規に作成されたページを Infoseek に登録するプログラムです。
以前私は検索ページでは goo を愛用していました。 Infoseek はうまくヒットするんですが、表示件数が10件というのがネックでした。 ところが Infoseek も goo と同じように最大100件表示できるようになり、 俄然 Infoseek が優位に立ちました(ポータル化はどうでもいい)。
そこで Infoseek にURL登録してみましたが、 手で入力するのはめんどう。 それでこのスクリプトを作りました。
このスクリプトでページ登録してあなたのサイトもアクセス倍増させましょう。
Infoseek登録URLが変更されました(99/6)。
(↓修正済み)
    infoseek.lzh (4kB)
 
ふつう、webページ作成者はローカルにwebと同じディレクトリ構造を 作っているかと思いますが、 そのディレクトリを指定して、レジストリから前回の登録時間を取得し、 その時間以降に更新されたHTMLファイル名をリストアップ、 それと同じファイルがあるはずのURLに変換して、 Infoseekに登録します。 使い方は、 まずレジストリに必要な項目を書き込みます。 適当でいいんですが、たとえば、
    HKCU\Software\aya\infoseek
 
というキーを作り、その下に、
    source、target、date、navoid、p0、p1、…
 
という値を作ります。
source には x:\xxx\aya などとローカルのパスを入力します。
target には http://member.nifty.ne.jp/aya などと それに対応するweb上のディレクトリを入力します。
date には Mon Nov 30 06:58:47 UTC+0900 1998 の形式で時間を入力します。 現在の時刻よりたとえば1週間前の時間を入力するなどとすればいいでしょう。
navoid には登録を避けたいページの数を書きます。
p0、P1、… にはその登録を避けたいURLを http://… とフルで書きます。
これで準備は終わりで、あとは登録したいときにスクリプトを走らせるだけです。

以下、スクリプトです。

var WShell = WScript.CreateObject("WScript.Shell");
var fs = WScript.CreateObject("Scripting.FileSystemObject");
//登録しないページ用のDictionaryオブジェクト
var page_Avoid = new ActiveXObject("Scripting.Dictionary");
//Infoseekの登録CGIのURL(パラメータの固定部分含む)
var header = "http://addurl.infoseek.co.jp:4771/cgi-bin/addurl.cgi?pg=URLAddurl.html&url=";

//レジストリから情報を得る
var source = WShell.RegRead("HKCU\\Software\\aya\\infoseek\\source");
var target = WShell.RegRead("HKCU\\Software\\aya\\infoseek\\target");
var predate = new Date(WShell.RegRead("HKCU\\Software\\aya\\infoseek\\date"));
var nAvoid = WShell.RegRead("HKCU\\Software\\aya\\infoseek\\navoid");
for(var i = 0; i < nAvoid; i++)
    page_Avoid.Add(WShell.RegRead("HKCU\\Software\\aya\\infoseek\\p" + i), 1)

//Internet Explorerを立ち上げる
var IE = WScript.CreateObject("InternetExplorer.Application");
IE.Visible = true;      //いらないはずだけどトラブル対応のため
IE.Width = 680; IE.Height = 660;
IE.GoHome();
WaitLoad();                     //開き終わるまで待つ

//登録すべきURLを得る
var arrURL = new Array();
GetURL(fs.GetFolder(source));

//登録すべきURLを順に登録する
for(i = 0; i < arrURL.length; i++)
    if(!page_Avoid.Exists(arrURL[i])) {
        IE.Navigate(header + arrURL[i]);    //登録
        WaitLoad();             //開き終わるまで待つ
    }

//レジストリに現在の時刻を書きこむ
WShell.RegWrite("HKCU\\Software\\aya\\infoseek\\date",
        (new Date()).toString());

//おしまい(IEを終わったほうがいいかもしれない)

//登録すべきURLを得る
function GetURL(f) {
    var strPath;
    var fc = new Enumerator(f.Files);
    for(; !fc.atEnd(); fc.moveNext())
        //更新日がpredate以降で拡張子がhtmのファイルを探す
        if(fc.item().DateLastModified >= predate) {
            strPath = fc.item().Path;
            if(strPath.substring(strPath.length - 4) == ".htm")
                //ローカルのパスをURLに変換してリストアップする
                arrURL[arrURL.length] = DirToURL(strPath);
        }
    
    var subfc = new Enumerator(f.SubFolders);
    for(; !subfc.atEnd(); subfc.moveNext())
        GetURL(subfc.item())
}

//以下略
ふつうURL登録する場合は登録ページでフォームにURLを書き込みサブミットしますが、 上のようにいきなりCGIを指定したほうが速いです。 本当は、ページが開くのを待たない方が速いですが、 どのタイミングで次の登録を行えばいいのかわからないので 登録完了のページが開くのを待ちます。
上では拡張子htmのファイルだけ登録していますが、 その他を登録したい場合はそれなりにスクリプトを変更してください。

私はこのスクリプトを使うのは月曜日の朝と決めています。 あまり頻繁に登録するのも節操がないかなあとか、 更新したページなら登録しても問題無いかなあとか考えてそうしてます。

ローカルには書きかけのHTMLファイルとかあるかもしれないので、 本当はFTPでweb上のファイルが更新されたかどうかを調べるべきでしょうが、 FTPの方がうまくいってなくて(泣)。 そのうちできるかもしれません。

70行目付近で「原因が特定できないエラー」が出る場合。

    if((new Date()).getTime() >= dstart + 1000)     //79行目
                ↓
    if((new Date()).getTime() >= dstart + 2000)
 
などとするとよくなるかもしれません。 JScript5を使っている人はエラー処理をするとよいでしょう。


表紙