[ ホーム | 本の感想 | 好きな作家 | イラスト展示 | Perlは便利 | Javaプログラミング ]

3. IEのお気に入りリストをHTMLファイル化する



第1回に私が使っているPerlはバージョン4ですが、Perlのバージョン5が存在する事に触れました。Perl5についての追加事項ですが、Perl5はオブジェクト指向になっているようです。オブジェクト指向を利用したプログラムも書ける様になっているという事で、オブジェクト指向を知らないとPerl5を使えないという物ではないようです。

それにしても世の中の進みかたの早さに驚きます。ゆっくりPerlを勉強しようと思っていても、どんどん進歩して差が付くばかりです。このページは“Perlは便利”ですから、「便利だなあと楽をするためのページです」からそんなテンポに振り回されません。Perl5は今のところ横目でちらっと見る程度でバージョン4で進めます。

今回は、Windows95かその互換OS上のInternet Explorerのお気に入りのリストをHTMLファイルに変換するスクリプトです。用語を結構いいかげんに使っているので、気になって調べたらスクリプトはワープロや表計算の簡易プログラム言語。または、UNIXのシェルスクリプトやsed、awk、Perlなどのテキスト処理言語のプログラムと書いてありました。Perlで書いたプログラムをスクリプトというのだから、Perlスクリプト、Perlプログラムどちらの言い方でも意味は通じるだろう。

これは前に作ったスクリプトが元になっています。Internet Explorer(以下IE)のバージョン5が出ると知って、これが使えなくならないうちに書いてしまおうと思ったのですが、幾つもバグが含まれていました。バグを直す過程で機能を削って今回のスクリプトになりました。

少なくともIEの3と4では、お気に入りのリストは“C:\Windows\Favorites”にあります。フォルダの構造がそのままディレクトリ構造になって、サイト名のファイルにURLが格納されています。その構造をDOSのDIRコマンドでファイルに落とし、Perlスクリプトで読み込んでHTMLファイルに変換します。DOSのDIRコマンドを使っているので、Windows95かその互換OSでないと動かないのです。Netscape Navigatorのブックマーク(IEのお気に入りに当たる)は、はじめからHTMLファイルの様です。

それでは、バッチファイルから示します。
ファイル名:cvtIEfvr.bat(.batが付けば何でも可)

@echo off
echo "お気に入り"の内容を取り出して Perlスクリプトで処理するためのバッチ
dir /b /s /ogn c:\windows\favorites > file.lst
c:\perl4\jperl cvtIEfvr.pl
この4行を入力してバッチファイルを作って下さい、3行目のc:\windows\favoritesの部分はWindowsやIEのセットアップの状態によっては変わるかも知れません。4行目はPerlインタープリタを呼び出して、これから紹介するPerlスクリプトを呼び出しています。c:\perl4\jperlの部分はあなたのPerlインタープリタのある場所に書き換えて下さい。

それでは、Perlスクリプトを示します。終わりの方に何か余分に見える部分が有りますがそこまで必要です。
ファイル名:cvtIEfvr.pl
−−−−−−−−−−−−−−−− ここから −−−−−−−−−−−−−−−−

# インターネットエクスプローラのお気に入りリストをHTMLファイルにする
# cvtIEfvr.pl
# 使い方:
# 	cvtIEfvr.bat実行後、ブラウザでfavorites.htmlを開く
# 使用ファイル:
#	cvtIEfvr.bat	プログラムを起動するためのバッチファイル
#	file.lst	IEのお気に入りのファイル名一覧
#	favorites.html	お気に入りHTMLファイル
#	C:\Windows\Favorites\*.url	IEの使用しているお気に入りのURLのファイル
#	frame.html	favorites.htmlをフレーム表示するときのHTMLファイル
#	nothing.html	frame.htmlが使う
#

	$dir = 0;

	# c:\windows\favoritesのファイルリストを読み込む
	open(FL1, '<file.lst') || die "Can't open";
	$fno = 0;
	while(<FL1>) {
		$s = $_;
		if ($s=~/\n/) {chop($s);}	# 末尾の改行は取る
#		$s =~ s/\s+$//;		# 末尾の余分なSPACEも取る
		$fl[$fno] = $s;
		$fno++;
	}
	close(FL1);

	# 出力ファイルを作成してHTML文でヘッダーを出力する
	open(HTML, '>favorites.html') || die "Can't open";
	@list = <DATA>;
	for ($k=0; $k<4; $k++) {print HTML "$list[$k]";}	# 0,1,2,3 の4行出力

	# お気に入りを順にオープンしてURLを得る
	for ($j=0; $j<$fno; $j++) {
		$fl2 = $fl[$j];
		$hp = $fl[$j];
		$hp =~ s/C:\\WINDOWS\\Favorites\\//;
		$hp =~ s/.url//;
		# $hpはHomePage名(分類ディレクトリ付き)

		print "Filename:$fl2\n";

		if ($fl2=~/.url$/) {	# 末尾に.urlがないのはディレクトリ

			&puttag;	# ディレクトリの先頭か確認して処理
			open(FL2, "<$fl2") ;	# エラーでも続ける
			$f1 = 0;

			# お気に入りURLのファイルからURLを取りHTMLファイルに出力
			while(<FL2>) {
				if (/URL=/) {
					$f1 = 1;
					$url = $_;
					if ($url=~/\n/) {chop($url);}
					$url =~ s/URL=//;
					print HTML "<A HREF=\"$url\" TARGET=\"homepage\">";
					print HTML "$hp</A><BR>\n";
				}
			}
			close(FL2);
			if ($f1 == 0) {
				# お気に入りURL ファイルオープンでエラー
				print "($fl2 は存在しないか、壊れている)\n";
			}
		} else {
			$dir[$dir] = $hp; $nam[$dir] = "dir".$dir;
			# ディレクトリの処理
			&puttag;	# ディレクトリの先頭か確認して処理
					# 出力するディレクトリ名がサブならタグを探す
			print HTML "フォルダ:<A HREF=\"favorites.html#$nam[$dir]\">$hp<BR></A>\n";
			$dir++;

		} # END-IF
	} # END-FOR $i
	# HTMLファイルの文末の出力
	for ($k=4; $k<7; $k++) {print HTML "$list[$k]";}	# 4,5,6 の3行出力

	close(HTML);
	print "\n\n";
	print "ブラウザで“favorites.html”を開いて下さい\n";
	print "フレームで表示したいなら“frame.html”を開いて下さい\n";

	exit(0);

