infoseek.lzh (4kB)
ふつう、webページ作成者はローカルにwebと同じディレクトリ構造を
作っているかと思いますが、
そのディレクトリを指定して、レジストリから前回の登録時間を取得し、
その時間以降に更新されたHTMLファイル名をリストアップ、
それと同じファイルがあるはずのURLに変換して、
Infoseekに登録します。
使い方は、
まずレジストリに必要な項目を書き込みます。
適当でいいんですが、たとえば、
HKCU\Software\aya\infoseek
というキーを作り、その下に、
source、target、date、navoid、p0、p1、…
という値を作ります。以下、スクリプトです。
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を指定したほうが速いです。
本当は、ページが開くのを待たない方が速いですが、
どのタイミングで次の登録を行えばいいのかわからないので
登録完了のページが開くのを待ちます。私はこのスクリプトを使うのは月曜日の朝と決めています。 あまり頻繁に登録するのも節操がないかなあとか、 更新したページなら登録しても問題無いかなあとか考えてそうしてます。
ローカルには書きかけのHTMLファイルとかあるかもしれないので、 本当はFTPでweb上のファイルが更新されたかどうかを調べるべきでしょうが、 FTPの方がうまくいってなくて(泣)。 そのうちできるかもしれません。
70行目付近で「原因が特定できないエラー」が出る場合。
if((new Date()).getTime() >= dstart + 1000) //79行目
↓
if((new Date()).getTime() >= dstart + 2000)
などとするとよくなるかもしれません。
JScript5を使っている人はエラー処理をするとよいでしょう。