博客系统自动生成Sitemap网址地图

博客系统自动生成Sitemap网址地图为了让网站内容更高的收录,建立网址地图告诉搜索引擎哪些网页想要被收录。


我的博客系统是自己写的,我需要不定时更新sitemap增加新内容,所以用代码生成sitemap是必要的,这样不用每次编辑。

sitemap就是一个xml文本,放在网站空间的根目录下,引擎蜘蛛会自动读取。

sitemap写法格式如下:

<?xml version=”1.0″ encoding=”UTF-8″?>
  < urlset xmlns=http://www.google.com/schemas/sitemap/0.9>
  <url>
    <loc>http://www.neesoo.cn/archives/71.html</loc>
    <lastmod>2009-03-07</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
  </url>
  <url>
    <loc>http://www.neesoo.cn/archives/71.html</loc>
    <lastmod>2009-03-06</lastmod>
    <changefreq>yearly</changefreq>
    <priority>0.2</priority>
  </url>
  </urlset>
loc网址(必填项),lastmod最后一次编辑的时间,changefreq跟新频率,priority权重。


<loc>www.example1.com</loc>该页的网址。该值必须少于256个字节(必填项)。格式为<loc>您的url地址</loc>

<lastmod>2010-01-01</lastmod>该文件上次修改的日期(选填项)。格式为<lastmod>年-月-日</lastmod>

<changefreq> always </ changefreq >页面可能发生更改的频率(选填项) 。有效值为:always、hourly、daily、weekly、monthly、yearly、never

<priority>1.0</priority >此网页的优先级。有效值范围从 0.0 到 1.0 (选填项) 。0.0优先级最低、1.0最高。

我的方法:建立一个仅供我自己使用的webservice,从数据库中提取我所有的博客列表,代码生成我网址地图保存文件到我的根目录。不定时调用webservice自动生成网址地图。


部分代码如下:


        [WebMethod]
        public string GenerateSitemap(string PassWord)
        {
            if (PassWord != "XXXXXXXXX")
            {
                return "非正规途径调用!!!!";
            }
            else
            {
                DataSet MyBlogs = new DataSet();
                string conStr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\storage\\users.accdb";
                using (OleDbConnection con = new OleDbConnection(conStr))
                {
                    string cmdStr = "select [blogUrl] from blog";
                    using (var cmd = new OleDbCommand(cmdStr, con))
                    {
                        con.Open();
                        OleDbDataAdapter s = new OleDbDataAdapter(cmdStr, conStr);
                        s.Fill(MyBlogs);
                        con.Close();
                    }
                }
                urlset urlsets = new urlset();
                urlsets.urls = new List<Url>();
                for (int x = 0; x < MyBlogs.Tables[0].Rows.Count; x++)
                {
                    Url blog = new Url()
                    {
                        Loc = MyBlogs.Tables[0].Rows[x][0].ToString(),
                        Priority = 1,


                    };
                    urlsets.urls.Add(blog);
                };

                string strUploadPath = HttpContext.Current.Server.MapPath("") + "\\sitemap.xml";
                using (FileStream objfilestream = new FileStream(strUploadPath, FileMode.Create, FileAccess.ReadWrite))
                {
                    XmlSerializer xmlSearializer = new XmlSerializer(typeof(urlset));
                    xmlSearializer.Serialize(objfilestream, urlsets);
                }
                return "ok";
            }

        }
其中Xml类的序列化定义。



        public class urlset
        {
            //[XmlAttribute("urlset")]
            [XmlElement(ElementName = "url")]
            public List<Url> urls { get; set; }
        }

        public class Url
        {
            //[XmlAttribute("loc")]
            [XmlElement(ElementName = "loc")]
            public string Loc { get; set; }
            //[XmlAttribute("lastmod")]
            [XmlElement(ElementName = "lastmod")]
            public string Lastmod { get; set; }
            //[XmlAttribute("changefreq")]
            [XmlElement(ElementName = "changefreq")]
            public string Changefreq { get; set; }
            //[XmlAttribute("priority")]
            [XmlElement(ElementName = "priority")]
            public int Priority { get; set; }

        }


(the end)

作者:songshizhao 发表于:2017-12-13T07:14:20 访问量:412