今回はfeedparserというライブラリを使う。
まずは、feedparerライブラリをここからダウンロードする。
今回ダウンロードしたのは feedparser-5.1.3.zip。
これを解凍して、以下の二つのファイルを取り出す。
・feedparser.py
・sgmlib3.py
これらのファイルをパスの通ったところに設置すれば呼び出すことができる。
とりあえず呼び出し元ファイルと同じ階層に置いておくのが無難。
では、このライブラリを利用する方法をサンプルコードで示してみよう。
いろいろライブラリを用意するのが面倒臭かったため、GAE/Pのフレームワークをそのまま流用している。
feedparser_test.py
# -*- coding: utf-8 -*-
import cgi
import os
import logging
import traceback
from google.appengine.api import urlfetch
from google.appengine.ext import webapp, db
from google.appengine.ext.webapp.util import run_wsgi_app
# feedparserを読み込む
import feedparser
#
# ハンドラ
#
class Index(webapp.RequestHandler):
#
# GET
#
def get(self):
# フィードのURL
url = "http://sunabako.sblo.jp/index.rdf"
# URLフェッチしてフィードXMLを取得
try:
result = urlfetch.fetch(url)
except:
raise Exception("urlfetch failed. url:%s" % url)
# ステータスコードが正常(200)でなければ例外を発生
if result.status_code != 200:
raise Exception("can not parse given url:%s status:%s" % (url, result.status_code))
# フィードを解析(dictionaryが返ってくる)
dict = feedparser.parse(result.content)
# フィードが異常なら例外を発生
if dict.bozo == 1:
raise Exception("format illegal.")
#
# フィード内容を出力
#
# フィード名
logging.info(dict.feed.title)
for entry in dict.entries:
# エントリ題名
logging.info(entry.title)
# エントリURL
logging.info(entry.link)
# エントリ更新日時
logging.info(entry.updated)
logging.info(entry.updated_parsed)
application = webapp.WSGIApplication([('/', Index)],
debug=False)
def main():
logging.getLogger().setLevel(logging.DEBUG)
run_wsgi_app(application)
if __name__ == "__main__":
main()
見てのとおり、feedparserの使い方は至ってシンプルである。
大事なところは主に、import feedparser と dict = feedparser.parse(result.content) の二箇所だ。
まあ解説は特に不要であろう。