GoogleAppEngineでRSS配信したい
更新日:2021.01.24
作成日:2012.01.28
Twitterのリストから取得した情報をRSSとして配信したい。
参考にしたページ
from django.utils import feedgenerator
from google.appengine.ext import webapp
from google.appengine.ext.webapp import util
from google.appengine.ext import db
from google.appengine.ext.webapp import template
class Rss(webapp.RequestHandler):
def get(self):
# フィード作成
feed = feedgenerator.Rss201rev2Feed(
title = "extweet",
link = "RSSのURL",
description = "RSSの説明",
language = u"ja")
tweets = db.GqlQuery("SELECT * FROM Tweet ORDER BY date DESC")
for tweet in tweets:
feed.add_item(
title = tweet.content,
link = tweet.urls[0],
description = tweet.content,
pubdate = tweet.date)
# RSS 文字列にする
rss = feed.writeString("utf-8")
self.response.headers['Content-Type']='text/xml; charset=utf-8'
self.response.out.write(rss)
def main():
application = webapp.WSGIApplication([('/rss',Rss)],
debug=True)
util.run_wsgi_app(application)
if __name__ == '__main__':
main()
途中省略・・・
if lasttweet != None:
cursor = tweepy.Cursor(api.list_timeline,owner=OWNER,slug=SLUG,since_id=lasttweet.id,include_entities='true').items(100)
else:
cursor = tweepy.Cursor(api.list_timeline,owner=OWNER,slug=SLUG,include_entities='true').items(100)
for tweets in cursor:
tweeturls = []
for e in tweets.entities['urls']:
tweeturls.append(e['expanded_url'])
if len(tweeturls) > 0:
if lasttweet != None:
if tweets.id > lasttweet.id:
tweet = Tweet()
tweet.id = tweets.id
tweet.urls = tweeturls
tweet.title = tweets.text
tweet.content = tweets.text
tweet.save()
self.response.out.write(tweets.text)
なぜかこれだと、Bylineで読み込んだときに、空白のページになってしまった。
RSSの仕様を見ると、エンティティエンコードされたHTMLが使えますとのこと。 もしかして、これかと思って、CDATAタグを加えてみると、なんだかうまく行ったみたい。。。
んー、何が原因だったんだろう?
- RSS 2.0 Specification 日本語訳 - futomi’s CGI Cafe
- Encoding & item-level descriptions (RSS 2.0 at Harvard Law)
CDATAタグを埋め込んだ
tweet = Tweet()
tweet.id = tweets.id
tweet.urls = tweeturls
tweet.title = tweets.text
content = "<![CDATA[" + tweets.text + "<a href=\"" + tweeturls[0] + "\">" + tweeturls[0] + "" + "]]>"
tweet.content = content
tweet.save()
次実装したい機能
- 自分に必要なURLだけを、抽出したい(foursquereとか、写真とか省きたい)
- 一日のURLをまとめて、Evernoteに送りたい
- 誰が共有したのかをわかるようにしたい
- 同じURLが共有されている場合、その共有数と名前がわかるようにしたい