Jun 4, 2005

Google Sitemaps

Google Sitemapsとかっていうサービスが始まったのでこのブログでも対応してみました。以下にテンプレートがあります。

Niall Kennedy's Weblog: Google Sitemaps using Movable Type

このテンプレートをこのまま使う分には問題はないのですが、ただカスタマイズすることを考えるとちょっと注意しなくてはならない点があります。

ひとつはSitemap Protocolを読むと、lastmod要素のタイムスタンプはISO 8601形式(Date and Time Formats)で指定することになっていますが、実際にはISO 8601形式のすべての時刻表現を受け付けてくれるわけではないようです。私の気が付いた限りでは、以下のようにLocal Time + Time Zone offset (2005-06-04T09:24:00+09:00)で指定しようとすると、Google Sitemapsは「Invalid Date」と判定するようです。

<lastmod>
<$MTEntryModifiedDate format="%Y-%m-%dT%H:%M:%S"$><$MTBlogTimezone$>
</lastmod>

KennedyのテンプレートにあるようにUTC時間を指定していれば問題ありませんし、Googleが早々にこの問題を解決する可能性があります。

もうひとつは、MTBlogURLに対する更新時間(lastmod)も表示させようと思って以下のように書くと、現在時刻の9時間前の時刻を返してしまう点です。

<url>
<loc><$MTBlogURL encode_xml="1"$></loc>
<lastmod><$MTDate utc="1" format="%Y-%m-%dT%H:%M:%SZ"$></lastmod>
<priority>1.0</priority>
</url>

これはMTDateにutc="1"オプションを与えた場合に2回オフセット補正されてしまう(正確にはgmtimeに対してlocaltimeからUTCへの補正を行ってしまう)ために起きます。Local Time Zoneが+09:00の場合には9時間前の時刻になります。例えば時刻が「2005-06-04T21:09:00+09:00」であったとするとそのUTC時刻は「2005-06-04T12:09:00Z」ですが、これを誤って9時間補正して「2005-06-04T03:09:00Z」を返してしまうということです。

この問題はMovable Type日本語版3.17以降では修正されています。

このバグを修正するには以下のパッチを当てる必要があるでしょう。

--- lib/MT/Template/Context.pm.bak	2005-01-13 15:47:37.000000000 +0900
+++ lib/MT/Template/Context.pm	2005-06-04 22:56:13.000000000 +0900
@@ -1444,6 +1444,7 @@
     my @ts;
     if ($args->{utc}) {
 	@ts = gmtime $t;
+	delete $args->{utc};
     } else {
 	@ts = offset_time_list($t, $_[0]->stash('blog_id'));
     }

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com