2009年2月10日(火)

teeter totterでサイトマップXMLを出力

SEO的にはSitemaps.org準拠のサイトマップXMLが欲しいところ。
しかし、teeter totterにはその機能がない。
そこで、過去記事のとおり自前でRSS2.0を出力しているため、不要だったteeter totterのRSS2.0を出力するサブルーチン(mt_archive.plの"sub xml_archive")を次のとおり書き換え、sitemap.xmlを出力するようにした。

# -------------------------------------------------------------------------
# パブリッシュ (sitemap.xmlファイル) 非UTF-8用はコメントアウト
# -------------------------------------------------------------------------

sub xml_archive {
open(OUT,">$set_data1[2]sitemap.xml") || &error("Write Error: sitemap.xml");
# if ($set_data2[41] eq "0" && $jc_check eq "pm") {
print OUT "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
# $code ="utf8";
# } elsif ($set_data2[41] eq "1") {
# print OUT "<?xml version=\"1.0\" encoding=\"euc-jp\" ?>\n";
# $code ="euc";
# } else {
# print OUT "<?xml version=\"1.0\" encoding=\"shift-jis\" ?>\n";
# $code ="sjis";
# }
print OUT "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"";
print OUT " xmlns:dc=\"http://purl.org/dc/elements/1.1/\">\n";
print OUT "<url>\n<loc>$set_data1[3]</loc>\n<priority>1.0</priority>\n";
$rss_title = $set_data1[1];
# &$jcnv(\$rss_title, $code, "utf8");
print OUT "<dc:title>$rss_title</dc:title>\n<dc:language>ja</dc:language>\n";
print OUT "<dc:subject>Weblog</dc:subject>\n<dc:format>text/html</dc:format>\n";
open(IN,"$set_data1[6]") || &error("Open Error : $set_data1[6]");
$top = <IN>;
$i=0;
$flag=0;
while (<IN>) {
($no,$exno,$reno,$category,$year,$mon,$mday,$wday,$time,$name,$title,$comment,$url,
$mail,$host,$pw,$tail,$w,$h,$ws,$hs,$skin,$album,$copy) = split(/<>/);
if (!$exno && !$copy) { $i++; }
if ($i < 1) { next; }
if (!$exno && !$copy) {
if ($name eq "99") { $name = $set_data1[0]; }
# &$jcnv(\$name, $code, "utf8");
# &$jcnv(\$title, $code, "utf8");
$xml_item = "$xml_item<url>\n<loc>$set_data1[5]$year\_$mon\_$mday\_$no.$set_data2[32]</loc>\n";
$xml_item = "$xml_item<priority>0.9</priority>\n<dc:title>$title</dc:title>\n";
($d_hour,$d_min) = split(/&/,$time);
$mon = sprintf("%02d", $mon);
$mday = sprintf("%02d", $mday);
if ($category eq "" || $set_data5[$category] == 0) {
$category = "";
} else {
$category = "$set_data6[$category]";
# &$jcnv(\$category, $code, "utf8");
}
$xml_item = "$xml_item<dc:creator>$name</dc:creator>\n<dc:language>ja</dc:language>\n";
$xml_item = "$xml_item<dc:subject>$category</dc:subject>\n<dc:format>text/html</dc:format>\n";
$xml_item = "$xml_item<lastmod>$year-$mon-$mday\T$d_hour\:$d_min\:00+09:00</lastmod>\n</url>\n";
if ($flag == 0) {
$lastupdate = "$year-$mon-$mday\T$d_hour\:$d_min\:00+09:00";
$flag=1;
}
}
}
close(IN);
print OUT "<lastmod>$lastupdate</lastmod>\n</url>\n";
print OUT "$xml_item</urlset>\n";
close(OUT);
chmod (0666,"$set_data1[2]sitemap.xml");
&indexjs_archive;
}

Perlを弄るのはもうコリゴリだと思っていたが、見てのとおりちょこっと書き換えただけで動作したから不思議。
まぁカテゴリ別ファイルや月別ファイルが抜けているのは、ご愛嬌という事で。
本当はその問題点をクリアするためにarchivesディレクトリのHTMLファイルを再帰的に一覧取得して出力する別プログラムを作ろうとも思ったが、途中まで書いてて動作しないから諦めた。
ローカルで試した時は動作したのに...orz

Tags:

Posted by 不法電波 at 00:57
Categories: teeter totter | 楽天
Comments | Trackbacks

TopBottom

Trackbacks

Trackback URL:
http://ventura.pv.land.to/tt-cgi/tt_tb.cgi/123

TopBottom

Comments






保存しますか? Yes No


(URL以外は入力必須、過少コメント・連続投稿は不可)

TopBottom

< 私が悪ぅござんした | Home