Skip to main content

Event Registry / NewsAPI.ai Python SDK

eventregistry is a Python package for accessing the news data available in Event Registry through its API. It can be used to search for articles or events using a large set of filters, like keywords, concepts, categories, sources, sentiment, date, etc., to follow the feed of new content and to compute summaries (top sources, concepts, sentiment, ...) of the matching content. Details about the News API are available on the landing page of the product.

Installation

The package requires Python 3.9 or newer. Install it with pip:

pip install eventregistry

To update an existing installation to the latest version:

pip install eventregistry --upgrade

To check the installation, run python and type:

import eventregistry
print(eventregistry.__version__)

When updating to a new major version, see the migration guide for the changes that can require an update of your code.

API key

To make requests you need an API key, which you get for free by registering - it is shown on your dashboard. The key can be provided in one of these ways (the first one found is used):

  1. as the apiKey argument: EventRegistry(apiKey = "YOUR_API_KEY")
  2. in the EVENTREGISTRY_API_KEY environment variable
  3. in a settings.json file with the content { "apiKey": "YOUR_API_KEY" }, stored in the .eventregistry folder of your home directory (~/.eventregistry/settings.json)

With the environment variable or the settings file the key stays out of your code and you can simply create the instance with EventRegistry(). See Authorization for details.

Examples

Iterate over the articles: the newest articles from US based sources, with positive sentiment, that mention "George Clooney" or "Sandra Bullock"

from eventregistry import *
er = EventRegistry(apiKey = YOUR_API_KEY)

# get the USA URI
usUri = er.getLocationUri("USA")    # = http://en.wikipedia.org/wiki/United_States

q = QueryArticlesIter(
    keywords = QueryItems.OR(["George Clooney", "Sandra Bullock"]),
    minSentiment = 0.4,
    sourceLocationUri = usUri,
    dataType = ["news", "blog"])

# obtain at most 500 newest articles or blog posts; remove maxItems to get all
for art in q.execQuery(er, sortBy = "date", maxItems = 500):
    print(art["dateTime"], art["title"])

Search by concepts instead of keywords: business articles from the last month related to Microsoft or Google, in any language

from eventregistry import *
# allowUseOfArchive = False limits the search to the last month of data (and uses fewer tokens)
er = EventRegistry(apiKey = YOUR_API_KEY, allowUseOfArchive = False)

q = QueryArticlesIter(
    conceptUri = QueryItems.OR([er.getConceptUri("Microsoft"), er.getConceptUri("Google")]),
    categoryUri = er.getCategoryUri("news business"))

for art in q.execQuery(er, sortBy = "date", maxItems = 500):
    print(art["title"])

Search for the latest events related to Star Wars

from eventregistry import *
er = EventRegistry(apiKey = YOUR_API_KEY)

q = QueryEvents(keywords = "Star Wars")
q.setRequestedResult(RequestEventsInfo(sortBy = "date", count = 50))   # request event details for latest 50 events

# get the full list of 50 events at once
print(er.execQuery(q))

Combine conditions with a complex query: articles about electric vehicles or batteries, published in January 2024 by German or French sources, that don't mention Tesla

from eventregistry import *
er = EventRegistry(apiKey = YOUR_API_KEY)

electricVehicleUri = er.getConceptUri("electric vehicle")   # = "http://en.wikipedia.org/wiki/Electric_vehicle"
batteryUri = er.getConceptUri("electric battery")           # = "http://en.wikipedia.org/wiki/Electric_battery"
teslaUri = er.getConceptUri("Tesla")                        # = "http://en.wikipedia.org/wiki/Tesla,_Inc."
germanyUri = er.getLocationUri("Germany")                   # = "http://en.wikipedia.org/wiki/Germany"
franceUri = er.getLocationUri("France")                     # = "http://en.wikipedia.org/wiki/France"

# the query in the JSON format of the complex query language (a python dict or a string with the JSON object)
query = {
    "$query": {
        "conceptUri": {
            "$or": [electricVehicleUri, batteryUri]
        },
        "sourceLocationUri": {
            "$or": [germanyUri, franceUri]
        },
        "dateStart": "2024-01-01",
        "dateEnd": "2024-01-31",
        "$not": {
            "conceptUri": teslaUri
        }
    }
}
q = QueryArticlesIter.initWithComplexQuery(query)
for art in q.execQuery(er, sortBy = "date", maxItems = 100):
    print(art["title"])

Handle the errors

