大量のHTMLファイルを生成する

今回は大量に静的なHTMLファイルを生成するスクリプトです。Webサイトはデータベースと連動して動的にHTMLファイルを生成しますが、様々な状況によりデータベースと連動できなかったり動的にHTMLファイルを生成できない場合があります。このような場合には、想定できる範囲での静的なHTMLファイルを大量に生成することになります。このHTMLファイルは、ページ内の情報のほとんどが同じだが若干違う部分があるというパターンになります。このような処理を手作業で行うと大変です。が、実際には人海戦術で行われてしまうことがあります。
さすがに歳を取っても、そんなことをしていると疲れていまいますので、ここは1つスクリプトを使って手抜きをしましょう。
データベースが動的なページを生成する部分をPhotoshop CSのスクリプトで実現したものが以下のものです。このスクリプトはHTMLファイル内にある特定の文字列(これをメタ文字としています)をカンマ区切りテキスト(CSVファイル。手抜きをしているのでダブルクオーテーションの処理はしていません)で大量に列記された文字列に置換するものです。
メタ文字はmetafile.txtというファイルに書かれています。メタ文字ファイル内には置換元の文字をカンマで区切って書いておきます。これらのメタ文字はCSVファイルでの列に対応するように記述しておきます。以下のようになっていればHTMLファイル内に%SHNの文字があった場合に001に置換されます。同様に%CGLは002、%SCGは003に置換されます。置換が終わったらファイルが保存されます。そしてCSVファイルの次の行のデータを読み込み同様に処理するわけです。2ファイル目では%SHNは「日本語は」に置換され、%CGLは「どうかなあ」、%SCGは「いいのかな?」に置換されることになります。
サンプルでは

CSVデータファイル datafile.csv
メタ文字ファイル metafile.txt
HTMLのひな形ファイル hinagata.html
保存先フォルダ /000

となっています。ファイルはいずれもルートディレクトリ内に置くようになっています。これはファイルのパスなので必要に応じて書き換えます。

文章中だけでなくタグやタグ内の文字も置換できます。工夫次第で、いろいろ応用が効くかと思います。

●メタ文字ファイル
%SHN,%CGL,%SCG

●CSVファイル
001,002,003
日本語は,どうかなあ,いいのかな?

●メタ文字置換スクリプト
csvFile = new File("/datafile.csv");
metaFile = new File("/metafile.txt");
statFile = new File("/hinagata.html");
saveFolder = "/000/";
repMetaText = new Array();
filename = "test";
fCount = 0; // Filename

if (statFile.open("r") == true)
{
hinagata = statFile.read();
if (csvFile.open("r") == true)
{
if (metaFile.open("r") == true)
{
tmp = metaFile.readln();
repMetaText = tmp.split(",");
while(!csvFile.eof)
{
tmp = csvFile.readln();
csvText = tmp.split(",");
txt = hinagata;
for (i=0; i<repMetaText.length; i++)
{
regObj = new RegExp(repMetaText[i],"gim");
txt = txt.replace(regObj, csvText[i]);
}
saveFile = new File(saveFolder+fCount+".html");
saveFile.open("w");
saveFile.write(txt);
saveFile.close();
fCount++;
}
metaFile.close();
}else{
alert("メタファイルが開けません");
}
csvFile.close();
}else{
alert("CSVファイルが開けません");
}
}else{
alert("ひな形ファイルが開けません");
}

●HTMLのひな形
<html>
<head>
<title>Sample</title>
</head>
<body>
これはテストです。<br>
%SHNの文字を置換し、%CGLとか%SCGもまとめて置換されます。<br>
文章中に複数あっても大丈夫です(%SHN)。<br>
タグの中でもOK!<br>
<form name="%CGL">
<input type="text"value="%SCG">
</form>
</body>
</html>

●実行結果(最初の1ファイルのみ)
<html>
<head>
<title>Sample</title>
</head>
<body>
これはテストです。<br>
001の文字を置換し、002とか003もまとめて置換されます。<br>
文章中に複数あっても大丈夫です(001)。<br>
タグの中でもOK!<br>
<form name="002">
<input type="text"value="003">
</form>
</body>
</html>



[サンプルをダウンロード]