Skip to main content

API service, library and parser for BBFC

Project description

BBFC API

PyPI PyPI - Python Version PyPI - License Libraries.io dependency status for GitHub repo

Web API and Python library for BBFC.

Public REST API

Mozilla HTTP Observatory Grade Security Headers

Try it now:

$ curl "https://bbfcapi.fustra.uk?title=interstellar"
{"title":"Interstellar","ageRating":"12"}

Use the Python client:

$ pip install bbfcapi[api_sync]
>>> from bbfcapi.api_sync import best_match
>>> best_match("interstellar", 2014)
Film(title='INTERSTELLAR', age_rating=<AgeRating.AGE_12: '12'>)

Project Overview

The project is divided into:

  • "I want to self-host the REST API demoed above"
    • BBFCAPI - Python REST Web API
    • pip install bbfcapi[app]
  • "I want a Python library to talk to the REST API as demoed above"
    • Python client for BBFCAPI
    • pip install bbfcapi[api_async] (async variant)
    • pip install bbfcapi[api_sync] (sync variant)
  • "I want a Python library to talk to the BBFC website"
    • Python library for the BBFC website
    • pip install bbfcapi[lib_async] (async variant)
    • pip install bbfcapi[lib_sync] (sync variant)
  • "I want to download the raw HTML web pages from BBFC"
    • Python network client for the BBFC website
    • pip install bbfcapi[client_async] (async variant)
    • pip install bbfcapi[client_sync] (sync variant)
  • "I want to parse the downloaded web pages from BBFC"
    • Python HMTL parser for the BBFC web pages
    • pip install bbfcapi

Sync versions use the requests library, while async variants use aiohttp.

High-Level REST Web API

Install pip install bbfcapi[app].

To use the REST API to query BBFC, first run the web server:

$ uvicorn bbfcapi.app:app

Then, to query the API using the Python library synchronously:

from bbfcapi.api_sync import best_match
best_match("interstellar", base_url="http://127.0.0.1:8000")

Or, to query the API using the Python library asynchronously:

from bbfcapi.api_async import best_match
print(await best_match("interstellar", base_url="http://127.0.0.1:8000"))
import asyncio
from bbfcapi.api_async import best_match
print(asyncio.run(best_match("interstellar", base_url="http://127.0.0.1:8000")))

Or, to query the API using curl:

$ curl "127.0.0.1:8000?title=interstellar"
{"title":"Interstellar",age_rating":"12"}

Or, to query the API from another web page:

async function call()
{
    const response = await fetch('http://127.0.0.1:8000/?title=interstellar');
    const responseJson = await response.json();
    console.log(JSON.stringify(responseJson));
}
call();

Additional notes:

High-Level Python Library

To use the library to get results from BBFC synchronously:

from bbfcapi.lib_async import best_match
print(best_match(title="interstellar"))

To use the library to get results from BBFC asynchronously:

from bbfcapi.lib_async import best_match
print(await best_match(title="interstellar"))
import asyncio
from bbfcapi.lib_async import best_match
print(asyncio.run(best_match(title="interstellar")))

Low-Level BBFC Network Client & Parser

To use the library to get raw HTML pages from BBFC synchronously:

$ pip install bbfcapi[client_sync]`
from bbfcapi.client_sync import search
print(search(title="interstellar"))

To use the library to get raw HTML pages from BBFC asynchronously:

$ pip install bbfcapi[client_async]`
from bbfcapi.client_async import search
print(await search(title="interstellar"))
import asyncio
from bbfcapi.client_async import search
print(asyncio.run(search(title="interstellar")))

To use the library to parse results from BBFC's GraphQL API:

$ pip install bbfcapi[parser]`
from bbfcapi import parser
print(parser.best_autocomplete_match({"BBFC": "...graphql json..."}))

Development

  1. poetry install -E all to set up the virtualenv (one-off)
  2. poetry run uvicorn bbfcapi.apiweb:app --reload to run the web server
  3. make fix, make check, and make test before committing

There is also make test-live which will run live integration tests against the BBFC website.

Contributing

Pull requests are welcome :)

Publishing

This application is published on PyPi.

  1. Ensure you have configured the PyPi repository with Poetry (one-off)
  2. Run make release to execute the check-list

To publish to the test repository:

  1. Ensure you have configured the Test PyPi repository with Poetry (one-off)
  2. poetry publish --build -r testpypi to upload to the test repository

Changelog

Unpublished

...

v3.0.1 - 2021-03-04

  • Change primary host to bbfcapi.fustra.uk
  • [Security] Upgrade dependencies

v3.0.0 - 2020-11-08

  • IMPORTANT: Major changes for compatibility with BBFC's new website
  • Update various dependencies

v2.0.2 - 2020-03-22

  • Fix another missing dependency

v2.0.1 - 2020-03-22

  • Fix missing dependencies

v2.0.0 - 2020-03-22

  • Add Python client library for the BBFCAPI REST Web API
  • Use camelCasing for JSON fields in the web API
  • Reorganise entire package

v1.0.1 - 2020-01-19

  • Fix parsing 12A age ratings

v1.0.0 - 2020-01-19

  • First release of bbfcapi

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bbfcapi-3.0.1.tar.gz (20.5 kB view details)

Uploaded Source

Built Distribution

bbfcapi-3.0.1-py3-none-any.whl (19.9 kB view details)

Uploaded Python 3

File details

Details for the file bbfcapi-3.0.1.tar.gz.

File metadata

  • Download URL: bbfcapi-3.0.1.tar.gz
  • Upload date:
  • Size: 20.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.8.0-44-generic

File hashes

Hashes for bbfcapi-3.0.1.tar.gz
Algorithm Hash digest
SHA256 007526fd0bbbf1094f85868bc078e9deb0504f3cbede5e05d4a5f8c2265d1f3f
MD5 f83dfacde7ce4c7392d5296faa8cb940
BLAKE2b-256 45e14044e7d020f64a452d27b68361f8423637d9c8cebbdbdbbb00363cf49772

See more details on using hashes here.

File details

Details for the file bbfcapi-3.0.1-py3-none-any.whl.

File metadata

  • Download URL: bbfcapi-3.0.1-py3-none-any.whl
  • Upload date:
  • Size: 19.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.4 CPython/3.8.6 Linux/5.8.0-44-generic

File hashes

Hashes for bbfcapi-3.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 a2345dfd124981d11e608f20c82d65c02ed8b272261bcf229e6ff26b5f25d372
MD5 4cc7ab91abcec426e42d8a7e644ab449
BLAKE2b-256 12d62c7b40574818c34a6a210eb2afbde4cf19935e224c777d6f6d8e791a7bc2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page