Skip to main content

Python Lib to collect UK Bin Data

Project description

Made with Python

HACS Badge Current Release PyPi

GitHub license GitHub issues GitHub closed issues GitHub contributors

Test Councils Codecov CodeQL Analysis Publish Release Test Report Deployment

UK Bin Collection Data (UKBCD)

This project aims to provide a neat and standard way of providing bin collection data in JSON format from UK councils that have no API to do so.

Why do this? You might want to use this in a Home Automation - for example say you had an LED bar that lit up on the day of bin collection to the colour of the bin you want to take out, then this repo provides the data for that.

PLEASE respect a councils infrastructure / usage policy and only collect data for your own personal use on a suitable frequency to your collection schedule.

Most scripts make use of Beautiful Soup 4 to scrape data, although others use different approaches, such as emulating web browser behaviour, or reading data from CSV files.


Home Assistant Usage

Install with HACS (recommended)

  1. Ensure you have HACS installed
  2. In the Home Assistant UI go to HACS > Integrations > > Custom repositories.
  3. Enter https://github.com/robbrad/UKBinCollectionData in the Repository field.
  4. Select Integration as the category then click ADD.
  5. Click + Add Integration and search for and select UK Bin Collection Data then click Download.
  6. Restart your Home Assistant.
  7. In the Home Assistant UI go to Settings > Devices & Services click + Add Integration and search for UK Bin Collection Data.
  8. If your see a "URL of the remote Selenium web driver to use" field when setting up your council, you'll need to provide the URL to a web driver you've set up seperately such as standalone-chrome.

Install manually

  1. Open the folder for your Home Assistant configuration (where you find configuration.yaml).
  2. If you do not have a custom_components folder there, you need to create it.
  3. Download this repository then copy the folder custom_components/uk_bin_collection into the custom_components folder you found/created in the previous step.
  4. Restart your Home Assistant.
  5. In the Home Assistant UI go to Settings > Devices & Services click + Add Integration and search for UK Bin Collection Data.

Standalone Usage

PS G:\Projects\Python\UKBinCollectionData\uk_bin_collection\collect_data.py
usage: collect_data.py [-h] [-p POSTCODE] [-n NUMBER] [-u UPRN] module URL

positional arguments:
  module                Name of council module to use                           (required)
  URL                   URL to parse                                            (required)

options:
  -h, --help                            show this help message                  (optional)
  -p POSTCODE, --postcode POSTCODE      Postcode to parse - should include      (optional)
                                        a space and be wrapped in double
                                        quotes                                  
  -n NUMBER, --number NUMBER            House number to parse                   (optional)
  -u UPRN, --uprn UPRN                  UPRN to parse                           (optional)

Quickstart

The basic command to execute a script is:

python collect_data.py <council_name> "<collection_url>"

where council_name is the name of the council's .py script (without the .py) and collection_url is the URL to scrape. The help documentation refers to these as "module" and "URL", respectively. Supported council scripts can be found in the uk_bin_collection/uk_bin_collection/councils folder.

Some scripts require additional parameters, for example, when a UPRN is not passed in a URL, or when the script is not scraping a web page. For example, the Leeds City Council script needs two additional parameters - a postcode, and a house number. This is done like so:

python collect_data.py LeedsCityCouncil https://www.leeds.gov.uk/residents/bins-and-recycling/check-your-bin-day -p "LS1 2JG" -n 41
  • A postcode can be passed with -p "postcode" or --postcode "postcode". The postcode must always include a space in the middle and be wrapped in double quotes (due to how command line arguments are handled).
  • A house number can be passed with -n number or --number number.
  • A UPRN reference can be passed with -u uprn or --uprn uprn.

To check the parameters needed for your council's script, please check the project wiki for more information.

Project dependencies

Some scripts rely on external packages to function. A list of required scripts for both development and execution can be found in the project's PROJECT_TOML Install can be done via poetry install from within the root of the repo.


UPRN Finder

Some councils make use of the UPRN (Unique property reference number) to identify your property. You can find yours here or here.


Requesting your council

To make a request for your council, first check the Issues page to make sure it has not already been requested. If not, please fill in a new Council Request form, including as much information as possible, including:

  • Name of the council
  • URL to bin collections
  • An example postcode and/or UPRN (whichever is relevant)
  • Any further information

Please be aware that this project is run by volunteer contributors and completion depends on numerous factors - even with a request, we cannot guarantee if/when your council will get a script.


Reports


Docker API Server

We have created an API for this located under uk_bin_collection_api_server

Prerequisites

  • Docker installed on your machine
  • Python (if you plan to run the API locally without Docker)

Running the API with Docker

  1. Clone this repository.
  2. Navigate to the uk_bin_collection_api_server directory of the project.

Build the Docker Container

docker build -t ukbc_api_server .
docker run -p 8080:8080 ukbc_api_server

Accessing the API

Once the Docker container is running, you can access the API endpoints:

API Base URL: http://localhost:8080/api
Swagger UI: http://localhost:8080/api/ui/

API Documentation

The API documentation can be accessed via the Swagger UI. Use the Swagger UI to explore available endpoints, test different requests, and understand the API functionalities.

Swagger UI

API Endpoints

GET /bin_collection/{council}

Description: Retrieves information about bin collection for the specified council.

Parameters:

council (required): Name of the council.
Other optional parameters: [Specify optional parameters if any]

Example Request:

curl -X GET "http://localhost:8080/api/bin_collection/{council}" -H "accept: application/json"

Docker Compose

This includes the Selenium standalone-chrome for Selenium based councils

version: '3'

services:
  ukbc_api_server:
    build:
      context: .
      dockerfile: Dockerfile 
    ports:
      - "8080:8080"  # Adjust the ports as needed
    depends_on:
      - selenium

  selenium:
    image: selenium/standalone-chrome:latest
    ports:
      - "4444:4444"

Run with

sudo apt-get update
sudo apt-get install docker-compose

docker-compose up

FAQ

I've got an issue/support question - what do I do?

Please post in the HomeAssistant thread or raise a new (non council request) issue.

I'd like to contribute, where do I start?

Contributions are always welcome! See CONTRIBUTING.md to get started. Please adhere to the project's code of conduct.

  • If you're new to coding/Python/BeautifulSoup, feel free to check here for issues that are good for newcomers!
  • If you would like to try writing your own scraper, feel free to fork this project and use existing scrapers as a base for your approach (or councilclasstemplate.py).

Contributors

Image of contributors

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distribution

uk_bin_collection-0.75.0.tar.gz (140.0 kB view hashes)

Uploaded Source

Built Distribution

uk_bin_collection-0.75.0-py3-none-any.whl (267.3 kB view hashes)

Uploaded Python 3

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