Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

An RSS/Atom feed parsing layer for lxml.objectify in Python

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 feedreader
Octocat-spinner-32 .gitignore
Octocat-spinner-32 LICENSE
Octocat-spinner-32 MANIFEST.in
Octocat-spinner-32 README.rst
Octocat-spinner-32 setup.py
README.rst

Feedreader

A universal feed parser designed to operate on top of the lxml interface.

This is a VERY rough readme, and this project is very early in development. It however, is used to power Lifestrm.com.

Our mission was simple:

  • Don't write an XML parser (we use lxml)
  • Keep it transparent, but allow easy access to underlying objects.
  • Support as many services as possible, and make accessing their media easy.

Features

  • RSS 2.0 (incl. media enclosures)
  • Atom 1.0 (incl. link enclosures)

Installation

Usage

There are several methods which are usable to parse a feed:

from feedreader.parser import from_url
parsed = from_url('http://www.domain.com/rss.xml')

from feedreader.parser import from_string
parsed = from_string(open('my.rss', 'r').read())

from feedreader.parser import from_file
parsed = from_file(open('my.rss', 'r'))

Once you have initialized the parser, you will be able to access supported elements via a natural property syntax:

>>> parsed.title
My feed title
>>> parsed.link
http://www.domain.com/rss.xml
>>> parsed.published
datetime.datetime(2009, 8, 13, 2, 53, 11, 867908)

For the entries in a feed, you may use the entries accessor:

>>> parsed.entries
[<Entry ...>, <Entry ...>, <Entry ...>]

And each entry also supports similar common attributes:

>>> parsed.entries[0].title
My Article Name
>>> parsed.entries[0].link
http://www.domain.com/my-article-name

Keeping with our goals of allowing access to underlying XML, feedreader is a simple proxy. What this means is that while we provide accessors for many common attributes across feeds, you can still get at any XML element fairly easily:

>>> parsed.myUnsupportedXMLTag
(Fill me in with whatever lxml would return)
Something went wrong with that request. Please try again.