Feeds¶
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¶
Available at 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
then.
Example usage:
>>> import time
>>> import xmlrpc.client
>>> client = xmlrpc.client.ServerProxy("https://test.pypi.org/pypi")
>>> serial = client.changelog_last_serial()
>>> serial
4601224
>>> while serial == client.changelog_last_serial():
... time.sleep(5)
>>> recentchanges = client.changelog_since_serial(serial)
>>> for entry in recentchanges:
... print(entry)
['openllm', '0.4.33.dev3', 1701280908, 'new release', 4601225]
['openllm', '0.4.33.dev3', 1701280908, 'add py3 file openllm-0.4.33.dev3-py3-none-any.whl', 4601226]
You could also request GET /simple/
, and record the ETag
, and
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.