Web API and Python library for BBFC.
- Hosted @ https://bbfcapi.fustra.uk
- Documentation @ https://bbfcapi.fustra.uk/redoc
- Alternative documentation @ https://bbfcapi.fustra.uk/docs
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'>)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.
Install pip install bbfcapi[app].
To use the REST API to query BBFC, first run the web server:
$ uvicorn bbfcapi.app:appThen, 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:
- HTTP 404 Not Found is returned when there is no film found.
- Browse documentation @ http://127.0.0.1:8000/redoc.
- Or, browse documentation @ http://127.0.0.1:8000/docs.
- Samples on hosting this web application are available in the repository's /docs folder.
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")))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..."}))poetry install -E allto set up the virtualenv (one-off)poetry run uvicorn bbfcapi.apiweb:app --reloadto run the web servermake fix,make check, andmake testbefore committing
There is also make test-live which will run live integration tests against
the BBFC website.
Pull requests are welcome :)
This application is published on PyPi.
- Ensure you have configured the PyPi repository with Poetry (one-off)
- Run
make releaseto execute the check-list
To publish to the test repository:
- Ensure you have configured the Test PyPi repository with Poetry (one-off)
poetry publish --build -r testpypito upload to the test repository
...
- Change primary host to bbfcapi.fustra.uk
- [Security] Upgrade dependencies
- IMPORTANT: Major changes for compatibility with BBFC's new website
- Update various dependencies
- Fix another missing dependency
- Fix missing dependencies
- Add Python client library for the BBFCAPI REST Web API
- Use camelCasing for JSON fields in the web API
- Reorganise entire package
- Fix parsing 12A age ratings
- First release of bbfcapi