Python wrapper for the TrackingMore API
This library supports the following methods of the TrackingMore API:
- Creating a new tracking item, given the courier code and the tracking number
- Creating a batch of tracking items, given the courier code and the tracking number
- Updating a tracking item, given the courier code and the tracking number
- Deleting a tracking item, given the courier code and the tracking number
- Querying the tracking data for an item from the courier API in real time
- Detecting the courier from the tracking number
pip install trackingmore
You need a TrackingMore account in order to use the API. You can then generate an API token, which you will need to pass to the trackingmore module.
You can just do it once somewhere in the program, before using the API.
import trackingmore
trackingmore.set_api_key('my-api-key')
Before accessing information about a shipment, you must create a tracking item in TrackingMore's system. It will then be also visible in the dashboard.
Each shipment is identifiable through its courier code and tracking number.
>>> td = trackingmore.create_tracking_data('poste-italiane', '1234567890')
>>> trackingmore.create_tracking_item(td)
{
"id": "b6321d71ad627cbf8c141ccc25fc659f",
"tracking_number": "1234567890",
"carrier_code": "poste-italiane",
"status": "pending",
"created_at": "2017-05-20T17:39:21+08:00",
"customer_email": "null",
"customer_name": "null",
"order_id": "null",
"title": null
}
However, while creating a tracking item, it is possible to provide additional metadata to be stored in TrackingMore's database, to facilitate your own operations. The trackingmore module includes a helper function to create a TrackingData object.
>>> td = trackingmore.create_tracking_data(
carrier_code='poste-italiane',
tracking_number='0987654321',
title='my_first_package',
customer_name='Marco Esposito',
customer_email='marcoesposito1988@gmail.com',
order_id='my_order_id',
lang='it'
)
>>> trackingmore.create_tracking_item(td)
{
"id": "b6321d71ad627cbf8c141ccc25fc6600",
"tracking_number": "0987654321",
"carrier_code": "poste-italiane",
"status": "pending",
"created_at": "2017-05-20T17:39:23+08:00",
"customer_email": "marcoesposito1988@gmail.com",
"customer_name": "Marco Esposito",
"order_id": "my_order_id",
"title": "my_first_package"
}
It is possible to create multiple tracking items with a single API call.
>>> tds = [
trackingmore.create_tracking_data('poste-italiane', '1234567890'),
trackingmore.create_tracking_data('dhl', 'abc123456')
]
>>> trackingmore.create_tracking_items_batch(tds)
[
{
"id": "b6321d71ad627cbf8c141ccc25fc6601",
"tracking_number": "1234567890",
"carrier_code": "poste-italiane",
"status": "pending",
"created_at": "2017-05-20T17:39:26+08:00",
"customer_email": "null",
"customer_name": "null",
"order_id": "null",
"title": null
},
{
"id": "b6321d71ad627cbf8c141ccc25fc6602",
"tracking_number": "abc123456",
"carrier_code": "dhl",
"status": "pending",
"created_at": "2017-05-20T17:39:26+08:00",
"customer_email": "null",
"customer_name": "null",
"order_id": "null",
"title": null
}
]
It is also possible to update the tracking item metadata after creation.
>>> td = trackingmore.create_tracking_data(
carrier_code='poste-italiane',
tracking_number='1234567890',
customer_name='Marco Esposito',
customer_email='marcoesposito1988@gmail.com'
)
>>> trackingmore.update_tracking_item(td)
{
"id": "b6321d71ad627cbf8c141ccc25fc659f",
"tracking_number": "1234567890",
"carrier_code": "poste-italiane",
"status": "pending",
"created_at": "2017-05-20T17:39:21+08:00",
"customer_email": "marcoesposito1988@gmail.com",
"customer_name": "Marco Esposito",
"order_id": "null",
"title": null
}
Once a tracking item has been created, it will synchronize periodically (every few hours) with the courier's system.
It is possible to fetch the latest information from the TrackingMore servers by providing the courier code and tracking number.
>>> trackingmore.get_tracking_item('ups', '1Z97X17XYW06605211')
{
"id": "ac9326a212b9b8660759f55bac89df2b",
"tracking_number": "1Z97X17XYW06605211",
"carrier_code": "ups",
"status": "transit",
"created_at": "2015-11-20T21:01:30+08:00",
"updated_at": "2015-11-21T15:27:26+08:00",
"original_country": "United States",
"itemTimeLength": null,
"origin_info": {
"weblink": "http:\/\/www.ups.com\/content\/us\/en\/contact\/index.html?WT.svl=Footer",
"phone": null,
"carrier_code": "ups",
"trackinfo": [{
"Date": "2015-11-06 09:46:00",
"StatusDescription": "package transferred to post office.",
"Details": ""
}, {
"Date": "2015-11-06 05:41:00",
"StatusDescription": "destination scan",
"Details": "US,BALDWIN PARK"
},
...
]
}
}
This method forces the TrackingMore server to fetch the latest information available from the courier's system. A rate limit applies.
>>> td = trackingmore.create_tracking_data('china-ems', 'LK664578623CN')
>>> trackingmore.realtime_tracking(td)
{
"items": [{
"id": "442f798ea35749e7605d1a73d4181a01",
"tracking_number": "RE113184005HK",
"carrier_code": "hong-kong-post",
"status": "transit",
"original_country": "Hong Kong [CN]",
"destination_country": "Colombia",
"itemTimeLength": null,
"origin_info": {
"weblink": "http:\/\/www.hongkongpost.hk\/",
"phone": "852 2921 2222",
"carrier_code": "hong-kong-post",
"trackinfo": [{
"Details": "CO",
"StatusDescription": "The item ( RE113184005HK ) left Hong Kong for its destination on 10-Oct-2015 ",
"Date": "2015-10-09 00:00"
}]
},
"destination_info": {
"weblink": "http:\/\/www.4-72.com.co\/",
"phone": "(57-1) 4722000",
"carrier_code": "colombia-post",
"trackinfo": [{
"Date": "2015-10-22 20:52",
"StatusDescription": "DIGITALIZADO",
"Details": "CTP.CENTRO A"
}, {
"Date": "2015-10-22 17:02",
"StatusDescription": "Registro de entrega exitosa",
"Details": ""
}, {
"Date": "2015-10-22 16:55",
"StatusDescription": "ENTREGADO",
"Details": "CD.MONTEVIDEO"
},
...
]
}
"lastEvent": "DIGITALIZADO,CTP.CENTRO A,2015-10-22 20:52",
"lastUpdateTime": "2015-10-22 20:52"
}]
}
It is possible to delete a tracking item when it is not needed any more. It can be added again later at no additional cost (TrackingMore charges per package).
>>> trackingmore.delete_tracking_item('ups', '1Z97X17XYW06605211')
[]
The author is not affiliated to TrackingMore. Every responsibility is declined.