#!/usr/local/bin/jperl5 -Lsjis # # 野毛の飲食店街データベース → HTML 自動生成ツール # # Programmed by Masayuki Koba, 1999. # $list_file = "/home/www/contents/shop/database/shop_database.txt"; $output_dir = "/home/www/contents/shop"; @reserved = ("店名", "よみがな", "店コード", "分類", "分類コード", "郵便番号", "住所(県〜区)", "住所(町〜)", "地図", "電話", "FAX", "E-mail", "営業時間", "ラストオーダー", "定休日", "コメント", "おすすめ", "価格帯", "備考", "グルメ批評", "グルメ批評URL", "関連リンク", "写真"); ($program = $0) =~ s%.*/%%; while ($#ARGV >= 0) { if ("$ARGV[0]" eq "-f") { shift; if ($#ARGV < 0) { usage(); } $list_file = "$ARGV[0]"; shift; } elsif ("$ARGV[0]" eq "-o") { shift; if ($#ARGV < 0) { usage(); } $output_dir = "$ARGV[0]"; shift; } else { usage(); } } #open(DATABASE, "nkf -s $list_file |") || die "can't open \"$list_file\""; open(DATABASE, "$list_file") || die "can't open \"$list_file\""; $is_cache = 0; while () { chop; if (/^$/) { if ($is_cache) { flush(); %database = (); $is_cache = 0; } } elsif (!/^#/) { ($keyword, $description) = (/^(.*):(.*)$/); $database{$keyword} = "$description"; $is_cache = 1; } } if ($is_cache) { flush(); } #------- sub usage { printf("Usage: $program [-f ] [-o ]\n"); exit(1); } sub flush { $keyword = "店コード"; if ("$database{$keyword}" ne "") { $filename = "$database{$keyword}.html"; } else { $filename = "unknown.html"; } $linkdir = "All"; output($linkdir, $filename); $keyword = "分類コード"; if ("$database{$keyword}" ne "") { @dirs = split(/ /, $database{$keyword}); foreach $i (0 .. $#dirs) { link_shop($linkdir, $dirs[$i], $filename); } } else { link_shop($linkdir, "misc", $filename); } } sub output { create_dir($_[0]); # open(HTML, "| nkf -s > $output_dir/$_[0]/$_[1]") || die "can't open \"$output_dir/$_[0]/$_[1]\": $!"; open(HTML, ">$output_dir/$_[0]/$_[1]") || die "can't open \"$output_dir/$_[0]/$_[1]\": $!"; make_html(); close(HTML); } sub link_shop { create_dir($_[1]); unlink("$output_dir/$_[1]/$_[2]"); link("$output_dir/$_[0]/$_[2]", "$output_dir/$_[1]/$_[2]") || die "can't link \"$output_dir/$_[0]/$_[2]\" and \"$output_dir/$_[1]/$_[2]\""; } sub create_dir { if (!opendir(OUTDIR, "$output_dir/$_[0]")) { mkdir("$output_dir/$_[0]", 0777) || die "can't mkdir \"$output_dir/$_[0]\": $!"; } else { closedir(OUTDIR); } } sub make_html { printf(HTML "\n"); printf(HTML "\n"); make_head(); printf(HTML "\n"); make_body(); printf(HTML "\n"); make_footer(); printf(HTML "\n"); } sub make_head { printf(HTML "\n"); printf(HTML "\n"); printf(HTML "\n"); $keyword = "店名"; if ("$database{$keyword}" ne "") { $shopname = "$database{$keyword}"; } else { $shopname = "(不明)"; } printf(HTML "%s\n", $shopname); printf(HTML "\n"); } sub make_body { printf(HTML "\n"); printf(HTML "\n"); printf(HTML "
\n"); printf(HTML "\n"); printf(HTML "

\n"); printf(HTML "\n"); make_table(); printf(HTML "\n"); printf(HTML "

