Skip to main content

reader is a Python feed reader library.

It is designed to allow writing feed reader applications without any business code, and without depending on a particular framework; in MVC terms, you’d probably call it a fat model.

build status (GitHub Actions) code coverage documentation status PyPI status checked with mypy code style: black

reader allows you to:

  • retrieve, store, and manage Atom, RSS, and JSON feeds

  • mark articles as read or important

  • add arbitrary tags/metadata to feeds and articles

  • filter feeds and articles

  • full-text search articles

  • get statistics on feed and user activity

  • import / export feeds as OPML

  • automatically discover feeds in web pages

  • write plugins to extend its functionality

  • skip all the low level stuff and focus on what makes your feed reader different

…all these with:

  • a stable, clearly documented API

  • excellent test coverage

  • fully typed Python

What reader doesn’t do:

  • depend on a web framework

  • have an opinion of how or where you use it

In addition, reader provides:

  • an optional web application based on Flask, Bootstrap, and htmx

  • an optional command-line interface

Documentation: reader.readthedocs.io

Usage:

$ pip install reader
>>> from reader import make_reader
>>>
>>> reader = make_reader('db.sqlite')
>>> reader.add_feed('http://www.hellointernet.fm/podcast?format=rss')
>>> reader.update_feeds()
>>>
>>> entries = list(reader.get_entries())
>>> [e.title for e in entries]
['H.I. #108: Project Cyclops', 'H.I. #107: One Year of Weird', ...]
>>>
>>> reader.mark_entry_as_read(entries[0])
>>>
>>> [e.title for e in reader.get_entries(read=False)]
['H.I. #107: One Year of Weird', 'H.I. #106: Water on Mars', ...]
>>> [e.title for e in reader.get_entries(read=True)]
['H.I. #108: Project Cyclops']
>>>
>>> reader.update_search()
>>>
>>> for e in reader.search_entries('year', limit=3):
...     title = e.metadata.get('.title')
...     print(title.value, title.highlights)
...
H.I. #107: One Year of Weird (slice(15, 19, None),)
H.I. #52: 20,000 Years of Torment (slice(17, 22, None),)
H.I. #83: The Best Kind of Prison ()

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

reader-3.26.tar.gz (1.9 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

reader-3.26-py3-none-any.whl (693.2 kB view details)

Uploaded Python 3

File details

Details for the file reader-3.26.tar.gz.

File metadata

  • Download URL: reader-3.26.tar.gz
  • Upload date:
  • Size: 1.9 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for reader-3.26.tar.gz
Algorithm Hash digest
SHA256 2b6ad65066f46c35609e047681771632856cb9f82b705e1c9614d83a066f28d9
MD5 778b12e4c2c8817808e529297433256b
BLAKE2b-256 2b0784a8900ca9d324efa57fc23f82f1b36685526b895e7010d5782bb3e5e0a7

See more details on using hashes here.

Provenance

The following attestation bundles were made for reader-3.26.tar.gz:

Publisher: publish.yaml on lemon24/reader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file reader-3.26-py3-none-any.whl.

File metadata

  • Download URL: reader-3.26-py3-none-any.whl
  • Upload date:
  • Size: 693.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for reader-3.26-py3-none-any.whl
Algorithm Hash digest
SHA256 ffefb748152e6d88a38b80452fbe12c40c7fdaa5d2d181464a641612744e6d38
MD5 399843dc896e672974e69980a4b44092
BLAKE2b-256 cf22c8fcf5b534c4d6e1eeab41c93493e7685a89c7ec6f7ed2f0c1993d2567ab

See more details on using hashes here.

Provenance

The following attestation bundles were made for reader-3.26-py3-none-any.whl:

Publisher: publish.yaml on lemon24/reader

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

3.26

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page