少し RSS コンテンツを豊富にしてみました
RSS 用の HTML テンプレートとして、以下を作成しました。
ここではテンプレート値として article エンティティを利用しています。
<!-- HTML Template for RSS --> <!-- rss.html --> <img src="/static/images/thumbnail/{{ article.site.thumbnail }}" alt="thumbnail" align="left" hspace="15"/> <h3>{{ article.site.name }}</h3> <p>更新日:{{ article.update|date:"Y年n月j日 H:i" }}</p> {% for keyword in article.keywords %} <span><a href="/search?key={{ keyword }}">{{ keyword }}</a>{% if not forloop.last %}, {% endif %}</span> {% endfor %} <br clear="left" />
Google App Engine では、Django の配信フィードフレームワーク feedgenerator を利用してフィード作成が可能です。
# # Python # import os from google.appengine.ext import webapp from google.appengine.api import memcache from django.utils import feedgenerator import models class UpdateRSSHandler(webapp.RequestHandler): def render(self, template_name, template_values={}): ''' HTML レンダリングコンテンツを返す ''' directory = os.path.dirname(__file__) path = os.path.join(directory, 'html', template_name) return template.render(path, template_values) def get(self): self.update_rss() def update_rss(self): title = u'【2ch】キーワードあんてな' link = u'http://keyword-antena.appspot.com/' description = u'2chまとめサイトのアンテナです。キーワードで絞り込み可。' language = u'ja' # フィード作成 (RSS 2.01.) rss2_feed = feedgenerator.Rss201rev2Feed(title=title, link=link, description=description, language=language) # フィード作成 (Atom 1.0.) atom_feed = feedgenerator.Atom1Feed(title=title, link=link, description=description, language=language) articles = # 配信する記事エンティティのリスト for article in articles: render = self.render('rss.html', {'article': article}) # 上記 HTML テンプレート # フィードにエントリ情報を追加 rss2_feed.add_item(title=article.name, link=article.url, description=render) atom_feed.add_item(title=article.name, link=article.url, description=render) # feed インスタンスを文字列化 rss2_text = rss2_feed.writeString('utf-8') rss_model = models.RSS(key_name='rss2.0', text=db.Text(rss2_text, encoding='utf-8')) rss_model.put() atom_text = atom_feed.writeString('utf-8') atom_model = models.RSS(key_name='atom', text=db.Text(atom_text, encoding='utf-8')) atom_model.put() # memcache の更新 memcache.set_multi({'rss2.0': rss_model, 'atom': atom_model}, time=7200) # 2 hours
フィードの存在をブラウザに知らせるには、HTML の タグ内に以下を記述しておく必要があります。
<head> <!-- RSS --> <link rel="alternate" type="application/rss+xml" title="RSS 2.0" href="/feed/index.xml" /> <link rel="alternate" type="application/atom+xml" title="Atom" href="/feed/atom.xml" /> </head>
ここで紹介したフィードは、RSS2.0 (http://keyword-antena.appspot.com/feed/index.xml), Atom (http://keyword-antena.appspot.com/feed/atom.xml) から閲覧できます。