This is a SiteLog of Easun's WebBlog.
我的网站的 SiteMap 原来一直采用的是 MT 模板的方式 ,参考 Google Sitemaps using Movable Type , 这样的好处是我的 Website 是基于 MT 的。会随着新Blog 的发布自动更新。
然而,也有不好的方面,这个 MT 模板只收录blog的单篇文章地址。而且,我准备把 旧站 迁移过来,这样的话,这些原来网页的地址就被排除到了 SiteMap 外。
怎么办呢? 想起了老本行,Perl 。Perl 擅长文本处理,写个小的CGI程序遍历一下整个 WebSite 并不是困难的事情。
代码是标准的 Perl 快餐式代码,简历但有效。
代码共享如下:
#!/usr/bin/perl -w
#
# SIteMap Maker By Easun(路杨)
# http://easun.org
#
use CGI();
my $cgi= new CGI;
use CGI::Carp qw(fatalsToBrowser); #打开浏览器检错,不需要请删除之。
#WebSite的变量设置
my $mydir ='/home/www/easun'; #没有'/'
my $url ='http://easun.org/'; #后面有'/'
my $xmlfile ='/home/www/easun/sitemap.xml'; #目标print $cgi->header;
unlink $xmlfile; #先删除旧文件方便生成新的。
open LOG, ">>$xmlfile";
print LOG <<XMLHEAD;
<?xml version="1.0" encoding="UTF-8"?>
<urlset
xmlns="http://www.google.com/schemas/sitemap/0.84"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.google.com/schemas/sitemap/0.84
http://www.google.com/schemas/sitemap/0.84/sitemap.xsd">
XMLHEAD&dodir($mydir,$url);
print LOG '</urlset>'."\n";
close LOG;print 'That is all OK!';
exit;sub dodir
{
my ($mydir,$url) =@_;$url = $mydir.'/' unless $url;
opendir(DIR, $mydir);
my @files = readdir(DIR);
close(DIR);
print '<ul>';
for (0 .. $#files)
{
my $name = $files[$_];
next if $name eq '.';
next if $name eq '..';
# 我的siteMap不想收录动态地址,如果你想收录,请修改下面的这句
next if $name =~ /^\.ht|\.pl$|\.pm$|\.cgi$|\.php$|\.asp$/i;
# 一些特殊目录也不想收录
next if $name eq 'static';if (-d $mydir.'/'.$name) {&dodir($mydir.'/'.$name,$url.$name.'/'); next;};
my $mtime = xmltime ((stat($mydir.'/'.$name))[9]);
my $printname = $name eq 'index.html' ? '':$name;
# 开始当前文件
print LOG '<url>'."\n";
print LOG ' <loc>'.$url.$printname.'</loc>'."\n".' <priority>0.5</priority>'."\n".' <lastmod>'.$mtime.' </lastmod>'."\n";
print LOG '</url>'."\n";
# 结束
print '<li>'.$url.$printname.'<br />--On '.$mtime.' </li>';}
print '</ul>';
}sub xmltime
{
my $time =shift;
my ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = gmtime ($time);
sprintf ('%04d-%02d-%02dT%02d:%02d:%02dZ', $year + 1900, $mon + 1, $mday, $hour, $min,$sec);
}
1;
代码很简单,存成 sitemap.cgi 放在网站能执行 Perl_CGI 的目录,权限设置为 755,运行之。
SiteMap.xml 顺利生成。以后要是网站有了更新,重新运行一次就OK了。
关于SiteMap的一些资料,记录在下,供大家参看
果然是自己动手丰衣足食挖~~~嘿嘿~~
呵呵,还行。回家了。
咦……wood后面多了个小人儿~~~貌似资料页面呢~~~忽然冒出来的,嘿嘿~~
PS 也该回去了呢~~~晚安~~:)
这个东西,注意上面有个"登陆",到那里申请一个帐号,以后就不用输入了。而且也会有这个头像。
PS:默认的不好看,换一个。
那个……速度真够可观的。。-_-|||
00:10……汗。。。
貌似老哥单位零点就断网的……周末例外么~~~
周五,周六晚上不断。
PS:那个的好处就是能把你的身份认证下来而已。
那个……木有明白呀……
有没有白痴可以听得懂的说法?
Ok,谢谢路杨,先Google书签了,日后再改:)