Mon, September 8, 2008
Jythonを使ったサイトマップインデックスファイルの作成
いままではひとつのディレクトリだけを使ってこのサイト(osima.jp)を作成してきたが、 複数のディレクトリを使ったサイトに作り替えたため、sitemap.xml を各ディレクトリに配置し、 それらへのリンクをルートディレクトリにある sitemap.xml でまとめる方法にした。
そのルートに配置するsitemap.xml を生成するjythonコードを書いたので、ここにメモ。
対象とするサブディレクトリの数が少ないので手動で作成してしても手間は知れているのだが、
日付の記述を毎回書き直すのが結構面倒だな、と思いコード化。
コード sitemapmaker.py
import sys
import java.io as io
import java.lang as lang
import java.util as util
import java.text as text
ENC="UTF-8"
pat = "yyyy-MM-dd";
df=text.SimpleDateFormat(pat)
TODAY=df.format(util.Calendar.getInstance().getTime())
BASEURL="http://osima.jp"
def toUrl( targetDir ):
return BASEURL+"/"+targetDir+"/sitemap.xml.gz"
targetDirList=util.ArrayList()
len=len(sys.argv)
for i in range(len-1):
targetDirList.add(sys.argv[i+1])
fos=io.FileOutputStream("sitemap.xml")
pw=io.PrintWriter( io.OutputStreamWriter(fos,ENC) )
pw.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>")
pw.println("<sitemapindex xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\">")
for targetDir in targetDirList:
toUrl(targetDir)
pw.println("\t<sitemap>")
pw.println("\t\t<loc>"+toUrl(targetDir)+"</loc>")
pw.println("\t\t<lastmod>"+TODAY+"</lastmod>")
pw.println("\t</sitemap>")
pw.println("</sitemapindex>")
pw.close()
fos.close()
実行
$ jython sitemapmaker.py blog mynotebook
結果
<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<sitemap>
<loc>http://osima.jp/blog/sitemap.xml.gz</loc>
<lastmod>2008-09-08</lastmod>
</sitemap>
<sitemap>
<loc>http://osima.jp/mynotebook/sitemap.xml.gz</loc>
<lastmod>2008-09-08</lastmod>
</sitemap>
</sitemapindex>