PyPI offers three RSS feeds, the Newest Packages Feed, the Latest Updates Feed, and the Project Releases Feed. You can also call its APIs to get more details on project activity.
Newest Packages Feed#
Available at https://pypi.org/rss/packages.xml, this feed provides the latest newly created projects on PyPI, including the package name, description and a link to the project page.
Latest Updates Feed#
Available at https://pypi.org/rss/updates.xml, this feed provides the latest newly created releases for individual projects on PyPI, including the project name and description, release version, and a link to the release page.
Project Releases Feed#
https://pypi.org/rss/project/<project_name>/releases.xml for each
project, this feed provides the latest releases for the given project on
PyPI, including the package name and description, release version, and a link
to the release page.
Project and release activity details#
PyPI publishes a “journal” of all project, package, and release
activity (including Owner and Maintainer additions and removals, and
source file and release additions and removals). You can query it with
a mix of Mirroring Support and Simple Project API. Call
changelog_last_serial() (in PyPI’s XML-RPC methods) to get the current
revision of the journal (the last event’s serial ID), then look at
/simple/ to get a list of all packages that currently
exist. Subsequently, you can call
changelog_since_serial(since_serial) with the serial ID you
retrieved, and get the list of all actions that have occurred since
>>> import xmlrpc.client >>> import arrow >>> client = xmlrpc.client.ServerProxy('https://test.pypi.org/pypi') >>> latefeb = arrow.get('2018-02-20 10:00:00') >>> latefeb.timestamp 1519120800 >>> latefebstamp = latefeb.timestamp >>> recentchanges = client.changelog(latefebstamp) >>> len(recentchanges) 7322 >>> for entry in recentchanges: ... if entry == 'twine': ... print(entry, " ", entry, " ", entry) ... ... ... None add Owner brainwane 1519952529 1.10.0 add py2.py3 file twine-1.10.0-py2.py3-none-any.whl 1520023899 1.10.0 new release 1520023899 1.10.0rc1 add py2.py3 file twine-1.10.0rc1-py2.py3-none-any.whl 1520023900 1.10.0rc1 new release 1520023900 1.10.0rc1 add source file twine-1.10.0rc1.tar.gz 1520023902 1.10.0 add source file twine-1.10.0.tar.gz 1520023903 1.10.0 remove file twine-1.10.0.tar.gz 1520024758 1.10.0 remove file twine-1.10.0-py2.py3-none-any.whl 1520024797 1.10.0 remove 1520025270
You could also request
GET /simple/, and record the
then periodically do a conditional HTTP GET to
/simple/ with that
ETag included. A 200 OK response indicates something has been added or
removed; if you get a 304 Not Modified, then nothing has changed.