GAEでdjangoを使用してfeed配信する方法
とりあえず日々のプログラミングで壁にぶち当たったところなどを忘れないようにメモ代わりとして日記を更新していくことにした。
google app engineでdjangoを使用しているのだが、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に
hoge hogehoge
というitemが追加され、feedを配信することができる。
もしかするとこれは間違った利用方法なのかもしれない…というか間違ってるように思えるけどこれしか考えつきませんでした。。。
話は変わってしまうけどapp.ymalに
- url: /feed script: crowler.views.py login: admin
と書いてURL直入力による実行を防ごうとしたのだけどなぜかできない…書き方間違えてるのかな?
外部から実行されるとカオスになってしまうので今は引数に入っている値によって内部実行かどうかを判断させてるんだけどなんか気持ちわるいぞ…!