使用Python动态生成Google App Engine网站地图
我有一个网站,想为它创建一个动态的网站地图。我的网站使用的是Google App Engine,编程语言是Python和Django。
我之前用PHP开发了另一个网站,那个网站的sitemap.xml文件可以通过我在Apache服务器的.htaccess文件中写的重写规则访问。
RewriteRule (.*)\.xml(.*) $1.php$2 [nocase]
这个.xml文件是这样生成的:
$sql_select ="SELECT titulo, title, data_insercao FROM livros l ORDER BY titulo ASC";
现在我想知道,在我的情况下(GAE + Python),有没有什么方法可以让访问者在输入www.mydomain.com/sitemap.xml时,从服务器获取一个我用Python动态生成的.xml文件?
$result = mysql_query($sql_select) or die(mysql_error());
while($row = mysql_fetch_array($result)) {
$titulo = $row['titulo'];
$title = $row['title'];
$data = $row['data_insercao'];
$sql_comentario ="SELECT data FROM comentarios WHERE livros_title = '" . $title . "' order by data desc LIMIT 0 , 1";
$result_comentario = mysql_query($sql_comentario) or die(mysql_error());
$row_comentario = mysql_fetch_array($result_comentario);
if($row_comentario){
$data = $row_comentario['data'];
}
$pieces = explode(" ", $data);
$data = $pieces[0];
$url_product = 'http://www.sinopsedolivro.net/livro/' . $title . '.html';
echo
' <url>
<loc>'.$url_product.'</loc>
<lastmod>'.$data.'</lastmod>
<changefreq>weekly</changefreq>
<priority>0.8</priority>
</url>
';
}
3 个回答
我也遇到过同样的问题,于是用Python写了一个库,可以动态生成网站地图,从那以后我一直在使用它。
pip install sitemap
使用方法:
from sitemap import Url, Urlset
urlset = Urlset()
url = Url('https://www.example.com/', changefreq='weekly')
urlset.add_url(url)
# urlset.to_string()
urlset.write_xml('sitemap.xml')
更多信息可以在这里找到,项目链接在GitHub上:https://github.com/cxmcc/sitemap-python
这是Nick Johnson写的一篇关于网站地图的好文章,文章链接是Sitemaps。
文章讲的是一种在部署后生成网站地图的方法,另外一种方法是定期生成网站地图,比如每天生成一次,可以用cron来实现。
`- description: daily sitemap refresh
url: /cron_generate_sitemap
schedule: every day 02:00
timezone: Pacific/Auckland`
如果你把网站地图存储在数据存储中,那么访问速度会非常快,这对你的搜索引擎优化(SEO)排名有帮助。
我建议你按照Nick Johnson提供的模型来存储网站地图,例如:
`class StaticContent(db.Model):
"""Container for statically served content.
The serving path for content is provided in the key name.
"""
body = db.BlobProperty()
content_type = db.StringProperty(required=True)
last_modified = db.DateTimeProperty(required=True, auto_now=True)
indexed = db.BooleanProperty(required=True, default=True)
`
当然,你可以让你的应用程序对任何网址返回你想要的内容。只需要把你的控制器设置为 /sitemap.xml,然后在里面写代码来输出你的xml内容。别忘了把返回的内容类型设置成正确的值。
如果你在使用django框架,可能需要看看这个链接:http://docs.djangoproject.com/en/dev/topics/http/urls/