このブログをRSSで配信しようとした時のメモ。
http://djangoproject.jp/doc/ja/1.0/ref/contrib/syndication.html Djangoには配信用のフレームワークがついてきます。 今回はこれを使って…と思ったのですが、 説明がよくわからなかったので今回は自分で作ってみました。 いつかちゃんとやってみます。
RSSといってもHTMLの変形みたいなものですし、 作る際にはそこまで苦労しませんでした。
まずはtemplateから
<?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns="http://purl.org/rss/1.0/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:lang="ja"> <channel rdf:about="http://kimihiro-n.appspot.com/rss.xml"> <title>Pistatium Blog</title> <link>http://kimihiro-n.appspot.com//</link> <description>プログラミング関連の個人的メモ、成果などをまとめてます。</description> <dc:language>ja</dc:language> <dc:creator>kimihiro-n</dc:creator> <dc:date>{%now "Y-m-d\TH:i:sO"%}</dc:date> </channel> {%for blog in blogs%} {% if book.public %} <item rdf:about="http://kimihiro-n.appspot.com{% url blog.views.show blog.key.id %}"> <title>{{blog.title}} - Pistatium Blog</title> <link>http://kimihiro-n.appspot.com{% url blog.views.show blog.key.id %}</link> <description> {{blog.body}} {% if book.more %} <a href="http://kimihiro-n.appspot.com{% url blog.views.show blog.key.id %}">Read More..</a> {% endif %} </description> <dc:date>{{blog.datetime|date:"Y-m-d\TH:i:sO"}}</dc:date> </item> {% endif %} {%endfor%} </rdf:RDF>
特記すべき所といえば日付の指定の仕方だけでしょうか。
{%now "Y-m-d\TH:i:sO"%} {{blog.datetime|date:"Y-m-d\TH:i:sO"}}
こんな感じでフォーマットを揃えてあげます。 タイムゾーンが上手く設定できてないのが今後の課題…。
次にviewを書きます。
def rss(request): q = models.Blog.all().order('-datetime') return render_to_response('blog/rss.xml', { 'books': q ,},mimetype="application/rss+xml")
日付を揃えて出力してあげるだけです。 minetypeをrender_to_responseに指定してあげれば、 Content-typeを上手いことやってくれます。 これをやらないとブラウザで見た時にHTMLと解釈されて酷いことに…。
最後にブログのHTMLのメタタグに追加してあげれば完了です。
<link rel="alternate" type="application/rss+xml" title="Pistatium Blog" href="http://kimihiro-n.appspot.com/rss.xml" />