GoogleAppEngineでRSS配信したい
移転しました。
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
description がテキスト(エンティティーエンコードされた HTML が使えます。例をご覧下さい。)を含んでいるなら、その item はそれ自身で完結するかもしれません。 ...
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] + "</a>" + "]]>" tweet.content = content tweet.save()
次実装したい機能
- 自分に必要なURLだけを、抽出したい。(foursquereとか, 写真とか省きたい)
- 一日のURLをまとめて, Evernoteに送りたい
- 誰が共有したのかをわかるようにしたい
- 同じURLが共有されている場合、その共有数と名前がわかるようにしたい