LeNgHoSt的小窝

I did it my way, ‘Cause it’s my life!

2009年09月26日

简单的自动添加(更新)sitemap的php代码

之前的那个免费小说网 – http://www.cobeta.com收录一直不理想,几乎没什么流量。因为内容太庞大,原站搜索引擎收录有6位数,我曾经试过用软件生成sitemap,但速度太慢,跑一个小时才近千个链接。后来就有了这个想法,干脆让网站自动更新sitemap文件,于是上网搜索了php操作xml文件的相关教程,最后用PHP5自带的SimpleXML实现了该功能。

什么是 SimpleXML?
SimpleXML 是 PHP 5 中的新特性。在了解 XML 文档 layout 的情况下,它是一种取得元素属性和文本的便利途径。
与 DOM 或 Expat 解析器相比,SimpleXML 仅仅用几行代码就可以从元素中读取文本数据。

SimpleXML 可把 XML 文档转换为对象,比如:
元素 – 被转换为 SimpleXMLElement 对象的单一属性。当同一级别上存在多个元素时,它们会被置于数组中。
属性 – 通过使用关联数组进行访问,其中的下标对应属性名称。
元素数据 – 来自元素的文本数据被转换为字符串。如果一个元素拥有多个文本节点,则按照它们被找到的顺序进行排列。

当执行类似下列的基础任务时,SimpleXML 使用起来非常快捷:
读取 XML 文件
从 XML 字符串中提取数据
编辑文本节点或属性
不过,在处理高级 XML 时,比如命名空间,最好使用 Expat 解析器或 XML DOM。


以下代码实现向已有sitemap.xml文件中添加或更新内容。
如果网站内容很多,网址多了,sitemap.xml会变的很大,不知道读取写入速度会不会太慢。Google官方规定sitemap.xml里最多50000条地址,文件大小不得超过10MB。
P.S.我的免费小说网内容应该远远超过这个限制了,不过现在流量还很少,估计一时半会还到不了50000条地址,呵呵,到时候再改进下代码看看。

$xml=simplexml_load_file('sitemap.xml');
$update=0;
$xml_url=0;
foreach($xml->url as $xml_url){
    
if((string)$xml_url->loc==$xmlurl){
        
$update=1;
        
break;
    
}
}
if($update==1)
    
$xml_url->lastmod=date('c');
else{
    
$xml_url=$xml->addChild('url');
    
$xml_url->addChild('loc',$xmlurl);
    
$xml_url->addChild('lastmod',date('c'));
    
$xml_url->addChild('changefreq','daily');
    
$xml_url->addChild('priority','0.2');
}
$fp=fopen('sitemap.xml','w');
$xmlfile=$xml->asXML();
$xmlfile=str_replace('><','>'."\r\n".'<',$xmlfile);
fwrite($fp,$xmlfile);
fclose($fp);

生成的sitemap.xml文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
<loc>http://cobeta.cn/xiaoshuo/anshi/1874467.htm</loc>
<lastmod>2009-09-26T13:27:59+04:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>http://www.cobeta.cn/xiaoshuo/.../1539038.htm</loc>
<lastmod>2009-09-26T13:28:01+04:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>http://www.cobeta.cn/xiaoshuo/.../1539039.htm</loc>
<lastmod>2009-09-26T13:28:10+04:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
<url>
<loc>http://cobeta.cn/xiaoshuo/.../1874471.htm</loc>
<lastmod>2009-09-26T13:28:12+04:00</lastmod>
<changefreq>daily</changefreq>
<priority>0.2</priority>
</url>
</urlset>
标签:, , ,

相关日志

发表评论