Skip to main content

Python Wrapper for the NHTSA Vehicle API

Project description

PVAW: Python Vehicle API Wrapper

A Python wrapper for the National Highway Traffic Saftey Association (NHTSA) Vehicle API

License

License: MIT

Documentation

Istalling PVAW

pip install pvaw

Importing PVAW

import pvaw as pv

Vin Decoding

The NHTSA Vehicle API supports individual and batch decoding.

Vin Class

class pvaw.Vin(full_or_partial_vin, model_year=None)

Parameters:

full_or_partial_vin: string representing a Vehicle Identification Number (VIN). It can be either the full VIN (e.g. "3C6JR7AT4EG248404"), or be a subset of the VIN with missing characters replaced by the '*' character (e.g. "5YJSA3DS*EF")

model_year: string or integer representing the model year of the vehicle. Defaults to None.

Constructing a Vin

# creating a Vin object from partial vin
vin_1 = pv.Vin("5YJSA3DS*EF")

# creationg a Vin object from partial vin and year
vin_2 = pv.Vin("5UXWX7C5*BA", 2011)

Decoding a Vin

pvaw.Vin.decode()

Returns: A Vehicle object with information about the Vin's associated vehicle

vehicle = vin_1.decode()
vehicle
model_year make manufacturer model full_or_partial_vin vehicle_type
5YJSA3DS*EF 2014 TESLA TESLA, INC. Model S 5YJSA3DS*EF PASSENGER CAR

Getting Key Attributes

print(vehicle.model_year)
print(vehicle.make)
print(vehicle.manufacturer)
print(vehicle.model)
print(vehicle.full_or_partial_vin)
print(vehicle.vehicle_type)
2014
TESLA
TESLA, INC.
Model S
5YJSA3DS*EF
PASSENGER CAR

Getting JSON Results

