Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lemon24/reader
A Python feed reader library.
https://github.com/lemon24/reader
atom-feed feed feed-aggregator feed-reader json-feed library podcast podcast-aggregator podcast-client podcast-fetcher podcatcher python python-library rss rss-aggregator rss-feed rss-reader twitter
Last synced: 3 months ago
JSON representation
A Python feed reader library.
- Host: GitHub
- URL: https://github.com/lemon24/reader
- Owner: lemon24
- License: bsd-3-clause
- Created: 2017-12-24T15:36:43.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2024-03-10T21:46:57.000Z (11 months ago)
- Last Synced: 2024-03-10T23:40:29.889Z (11 months ago)
- Topics: atom-feed, feed, feed-aggregator, feed-reader, json-feed, library, podcast, podcast-aggregator, podcast-client, podcast-fetcher, podcatcher, python, python-library, rss, rss-aggregator, rss-feed, rss-reader, twitter
- Language: Python
- Homepage: https://reader.readthedocs.io
- Size: 5.38 MB
- Stars: 408
- Watchers: 11
- Forks: 20
- Open Issues: 40
-
Metadata Files:
- Readme: README.rst
- Changelog: CHANGES.rst
- Contributing: CONTRIBUTING.rst
- License: LICENSE
Awesome Lists containing this project
- my-awesome - lemon24/reader - feed,feed,feed-aggregator,feed-reader,json-feed,library,podcast,podcast-aggregator,podcast-client,podcast-fetcher,podcatcher,python,python-library,rss,rss-aggregator,rss-feed,rss-reader,twitter pushed_at:2025-01 star:0.5k fork:0.0k A Python feed reader library. (Python)
README
.. begin-intro
**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... end-intro
|build-status-github| |code-coverage| |documentation-status| |pypi-status| |type-checking| |code-style|
.. |build-status-github| image:: https://github.com/lemon24/reader/workflows/build/badge.svg
:target: https://github.com/lemon24/reader/actions?query=workflow%3Abuild
:alt: build status (GitHub Actions).. |code-coverage| image:: https://codecov.io/gh/lemon24/reader/branch/master/graph/badge.svg?token=lcLZaSFysf
:target: https://codecov.io/gh/lemon24/reader
:alt: code coverage.. |documentation-status| image:: https://readthedocs.org/projects/reader/badge/?version=latest&style=flat
:target: https://reader.readthedocs.io/en/latest/?badge=latest
:alt: documentation status.. |pypi-status| image:: https://img.shields.io/pypi/v/reader.svg
:target: https://pypi.python.org/pypi/reader
:alt: PyPI status.. |type-checking| image:: http://www.mypy-lang.org/static/mypy_badge.svg
:target: http://mypy-lang.org/
:alt: checked with mypy.. |code-style| image:: https://img.shields.io/badge/code%20style-black-000000.svg
:target: https://github.com/psf/black
:alt: code style: black.. begin-features
*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
* 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 PythonWhat *reader* doesn't do:
* provide an UI
* provide a REST API (yet)
* depend on a web framework
* have an opinion of how/where you use itThe following exist, but are optional (and frankly, a bit unpolished):
* a minimal web interface
* that works even with text-only browsers
* with automatic tag fixing for podcasts (MP3 enclosures)* a command-line interface
.. end-features
Documentation: `reader.readthedocs.io`_
.. _reader.readthedocs.io: https://reader.readthedocs.io/
Usage:
.. begin-usage
.. code-block:: bash
$ pip install reader
.. code-block:: python
>>> 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 ().. end-usage