GAEでdjangoを使用してfeed配信する方法


とりあえず日々のプログラミングで壁にぶち当たったところなどを忘れないようにメモ代わりとして日記を更新していくことにした。

google app enginedjangoを使用しているのだが、djangoにはfeedを生成するフレームワークも用意されているらしい。
日本語documentを読んでもよくわからない。
なんだか高水準フレームワークと低水準フレームワークが用意されているようなんだけど高水準フレームワークは読んでても何が起こっているのかわからなかったので低水準フレームワークを使用することにした。

views.py

import models
from django.utils import feedgenerator

f = feedgenerator.Rss201rev2Feed(
	title=u"ホームページのタイトル",
		link=u"ホームページのULR",
		description=u"説明",
		language=u"ja")

def add_feed(*request):
	global f
	#feedにitemを追加
	entry = models.entries.all().order('-url')[:1]
	f.add_item(
		title = entry.title,
		link = entry.url,
		description = entry.about)
	return render_to_response('feed.xml', {'feed':f.writeString('utf-8')})


feed.xml

{{feed}}

上記ソースを見ていただければわかると思いますが、フレームワークを使用したというよりは普通にxmlファイルを生成しているようなものです…doc読んでもわからないのでいろいろやっていたらこんなソースになってしまった。反省。


以下解説(というより確認?

f = feedgenerator.Rss201rev2Feed

rss2.0での配信方法。
atomとかはRss201rev2FeedをAtom1Feedなどに変更すればできる


ブログシステムなどでfeedを配信する場合は日記をpostする時点でadd_feedを一緒に実行すると
feed.xml


	<a class="keyword" href="http://d.hatena.ne.jp/keyword/hoge">hoge</a>
	hoge
	hoge

というitemが追加され、feedを配信することができる。
もしかするとこれは間違った利用方法なのかもしれない…というか間違ってるように思えるけどこれしか考えつきませんでした。。。

話は変わってしまうけどapp.ymalに

- url: /feed
  script: crowler.views.py
  login: admin

と書いてURL直入力による実行を防ごうとしたのだけどなぜかできない…書き方間違えてるのかな?
外部から実行されるとカオスになってしまうので今は引数に入っている値によって内部実行かどうかを判断させてるんだけどなんか気持ちわるいぞ…!