vehicle.get_results()
{'ABS': '',
 'ActiveSafetySysNote': '',
 'AdaptiveCruiseControl': '',
 'AdaptiveDrivingBeam': '',
 'AdaptiveHeadlights': '',
 'AdditionalErrorText': 'The error positions are indicated by ! in Suggested VIN. In the Possible values section, each pair of parenthesis indicate information about each error position in VIN . The Numeric value before the : indicates the position in error and the values after the : indicate the possible values that are allowed in this position Unused position(s): 8;',
 'AirBagLocCurtain': '',
 'AirBagLocFront': '1st Row (Driver & Passenger)',
 ...

Getting DataFrame

# Getting key attribute df dropping nan
vehicle.get_df()
model_year make manufacturer model full_or_partial_vin vehicle_type
5YJSA3DS*EF 2014 TESLA TESLA, INC. Model S 5YJSA3DS*EF PASSENGER CAR
# Getting full raw data df not dropping nan
vehicle.get_df(raw=True, drop_na=False)
ABS ActiveSafetySysNote AdaptiveCruiseControl AdaptiveDrivingBeam AdaptiveHeadlights AdditionalErrorText AirBagLocCurtain AirBagLocFront AirBagLocKnee AirBagLocSeatCushion ... VIN ValveTrainDesign VehicleType WheelBaseLong WheelBaseShort WheelBaseType WheelSizeFront WheelSizeRear Wheels Windows
5YJSA3DS*EF NaN NaN NaN NaN NaN The error positions are indicated by ! in Sugg... NaN 1st Row (Driver & Passenger) 1st Row (Driver & Passenger) NaN ... 5YJSA3DS*EF NaN PASSENGER CAR NaN NaN NaN NaN NaN NaN NaN

1 rows × 145 columns

Batch Decoding

pvaw.decode_vins(vins)

Parameters: vins: list of Vin objects

Returns: ResultsList object which stores a list of Vehicle objects

vehicles = pv.decode_vins([vin_1, vin_2])
vehicles
model_year make manufacturer model full_or_partial_vin vehicle_type
5YJSA3DS*EF 2014 TESLA TESLA, INC. Model S 5YJSA3DS*EF PASSENGER CAR
5UXWX7C5*BA,2011 2011 BMW BMW MANUFACTURER CORPORATION / BMW NORTH AMERICA X3 5UXWX7C5*BA MULTIPURPOSE PASSENGER VEHICLE (MPV)

Accessing each Vehicle

# Iterating through vehicles
for vehicle in vehicles:
    display(vehicle)

# Indexing Vehicles
first = vehicles[0]
last = vehicles[len(vehicles) - 1]
model_year make manufacturer model full_or_partial_vin vehicle_type
5YJSA3DS*EF 2014 TESLA TESLA, INC. Model S 5YJSA3DS*EF PASSENGER CAR
model_year make manufacturer model full_or_partial_vin vehicle_type
5UXWX7C5*BA,2011 2011 BMW BMW MANUFACTURER CORPORATION / BMW NORTH AMERICA X3 5UXWX7C5*BA MULTIPURPOSE PASSENGER VEHICLE (MPV)

Getting JSON Results

vehicles.get_results()
[{'ABS': '',
  'ActiveSafetySysNote': '',
  'AdaptiveCruiseControl': '',
  'AdaptiveDrivingBeam': '',
  'AdaptiveHeadlights': '',
  'AdditionalErrorText': 'The error positions are indicated by ! in Suggested VIN. In the Possible values section, each pair of parenthesis indicate information about each error position in VIN . The Numeric value before the : indicates the position in error and the values after the : indicate the possible values that are allowed in this position Unused position(s): 8;',
  'AirBagLocCurtain': '',
  'AirBagLocFront': '1st Row (Driver & Passenger)',
  'AirBagLocKnee': '1st Row (Driver & Passenger)',
  'AirBagLocSeatCushion': '',
  ...

Getting DataFrame

# Getting key attribute df dropping nan
vehicles.get_df()
model_year make manufacturer model full_or_partial_vin vehicle_type
5YJSA3DS*EF 2014 TESLA TESLA, INC. Model S 5YJSA3DS*EF PASSENGER CAR
5UXWX7C5*BA,2011 2011 BMW BMW MANUFACTURER CORPORATION / BMW NORTH AMERICA X3 5UXWX7C5*BA MULTIPURPOSE PASSENGER VEHICLE (MPV)
# Getting full raw data df not dropping nan
vehicles.get_df(raw=True, drop_na=False)
ABS ActiveSafetySysNote AdaptiveCruiseControl AdaptiveDrivingBeam AdaptiveHeadlights AdditionalErrorText AirBagLocCurtain AirBagLocFront AirBagLocKnee AirBagLocSeatCushion ... VIN ValveTrainDesign VehicleType WheelBaseLong WheelBaseShort WheelBaseType WheelSizeFront WheelSizeRear Wheels Windows
5YJSA3DS*EF NaN NaN NaN NaN NaN The error positions are indicated by ! in Sugg... NaN 1st Row (Driver & Passenger) 1st Row (Driver & Passenger) NaN ... 5YJSA3DS*EF NaN PASSENGER CAR NaN NaN NaN NaN NaN NaN NaN
5UXWX7C5*BA,2011 NaN NaN NaN NaN NaN NaN NaN 1st Row (Driver & Passenger) NaN NaN ... 5UXWX7C5*BA NaN MULTIPURPOSE PASSENGER VEHICLE (MPV) NaN NaN NaN NaN NaN NaN NaN

2 rows × 145 columns

WMI Methods

The NHTSA Vehicle API supports wmi decoding

WMI Decoding

pvaw.decode_wmi(wmi)

Parameters: wmi: str of length 3 representing VIN position 1-3 (e.g. "1FD") or 6 representing VIN positions 1-3 & 12-14 (e.g. "1G9340")

Returns: WMIInfo object with information on wmi

wmi_info = pv.decode_wmi("JTL")
wmi_info
wmi vehicle_type manufacturer
JTL JTL Multipurpose Passenger Vehicle (MPV) TOYOTA MOTOR NORTH AMERICA, INC

Getting Key Attributes

print(wmi_info.wmi)
print(wmi_info.manufacturer)
print(wmi_info.vehicle_type)
JTL
TOYOTA MOTOR NORTH AMERICA, INC
Multipurpose Passenger Vehicle (MPV)

Getting JSON Results

wmi_info.get_results()
{'CommonName': 'Toyota',
 'CreatedOn': '2015-05-04',
 'DateAvailableToPublic': '2015-01-01',
 'Make': 'TOYOTA',
 'ManufacturerName': 'TOYOTA MOTOR NORTH AMERICA, INC',
 'ParentCompanyName': 'TOYOTA MOTOR CORPORATION',
 'URL': 'http://www.toyota.com',
 'UpdatedOn': None,
 'VehicleType': 'Multipurpose Passenger Vehicle (MPV)',
 'WMI': 'JTL'}

Getting DataFrame

# Getting key attribute df dropping nan
wmi_info.get_df()
wmi vehicle_type manufacturer
JTL JTL Multipurpose Passenger Vehicle (MPV) TOYOTA MOTOR NORTH AMERICA, INC
# Getting full raw data df not dropping nan
wmi_info.get_df(raw=True, drop_na=False)
CommonName CreatedOn DateAvailableToPublic Make ManufacturerName ParentCompanyName URL UpdatedOn VehicleType WMI
JTL Toyota 2015-05-04 2015-01-01 TOYOTA TOYOTA MOTOR NORTH AMERICA, INC TOYOTA MOTOR CORPORATION http://www.toyota.com None Multipurpose Passenger Vehicle (MPV) JTL

Finding WMIs by Manufacturer

pvaw.get_wmis(manufacturer_search)

Parameters: manufacturer_search: a str representing part or all of the name of a Manufacturer (e.g. "Honda")

Returns: ResultsList object which stores a list of WMIInfo objects

wmi_infos = pv.get_wmis("Tesla")
wmi_infos
wmi vehicle_type manufacturer
5YJ 5YJ Passenger Car TESLA, INC.
SFZ SFZ Passenger Car TESLA, INC.

Accessing Each WMI

# Iterating through vehicles
for wmi_info in wmi_infos:
    display(wmi_info)

# Indexing Vehicles
first = wmi_infos[0]
last = wmi_infos[len(vehicles) - 1]

# Getting Key Attributes
print(first.wmi)
print(first.manufacturer)
print(first.vehicle_type)
wmi vehicle_type manufacturer
5YJ 5YJ Passenger Car TESLA, INC.
wmi vehicle_type manufacturer
SFZ SFZ Passenger Car TESLA, INC.
5YJ
TESLA, INC.
Passenger Car

Getting JSON Results

wmi_infos.get_results()
[{'Country': 'UNITED STATES (USA)',
  'CreatedOn': '2015-03-04',
  'DateAvailableToPublic': '2015-01-01',
  'Id': 955,
  'Name': 'TESLA, INC.',
  'UpdatedOn': None,
  'VehicleType': 'Passenger Car',
  'WMI': '5YJ'},
 {'Country': 'UNITED STATES (USA)',
  'CreatedOn': '2015-04-16',
  'DateAvailableToPublic': '2015-01-01',
  'Id': 955,
  'Name': 'TESLA, INC.',
  'UpdatedOn': None,
  'VehicleType': 'Passenger Car',
  'WMI': 'SFZ'}]

Getting DataFrame

# Getting key attribute df dropping nan
wmi_infos.get_df()
wmi vehicle_type manufacturer
5YJ 5YJ Passenger Car TESLA, INC.
SFZ SFZ Passenger Car TESLA, INC.
# Getting full raw data df not dropping nan
wmi_infos.get_df(raw=True, drop_na=False)
Country CreatedOn DateAvailableToPublic Id Name UpdatedOn VehicleType WMI
5YJ UNITED STATES (USA) 2015-03-04 2015-01-01 955 TESLA, INC. None Passenger Car 5YJ
SFZ UNITED STATES (USA) 2015-04-16 2015-01-01 955 TESLA, INC. None Passenger Car SFZ

Make Methods

pvaw.get_makes(manufacturer_name_or_id=None, model_year=None, vehicle_type=None)

Finding Makes by Manufacturer and Year or Vehicle Type

Parameters: manufacturer_name_or_id: a str representing part or all of the name of a manufacturer (e.g. "Honda") or an integer representing the manufacturer ID

model_year: a str or int representing the year makes must exist in (e.g. 2005)

vehicle_type: a str representing the type of vehicle that a make produces (e.g. "car")

NOTE: For this method, you can filter either by manufacturer_name_or_id or by vehicle_type, you cannot filter by both. Additionally, model_year can be passed in with manufacturer_name_or_id, but not with vehicle_type.

Returns: ResultsList object which stores a list of Make objects

# getting makes for manufacturer name search
makes = pv.get_makes("hyundai")

# getting makes for manufacturer name search and model year
makes_2 = pv.get_makes("tesla", 2020)

# getting makes for manufacturer ID and model year
makes_3 = pv.get_makes(988, 2005)

# getting makes by vehicle_type search
makes_4 = pv.get_makes(vehicle_type="car")
# displaying makes
makes_3
make_id make_name manufacturer
474-HONDA OF AMERICA MFG., INC. 474 HONDA HONDA OF AMERICA MFG., INC.
475-HONDA OF AMERICA MFG., INC. 475 ACURA HONDA OF AMERICA MFG., INC.

Accessing Each Make

# Iterating through makes
for m in makes_3:
    display(m)

# Indexing makes
first = makes_3[0]
last = makes_3[len(makes_3) - 1]

# Getting Key Attributes
print(first.make_id)
print(first.make_name)
print(first.manufacturer)
print(first.vehicle_type)
make_id make_name manufacturer
474-HONDA OF AMERICA MFG., INC. 474 HONDA HONDA OF AMERICA MFG., INC.
make_id make_name manufacturer
475-HONDA OF AMERICA MFG., INC. 475 ACURA HONDA OF AMERICA MFG., INC.
474
HONDA
HONDA OF AMERICA MFG., INC.
None

Getting JSON Results

makes_3.get_results()
[{'MakeId': 474,
  'MakeName': 'HONDA',
  'MfrId': 988,
  'MfrName': 'HONDA OF AMERICA MFG., INC.'},
 {'MakeId': 475,
  'MakeName': 'ACURA',
  'MfrId': 988,
  'MfrName': 'HONDA OF AMERICA MFG., INC.'}]

Getting DataFrame

# Getting key attribute df dropping nan
makes_3.get_df()
make_id make_name manufacturer
474-HONDA OF AMERICA MFG., INC. 474 HONDA HONDA OF AMERICA MFG., INC.
475-HONDA OF AMERICA MFG., INC. 475 ACURA HONDA OF AMERICA MFG., INC.
# Getting full raw data df not dropping nan
makes_3.get_df(raw=True, drop_na=False)
MakeId MakeName MfrId MfrName
474-HONDA OF AMERICA MFG., INC. 474 HONDA 988 HONDA OF AMERICA MFG., INC.
475-HONDA OF AMERICA MFG., INC. 475 ACURA 988 HONDA OF AMERICA MFG., INC.

Manufacturer Methods

Getting Manufacturers

pvaw.get_manufacturers(m_type=None, page=1)

Parameters: m_type: a str representing part or all of the manufacturer type (e.g. "Intermediate")

page: int representing the api page number. Each page returns 100 manufacturers

Returns: ResultsList object which stores a list of Manufacturer objects

# getting manufacturers by api page number
manufacturers = pv.get_manufacturers(page=5)

# getting manufacturers by manufacturer type
manufacturers_2 = pv.get_manufacturers(m_type="complete", page=1)

Searching for Specific Manufacturers

pvaw.get_manufacturer_details(manufacturer_name_or_id)

Parameters: manufacturer_name_or_id: a str representing manufacturer name or an int representing the manufacturer ID

Returns: ResultsList object which stores a list of Manufacturer objects matching the manufacturer search

# getting manufacturer(s) from manufacturer name search
manufacturers_3 = pv.get_manufacturer_details("Toyota")

# getting manufacturer from manufacturter id
manufacturers_4 = pv.get_manufacturer_details(988)

Accessing Each Manufacturer

# Iterating through manufacturers
for m in manufacturers[:4]:
    display(m)

# Indexing manufacturers
first = manufacturers[0]
last = manufacturers[len(manufacturers) - 1]

# Getting Key Attributes
print(first.id)
print(first.common_name)
print(first.name)
print(first.vehicle_types)
name vehicle_types id
1387 WOOPYONG MOTOR WHEEL LTD [] 1387
name vehicle_types id
1388 WORCESTER TANK & EQUIPMENT CO., INC [] 1388
name vehicle_types id
1389 WORCESTER WHITE AUTOCAR, INC. [] 1389
name vehicle_types id
1390 WORKBENCH, INC. [Trailer] 1390
1387
None
WOOPYONG MOTOR WHEEL LTD
[]

Getting JSON Results

manufacturers.get_results()
[{'Country': '',
  'Mfr_CommonName': None,
  'Mfr_ID': 1387,
  'Mfr_Name': 'WOOPYONG MOTOR WHEEL LTD',
  'VehicleTypes': []},
 {'Country': 'UNITED STATES (USA)',
  'Mfr_CommonName': None,
  'Mfr_ID': 1388,
  'Mfr_Name': 'WORCESTER TANK & EQUIPMENT CO., INC',
  'VehicleTypes': []},
 ...

Getting DataFrame

# Getting key attribute df dropping nan
manufacturers.get_df()
name vehicle_types id
1387 WOOPYONG MOTOR WHEEL LTD [] 1387
1388 WORCESTER TANK & EQUIPMENT CO., INC [] 1388
1389 WORCESTER WHITE AUTOCAR, INC. [] 1389
1390 WORKBENCH, INC. [Trailer] 1390
1391 U-SCREEN U.S.A., INC. [Trailer] 1391
... ... ... ...
1479 TAZZARI GL SPA [Low Speed Vehicle (LSV)] 1479
1480 CHANGZHOU CITY WENMING VEHICLE ACCESSORIES FAC... [] 1480
1481 SALSCO, INC. [Trailer] 1481
1482 LIFT N LOCK, LLC [] 1482
1483 CONTINENTAL BIOMASS INDUSTRIES, INC. [] 1483

92 rows × 3 columns

# Getting full raw data df not dropping nan
manufacturers.get_df(raw=True, drop_na=False)
Country Mfr_CommonName Mfr_ID Mfr_Name VehicleTypes
1387 NaN None 1387 WOOPYONG MOTOR WHEEL LTD []
1388 UNITED STATES (USA) None 1388 WORCESTER TANK & EQUIPMENT CO., INC []
1389 UNITED STATES (USA) None 1389 WORCESTER WHITE AUTOCAR, INC. []
1390 UNITED STATES (USA) None 1390 WORKBENCH, INC. [{'IsPrimary': False, 'Name': 'Trailer'}]
1391 UNITED STATES (USA) None 1391 U-SCREEN U.S.A., INC. [{'IsPrimary': False, 'Name': 'Trailer'}]
... ... ... ... ... ...
1479 ITALY None 1479 TAZZARI GL SPA [{'IsPrimary': True, 'Name': 'Low Speed Vehicl...
1480 CHINA None 1480 CHANGZHOU CITY WENMING VEHICLE ACCESSORIES FAC... []
1481 UNITED STATES (USA) None 1481 SALSCO, INC. [{'IsPrimary': True, 'Name': 'Trailer'}]
1482 UNITED STATES (USA) None 1482 LIFT N LOCK, LLC []
1483 UNITED STATES (USA) None 1483 CONTINENTAL BIOMASS INDUSTRIES, INC. []

92 rows × 5 columns

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

pvaw-0.0.2.tar.gz (16.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pvaw-0.0.2-py3-none-any.whl (11.5 kB view details)

Uploaded Python 3

File details

Details for the file pvaw-0.0.2.tar.gz.

File metadata

  • Download URL: pvaw-0.0.2.tar.gz
  • Upload date:
  • Size: 16.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.7.2

File hashes

Hashes for pvaw-0.0.2.tar.gz
Algorithm Hash digest
SHA256 a0473597cf8d69dd787c0273631125f6583a66b1209ad1258507daa1a848809b
MD5 80e358a27f259bd4f06c47500f50c07f
BLAKE2b-256 cf32b0d8351ddffb94a6bc79f45890769e18adddf55f5d2eb256ac9d552b3ed9

See more details on using hashes here.

File details

Details for the file pvaw-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: pvaw-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 11.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.3.0 pkginfo/1.7.0 requests/2.25.1 setuptools/40.6.2 requests-toolbelt/0.9.1 tqdm/4.58.0 CPython/3.7.2

File hashes

Hashes for pvaw-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 c4dc5e0a31dbcf0a402367396db18fb6d62165afe754cbc7393659483b6cd8c8
MD5 630afe96eb8d7cd57aae5cfa9a543b0a
BLAKE2b-256 638c3ed0e8147a5475531d2384948c2043ecd2da1bb545eed01985983f844381

See more details on using hashes here.

Supported by

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