Skip to content
This repository was archived by the owner on Nov 6, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 10 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,13 @@ venv.bak/
/site

# mypy
.mypy_cache/
.mypy_cache/

# intellij
.idea/

# vscode
.vscode/

#test script
test.py
7 changes: 7 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,13 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/).

## 1.2.0 - 2019-08-08
### Added
- Created packages and letters classes
- Isoformat parsed datetime for delivery and planned dates
- Added properties for is_delivered and delivery_today
- Renamed methods to get_X with X: deliveries, distributions and letters

## 1.0.2 - 2018-05-28
### Fixed
- Traceback when no deliveryDate is found in shipment
Expand Down
30 changes: 20 additions & 10 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,19 +19,29 @@ from postnl_api import PostNL_API
# Login using your jouw.postnl.nl credentials
postnl = PostNL_API('email@domain.com', 'password')

# Get relevant shipments
shipments = postnl.get_relevant_shipments()
# Get relevant deliveries
print("Getting relevant deliveries")
rel_deliveries = postnl.get_relevant_deliveries()
for delivery in rel_deliveries:
print(delivery.debug_string)

# Get relevant deliveries
print("Getting all deliveries")
all_deliveries = postnl.get_deliveries()
for delivery in all_deliveries:
print(delivery.debug_string)

# Get relevant deliveries
print("Getting all distributions (sent packages)")
distributions = postnl.get_distributions()
for distribution in distributions:
print(distribution.debug_string)

for shipment in shipments:
name = shipment['settings']['title']
status = shipment['status']['formatted']['short']
status = postnl.parse_datetime(status, '%d-%m-%Y', '%H:%M')

print (shipment['key'] + ' ' + name + ' ' + status)

# Get letters
print("Getting all letters, if that function is turned on")
letters = postnl.get_letters()
print (letters)
for letter in letters:
print(letter.debug_string)
```

## Miscellaneous
Expand Down
2 changes: 1 addition & 1 deletion postnl_api/__init__.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
from postnl_api.postnl_api import PostNL_API, UnauthorizedException
from .postnl_api import PostNL_API, UnauthorizedException
Empty file added postnl_api/items/__init__.py
Empty file.
18 changes: 18 additions & 0 deletions postnl_api/items/letter.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
from datetime import datetime


class Letter(object):
def __init__(self, data, documents):
self.id = data.get("barcode")
self.delivery_date = datetime.fromisoformat(data.get("expectedDeliveryDate"))
self.status_message = None
self.image = None

if data.get("phase") is not None:
self.status_message = data.get("phase").get("message")

if len(documents.get("documents")) > 0:
self.image = documents.get("documents")[0].get("link") + "?type=png"

def __str__(self):
return f"{self.id} {self.status_message} {self.delivery_date.date()}"
41 changes: 41 additions & 0 deletions postnl_api/items/package.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
from datetime import datetime


class Package(object):
def __init__(self, data):
self.id = data.get("key")
self.name = data.get("title")
self.type = data.get("settings").get("box")
self.status = data.get("status").get("deliveryStatus")
self.status_message = data.get("status").get("phase").get("message")
self.delivery_date = datetime.fromisoformat(
data.get("status").get("delivery").get("deliveryDate")
)
self.planned_date = None
self.planned_from = None
self.planned_to = None
if (
data.get("status").get("enroute") is not None
and data.get("status").get("enroute").get("timeframe") is not None
):
self.planned_date = datetime.fromisoformat(
data.get("status").get("enroute").get("timeframe").get("date")
)
self.planned_from = (
data.get("status").get("enroute").get("timeframe").get("from")
)
self.planned_to = (
data.get("status").get("enroute").get("timeframe").get("to")
)
self.url = data.get("status").get("webUrl")

@property
def is_delivered(self):
return self.status == "Delivered"

@property
def delivery_today(self):
return self.delivery_date.date() == datetime.today().date()

def __str__(self):
return f"{self.id} {self.name} {self.type} {self.status} {self.status_message} {self.delivery_date.date()} {self.planned_date} {self.planned_from} {self.planned_to}"
Loading