Skip to main content

Boston's 311 Service API

Python package for interfacing with Boston 311 API.

python PyPI version downloads
pytest pre-commit Code style: black Checked with mypy pydocstyle
License: GPLv3

I recently made a request to have some graffiti removed by the city of Boston and used their 311 service for reporting non-emergency crimes. I found it an interesting service and decided to look closer into it. They provide an free API for the service, so I decided to make this Python package to interface with the API.

Quick start

Installation

Install the boston311 package through PyPI.

pip install boston311

Features

Below are features of this package:

  1. Get a collection of all services offered by Boston 311.
  2. Get a collection of all service requests with some useful filters.
  3. Get information for a specific service request.

All underlying data models were parsed and validated with 'pydantic' so there is increased type safety and helpful hints for your IDE.

Examples

Collection of available services

Use the get_services() function to get a collection of all of the available services offered through the 311 service. The returned object contains a field services which is a list of the services.

In the example below, I make the request, show how many services are available, and print out the third service in the list. Finally, I demonstrate a convenience method I added to make a list of the names of the services.

import boston311

available_services = boston311.get_services()

print(available_services)
#> 22 available services
type(available_services)
#> <class 'boston311.datamodels.Services'>
len(available_services)
#> 22
print(available_services[2])
#> {
#>      'description': 'Graffiti Removal Request',
#>      'group': 'Illegal Graffiti',
#>      'metadata': 'True',
#>      'service_code': '4f38920fe75084437f0001b3',
#>      'service_name': 'Illegal Graffiti',
#>      'type': 'batch',
#>      'version': 1
#> }
print(available_services.list_service_names())
#> ['Residential Trash out Illegally', 'Broken Sidewalk', ..., 'Abandoned Vehicle']

Collection of service requests

It is easy to get a collection of all service requests made in the last 90 days (the default date range). There are also some useful filters for indicating types of service requests, date ranges, and the status of the request.

import boston311

service_requests = boston311.get_service_requests()
print(service_requests)
#> 50 service requests

Information for a known service request

Finally, it is very fast to get the information for a single known service request. Below is an example of a random request I found on the website.

import boston311

service_request = boston311.get_service_request("101003914012")
print(service_request)
#> {
#>    'address': '335 Gallivan Blvd, 1, Dorchester',
#>    'address_id': None,
#>    'agency_responsible': None,
#>    'description': 'Dead cat',
#>    'expected_datetime': None,
#>    'lat': 42.28033447265625,
#>    'long': -71.06434967989543,
#>    'media_url': None,
#>    'requested_datetime': datetime.datetime(2021, 8, 14, 12, 19, 13, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000))),
#>    'service_code': '4f389210e75084437f0001c4',
#>    'service_name': 'Dead Animal Pick-up',
#>    'service_notice': None,
#>    'service_request_id': '101003914012',
#>    'status': <Status.OPEN: 'open'>,
#>    'status_notes': None,
#>    'updated_datetime': datetime.datetime(2021, 8, 14, 12, 19, tzinfo=datetime.timezone(datetime.timedelta(days=-1, seconds=72000))),
#>    'version': 1,
#>    'zipcode': None
#>}

Limitations

There are some parts of the API that I have not included in this package (e.g. the ability to make a new service request submission) because I do not currently need them. However, they are likely simple enough to add, so if you want them, either implement them yourself and submit a PR or open and Issue and I will eventually take care of it.

API Documentation

Below are links to the documentation for the original API.

Metadata

Release files for boston311 0.1.1

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

Source distribution (sdist)

Source distribution for boston311 0.1.1
File Size Uploaded Provenance Actions
boston311-0.1.1.tar.gz 37.0 kB Without provenance Details for boston311-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for boston311 0.1.1
File Interpreter ABI Platform Actions
boston311-0.1.1-py2.py3-none-any.whl Python 3, Python 2 none any Details for boston311-0.1.1-py2.py3-none-any.whl

Total release size: 56.2 kB

Release files / boston311-0.1.1.tar.gz

Download URL boston311-0.1.1.tar.gz
Size 37.0 kB
Tags Source
SHA-256 checksum
How to use checksums
03ce2181dd96d0907747a2555c08877fae84850ecbd62e416cdcb1c84a642190
BLAKE2b-256 checksum
How to use checksums
07347345ba65ee6a041dc141d778f368819773402b36f074b9cb5b0e5baf0b25
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.26.0

Release files / boston311-0.1.1-py2.py3-none-any.whl

Download URL boston311-0.1.1-py2.py3-none-any.whl
Size 19.2 kB
Tags Python 2 Python 3
SHA-256 checksum
How to use checksums
0704c6d4a6682a44ebc016cf09e0d7a3d4302961653ff2a95f74be3578f00de5
BLAKE2b-256 checksum
How to use checksums
c0d737f98847265aac9322efb56dafc4748e28d7dd6637c003987b844e1da846
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.26.0

Security for boston311 0.1.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.1 This release

2 release files No provenance

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