English
Atom Login Admin

Seeds of mention

Flaskをつかってsitemap.xmlを自動生成する

lakshmi@cloudysunny14.org
mentioned on Sunday,January 27,2013

sitemap.xmlはGoogleにクローリングしてもらう際に自分のサイトの在処を知らせる目的と効率的にクローリングしてもらう為にも必要である。
今回はそのsitemap.xmlを自動生成する方法について紹介する。
コードは下記の通り。

  • app.py
import os
from jinja2 import Environment, FileSystemLoader

@app.route("/sitemap.xml", methods=["GET"])
def sitemap():
  """Generate sitemap.xml"""
  articles_qry = Articles.query()\
      .filter(Articles.data_status==Articles.POSTED)\
      .order(-Articles.postDate)
  articles = articles_qry.fetch()
  base_dir = os.path.realpath(os.path.dirname(__file__))
  # Configure jinja for internal templates
  env = Environment(
      autoescape=True,
      extensions=['jinja2.ext.i18n'],
      loader=FileSystemLoader(
        os.path.join(base_dir, 'templates')
      )
    )
  url_root = request.url_root[:-1]
  sitemap_xml = env.get_template("sitemap_template.xml").render(
      mentions=mentions, url_root=url_root)
  response= make_response(sitemap_xml)
  response.headers["Content-Type"] = "application/xml"
  return response
  • sitemap_template.xml
<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
    {% for article in articles %}
    <url>
        <loc>{{url_root}}/show_blog?id={{article.key.urlsafe()}}</loc>
        <lastmod>{{article.updatedate|datetimeformat('%Y-%m-%d')}}</lastmod>
        </url>
        {% endfor %}
</urlset>

上記の通りJinja2のテンプレートを使ってXMLを生成するのだが、日付のフォーマットはJinja2 Custom Filtersを使用して行う。

  • custom_filters.py
def datetimeformat(value, format='%A,%B %d,%Y'):
  return value.strftime(format)

これでsitemap.xmlが自動生成されるようになった。
後は、Web Master Tools でsitemapを登録しよう。
じきにGoogleのクローラが来るはずだ。

Comments

Add Comment

Login
This entry was tagged #Flask #Jinja2 #SEO