Failed requests raise exceptions derived from EventRegistryError. Requests that fail with a temporary error (connection problem, timeout, server error) are first repeated automatically (3 times by default, see the repeatFailedRequestCount parameter). Requests rejected because too many requests are made at the same time (status 429) are repeated until they succeed, so an iteration over the results is not interrupted.

from eventregistry import *
er = EventRegistry(apiKey = YOUR_API_KEY)

q = QueryArticlesIter(keywords = "Tesla", lang = "eng")
try:
    for art in q.execQuery(er, sortBy = "date", maxItems = 100):
        print(art["title"])
except AccessError as ex:
    # status 401 or 403: invalid API key, no more tokens or a disabled account
    print("Check your API key and tokens:", ex.responseText)
except QueryError as ex:
    print("The server could not execute the query:", ex)
except EventRegistryError as ex:
    print("The request failed with status %s: %s" % (ex.statusCode, ex))

Documentation

The documentation is on the wiki pages:

Other resources:

  • Examples folder - runnable examples of the most used features. Each file contains several examples as functions; python QueryArticlesExamples.py lists them and python QueryArticlesExamples.py <name> runs one.
  • API reference - all the classes and methods, generated from the docstrings
  • Change log - the changes in each version
  • Interactive Jupyter notebook - examples that you can view and modify in the browser

The package contains type hints (py.typed), so editors and type checkers know the arguments of the classes and methods.

Running the tests

Clone the repository and install the package with the test dependencies:

pip install -e ".[test]"

The tests need no API key and no network access:

python -m unittest eventregistry.tests.TestOfflineUnit eventregistry.tests.TestRequestPayloads eventregistry.tests.TestQueryParamsBase

Reporting issues

Please report bugs and suggestions on the GitHub issues page. Include the version of the package (eventregistry.__version__), a short piece of code that reproduces the problem (without your API key) and the full error message. For questions about your account, tokens or the data, use the contact options on newsapi.ai.

Data access and usage restrictions

Event Registry is a commercial service but it allows also unsubscribed users to perform a certain number of operations. Non-paying users are not allowed to use the obtained data for any commercial purposes (see the details on our Terms of Service page) and have access to only last 30 days of content. In order to avoid these restrictions please contact us about the available plans.

Metadata

Release files for eventregistry 11.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for eventregistry 11.0
File Size Uploaded
eventregistry-11.0.tar.gz 73.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for eventregistry 11.0
File Interpreter ABI Platform
eventregistry-11.0-py3-none-any.whl Python 3 none any Details

Total release size: 154.2 kB

Release files / eventregistry-11.0.tar.gz

Download URL eventregistry-11.0.tar.gz
Size 73.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8a474db6d0acb2e1cbd4ac8d1781658ca1d41cf80202757e42359781de89369a
BLAKE2b-256 checksum
How to use checksums
5d83f8eb6fdbe29724726ca55e2cf7278acfabcd01be6178cbce788297a4849b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release files / eventregistry-11.0-py3-none-any.whl

Download URL eventregistry-11.0-py3-none-any.whl
Size 81.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
04845327b82aabf5a3f87a441710c1ab1ca4ac858ddcf283963d4d7cbc0afec9
BLAKE2b-256 checksum
How to use checksums
66515ade65a19b74096380968a187d040216eba19cd6e7082c5c855b6355d3da
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.5

Release history Release notifications | RSS feed

This release

11.0 This release

2 release files

10.0

2 release files

9.1

1 release file

9.0

1 release file

8.12

1 release file

8.11

1 release file

8.10

1 release file

8.9

1 release file

8.8

1 release file

8.7

1 release file

8.6.1

1 release file

8.6

1 release file

8.5.1

1 release file

8.5.0

1 release file

8.4.0

1 release file

8.3.0

1 release file

8.2.1

1 release file

8.2.0

1 release file

8.1.0

1 release file

8.0.0

1 release file

6.7.0

1 release file

6.6.0

1 release file

6.5.1

1 release file

6.5.0

1 release file

6.4.3

1 release file

6.4.2

1 release file

6.4.1

1 release file

6.4.0

1 release file

6.3.1

1 release file

6.3.0

1 release file

6.2.2

1 release file

6.2.1

1 release file

6.2.0

1 release file

6.1.6

1 release file

6.1.5

1 release file

6.1.4

1 release file

6.1.3

1 release file

6.1.2

1 release file

6.1.1

1 release file

6.1.0

1 release file

6.0.10

1 release file

6.0.9

1 release file

6.0.8

1 release file

6.0.7

1 release file

6.0.6

1 release file

6.0.5

1 release file

6.0.4

1 release file

6.0.3

1 release file

6.0.2

1 release file

6.0.1

1 release file

6.0

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page