2013年01月13日

[Python]feedparserライブラリでRSSフィードを簡単に処理

RSSなどのフィードをPythonプログラムから簡単に利用する方法をご紹介しよう。
今回は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) の二箇所だ。
まあ解説は特に不要であろう。
posted by 寄り道退屈男 at 23:20 | Comment(0) | TrackBack(0) | Python
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。
この記事へのトラックバックURL
http://blog.sakura.ne.jp/tb/61439868
※ブログオーナーが承認したトラックバックのみ表示されます。
※言及リンクのないトラックバックは受信されません。

この記事へのトラックバック