\n"); printf(HTML "\n"); make_notice(); printf(HTML "
\n"); printf(HTML "\n"); printf(HTML "\n"); } sub make_table { printf(HTML "\n"); # 最初の方に表示する予約語の項目の内容を表にする $keyword = "店名"; if ("$database{$keyword}" ne "") { printf(HTML " \n"); printf(HTML " \n", $keyword); printf(HTML " \n", $database{$keyword}); printf(HTML " \n"); } if (is_yomigana_output()) { make_nomal_table_record("よみがな"); } make_nomal_table_record("分類"); make_address(); make_nomal_table_record("電話"); make_nomal_table_record("FAX"); make_nomal_table_record("E-mail"); make_nomal_table_record("営業時間"); make_nomal_table_record("ラストオーダー"); make_nomal_table_record("定休日"); make_nomal_table_record("コメント"); make_nomal_table_record("おすすめ"); make_nomal_table_record("価格帯"); $keyword = "地図"; if ("$database{$keyword}" ne "") { printf(HTML " \n"); printf(HTML " \n", $keyword); $map_link = sprintf("http://www.noge.com/map/%s.html", $database{$keyword}); printf(HTML " \n", $map_link, $database{$keyword}); printf(HTML " \n"); } # グルメ批評 # 予約語以外の項目を表にする foreach $keyword (sort keys %database) { if (!is_reserved_keyword($keyword) && ("$database{$keyword}" ne "")) { printf(HTML " \n"); printf(HTML " \n", $keyword); printf(HTML " \n", $database{$keyword}); printf(HTML " \n"); } } # 最後の方に表示する予約語の項目の内容を表にする make_nomal_table_record("備考"); $keyword = "関連リンク"; if ("$database{$keyword}" ne "") { printf(HTML " \n"); printf(HTML " \n", $keyword); printf(HTML " \n", $database{$keyword}, $database{$keyword}); printf(HTML " \n"); } $keyword = "写真"; if ("$database{$keyword}" ne "") { printf(HTML " \n"); printf(HTML " \n", $keyword); printf(HTML " \n"); printf(HTML " \n"); } printf(HTML "
【%s】%s
【%s】野毛マップ %s
【%s】%s
【%s】%s
【%s】\n"); @images = split(/ /, $database{$keyword}); foreach $i (0 .. $#images) { printf(HTML " \"%s\",\n", $images[$i], $images[$i], $shopname); } printf(HTML "
\n"); } sub make_nomal_table_record { $keyword = $_[0]; if ("$database{$keyword}" ne "") { printf(HTML " \n"); printf(HTML " 【%s】\n", $keyword); printf(HTML " %s\n", $database{$keyword}); printf(HTML " \n"); } } sub make_address { $address = ""; $keyword = "郵便番号"; if ("$database{$keyword}" ne "") { $address = sprintf("〒%s", $database{$keyword}); } $keyword = "住所(県〜区)"; if ("$database{$keyword}" ne "") { if ("$address" ne "") { $new_address = sprintf("%s %s", $address, $database{$keyword}); $address = $new_address; } else { $address = $database{$keyword}; } } $keyword = "住所(町〜)"; if ("$database{$keyword}" ne "") { $new_address = sprintf("%s%s", $address, $database{$keyword}); $address = $new_address; } if ("$address" ne "") { printf(HTML " \n"); printf(HTML " 【住所】\n"); printf(HTML " %s\n", $address); printf(HTML " \n"); } } sub is_reserved_keyword { foreach $i (0 .. $#reserved) { if ("$_[0]" eq "$reserved[$i]") { return 1; } } return 0; } sub is_yomigana_output { $keyword = "よみがな"; if ("$database{$keyword}" ne "") { if (!($database{$keyword} =~ /*$/)) { return 1; } } return 0; } sub make_notice { printf(HTML "\n"); printf(HTML "※ ここに記載されている内容についてご意見、ご要望等がございましたら、\n"); printf(HTML "webmaster\@noge.com までご連絡ください。\n"); printf(HTML "\n"); } sub make_footer { printf(HTML "Copyright © 2000 野毛地区データベース作成チーム. All rights reserved.
\n"); printf(HTML "E-mail: webmaster\@noge.com
\n"); }