reader


Namereader JSON
Version 3.15 PyPI version JSON
download
home_pageNone
SummaryA Python feed reader library.
upload_time2024-11-10 22:45:53
maintainerNone
docs_urlNone
authorlemon24
requires_python>=3.10
licenseBSD-3-Clause
keywords atom cdf feed rdf rss json feed web feed podcast feed reader feed aggregator
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            .. 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 Python

What *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 it

The 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

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "reader",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "atom, cdf, feed, rdf, rss, json feed, web feed, podcast, feed reader, feed aggregator",
    "author": "lemon24",
    "author_email": null,
    "download_url": "https://files.pythonhosted.org/packages/d1/93/a5ba89a9f966ba9c582f020c28f9d11148e66e9682dd91555063fe2dae2f/reader-3.15.tar.gz",
    "platform": null,
    "description": ".. begin-intro\n\n**reader** is a Python feed reader library.\n\nIt is designed to allow writing feed reader applications\nwithout any business code,\nand without depending on a particular framework.\n\n.. end-intro\n\n\n|build-status-github| |code-coverage| |documentation-status| |pypi-status| |type-checking| |code-style|\n\n\n.. |build-status-github| image:: https://github.com/lemon24/reader/workflows/build/badge.svg\n  :target: https://github.com/lemon24/reader/actions?query=workflow%3Abuild\n  :alt: build status (GitHub Actions)\n\n.. |code-coverage| image:: https://codecov.io/gh/lemon24/reader/branch/master/graph/badge.svg?token=lcLZaSFysf\n  :target: https://codecov.io/gh/lemon24/reader\n  :alt: code coverage\n\n.. |documentation-status| image:: https://readthedocs.org/projects/reader/badge/?version=latest&style=flat\n  :target: https://reader.readthedocs.io/en/latest/?badge=latest\n  :alt: documentation status\n\n.. |pypi-status| image:: https://img.shields.io/pypi/v/reader.svg\n  :target: https://pypi.python.org/pypi/reader\n  :alt: PyPI status\n\n.. |type-checking| image:: http://www.mypy-lang.org/static/mypy_badge.svg\n  :target: http://mypy-lang.org/\n  :alt: checked with mypy\n\n.. |code-style| image:: https://img.shields.io/badge/code%20style-black-000000.svg\n  :target: https://github.com/psf/black\n  :alt: code style: black\n\n\n.. begin-features\n\n*reader* allows you to:\n\n* retrieve, store, and manage **Atom**, **RSS**, and **JSON** feeds\n* mark articles as read or important\n* add arbitrary tags/metadata to feeds and articles\n* filter feeds and articles\n* full-text search articles\n* get statistics on feed and user activity\n* write plugins to extend its functionality\n* skip all the low level stuff and focus on what makes your feed reader different\n\n...all these with:\n\n* a stable, clearly documented API\n* excellent test coverage\n* fully typed Python\n\nWhat *reader* doesn't do:\n\n* provide an UI\n* provide a REST API (yet)\n* depend on a web framework\n* have an opinion of how/where you use it\n\nThe following exist, but are optional (and frankly, a bit unpolished):\n\n* a minimal web interface\n\n  * that works even with text-only browsers\n  * with automatic tag fixing for podcasts (MP3 enclosures)\n\n* a command-line interface\n\n.. end-features\n\n\nDocumentation: `reader.readthedocs.io`_\n\n.. _reader.readthedocs.io: https://reader.readthedocs.io/\n\n\nUsage:\n\n.. begin-usage\n\n.. code-block:: bash\n\n    $ pip install reader\n\n.. code-block:: python\n\n    >>> from reader import make_reader\n    >>>\n    >>> reader = make_reader('db.sqlite')\n    >>> reader.add_feed('http://www.hellointernet.fm/podcast?format=rss')\n    >>> reader.update_feeds()\n    >>>\n    >>> entries = list(reader.get_entries())\n    >>> [e.title for e in entries]\n    ['H.I. #108: Project Cyclops', 'H.I. #107: One Year of Weird', ...]\n    >>>\n    >>> reader.mark_entry_as_read(entries[0])\n    >>>\n    >>> [e.title for e in reader.get_entries(read=False)]\n    ['H.I. #107: One Year of Weird', 'H.I. #106: Water on Mars', ...]\n    >>> [e.title for e in reader.get_entries(read=True)]\n    ['H.I. #108: Project Cyclops']\n    >>>\n    >>> reader.update_search()\n    >>>\n    >>> for e in reader.search_entries('year', limit=3):\n    ...     title = e.metadata.get('.title')\n    ...     print(title.value, title.highlights)\n    ...\n    H.I. #107: One Year of Weird (slice(15, 19, None),)\n    H.I. #52: 20,000 Years of Torment (slice(17, 22, None),)\n    H.I. #83: The Best Kind of Prison ()\n\n.. end-usage\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "A Python feed reader library.",
    "version": "3.15",
    "project_urls": {
        "Changes": "https://reader.readthedocs.io/en/latest/changelog.html",
        "Documentation": "https://reader.readthedocs.io/",
        "Issue tracker": "https://github.com/lemon24/reader/issues",
        "Source Code": "https://github.com/lemon24/reader"
    },
    "split_keywords": [
        "atom",
        " cdf",
        " feed",
        " rdf",
        " rss",
        " json feed",
        " web feed",
        " podcast",
        " feed reader",
        " feed aggregator"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "128eac58fdb16c8321e07f04245c1c7dc9ef23ebc3684253244547df1ee387a1",
                "md5": "85ce2393fc9884469eea5d07f9ff32de",
                "sha256": "8b44aa1dc9cd105ed1baa59956a2c9e113919f9a2734d0f99892a19040e0f1ee"
            },
            "downloads": -1,
            "filename": "reader-3.15-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "85ce2393fc9884469eea5d07f9ff32de",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 247804,
            "upload_time": "2024-11-10T22:45:50",
            "upload_time_iso_8601": "2024-11-10T22:45:50.073356Z",
            "url": "https://files.pythonhosted.org/packages/12/8e/ac58fdb16c8321e07f04245c1c7dc9ef23ebc3684253244547df1ee387a1/reader-3.15-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "d193a5ba89a9f966ba9c582f020c28f9d11148e66e9682dd91555063fe2dae2f",
                "md5": "48ccc1d28113ab7463343e3e2a7acf6c",
                "sha256": "39b7c04d3cbd8b1ed2523f073f23557f19b4c5b086a92bc82ed0daefdd67763a"
            },
            "downloads": -1,
            "filename": "reader-3.15.tar.gz",
            "has_sig": false,
            "md5_digest": "48ccc1d28113ab7463343e3e2a7acf6c",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 1484477,
            "upload_time": "2024-11-10T22:45:53",
            "upload_time_iso_8601": "2024-11-10T22:45:53.017448Z",
            "url": "https://files.pythonhosted.org/packages/d1/93/a5ba89a9f966ba9c582f020c28f9d11148e66e9682dd91555063fe2dae2f/reader-3.15.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-11-10 22:45:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "lemon24",
    "github_project": "reader",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "reader"
}
        
Elapsed time: 0.39817s