#-------------------------------------------------------
# ディレクトリの先頭データか確認
# 先頭なら、飛び先ラベル出力しリストから削除
#-------------------------------------------------------
sub puttag {
    LOOP1:
	for ($i=0; $i<@dir;$i++ ) {
#print "HP=($hp)DIR[$i]:($dir[$i]\\)\n";

		#if ($hp=~/^$dir[$i]\\/) {# これでは、/.../ の中で文字列$dir[]の\が消える
		$test = $dir[$i];
		$test =~ s/\\/\\\\/g;	# \を\\に変換
		# ディレクトリの先頭か確認して処理
		if ($hp =~/^$test\\/) {
#print "Hit !! --- ディレクトリ先頭データ\n";
			# ディレクトリの始めのHP名なら飛び先のラベル付ける
			print HTML "<A NAME=\"$nam[$i]\"></A>\n";
			$dir[$i]=""; $nam[$i]="";
			last LOOP1; 
		}
	}
	return(0);
}


__END__
<HTML>
<HEAD><TITLE>Favorites Menu</TITLE></HEAD>
<BODY BGCOLOR=WHITE><FONT SIZE=3 COLOR=RED>「お気に入り」INDEX<BR></FONT>
<FONT SIZE=2>

</BODY>
</HTML>

−−−−−−−−−−−−−−−− ここまで −−−−−−−−−−−−−−−−
このスクリプトをcvtIEfvr.plという名前にして下さい。バッチファイルの4行目の名前と同じなら別の名前でもかまいません。上記のバッチファイルとこのPerlスクリプトのあるディレクトリでバッチファイルを実行するとfavorites.htmlファイルが出来ます。favorites.htmlはフレームで表示するように作られているので、単独でも表示できますが次の二つのHTMLファイルを用意して下さい。
ファイル名:frame.html(.htmlが付けば何でも可)

<HTML>
<HEAD><TITLE>Favorites Menu</TITLE></HEAD>
<FRAMESET ROWS="15%,*">
	<FRAME SRC="favorites.html" NAME="index"  SCROLLING=AUTO>
	<FRAME SRC="nothing.html" NAME="homepage"  SCROLLING=AUTO>
</FRAMESET>
</HTML>


ファイル名:nothing.html

<HTML>
<BODY BGCOLOR=WHITE>
</HTML>
簡単にプログラムの説明をします。#はその後ろから行の終わりまでがコメントとして扱われます。終わりの方の__END__はそれ以下をデータとして扱います。__END__以下にはHTMLタグが書かれていて、スクリプトの最初の方で@list = <DATA>;でデータを配列に読んで、これをfavorites.htmlファイルに書き出しています。sub puttag {はサブルーチンです。呼び出す方は&puttag;で呼び出していますがputtag();と書く方法もあるようです。

全体ではDOSコマンドで作ったリストfile.lstを読み込んで、その名前の終わりに.urlが無い物はフォルダのリストに入れて、.urlが付く物はオープンして中のURL:の記述からそのサイトのURLを得ます。フォルダはそのフォルダの最初のサイト名(又はサブフォルダ)へ飛ぶ様に(その為にフォルダのリストをチェックする)、サイト名はそのURLへ飛ぶようにfavorites.htmlファイルに書き出しています。



[ ホーム | 本の感想 | 好きな作家 | イラスト展示 | Perlは便利 | Javaプログラミング ]
間違いなどお気付きの事がありましたら hirose97@max.hi-ho.ne.jp までメールを下さい。
ご感想もお待ちしています。なお、リンクは自由ですが出来ればお知らせ下さい。