diff --git a/i3pystatus/parcel.py b/i3pystatus/parcel.py index ce04b8f..460abb6 100644 --- a/i3pystatus/parcel.py +++ b/i3pystatus/parcel.py @@ -19,6 +19,45 @@ class TrackerAPI: return "" +class DPD(TrackerAPI): + URL = "https://tracking.dpd.de/cgi-bin/simpleTracking.cgi?parcelNr={idcode}&type=1" + + def __init__(self, idcode): + self.idcode = idcode + self.url = self.URL.format(idcode=self.idcode) + + def status(self): + ret = {} + progress = "n/a" + status = "n/a" + + with urlopen(self.url) as page: + page = page.read() + page = page.decode("UTF-8") + page = page[1:-1] # strip parenthesis of the data + + try: + import json + + data = json.loads(page) + status = data["TrackingStatusJSON"]["statusInfos"][-1]["contents"][0]["label"] + delivery_status = data["TrackingStatusJSON"]["shipmentInfo"]["deliveryStatus"] + + # I'm not exactly sure what the deliveryStatus values mean. + # This may break if the package can't get delivered etc. + progress = delivery_status * 20 + except: + pass + + ret["progress"] = progress + ret["status"] = status + + return ret + + def get_url(self): + return "https://tracking.dpd.de/parcelstatus?query={idcode}".format(idcode=self.idcode) + + class DHL(TrackerAPI): URL = "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc={idcode}" @@ -133,10 +172,11 @@ class ParcelTracker(IntervalModule): """ Used to track parcel/shipments. - Supported carriers: DHL, UPS, Itella + Supported carriers: DHL, UPS, DPD, Itella - parcel.UPS("") - parcel.DHL("") + - parcel.DPD("") - parcel.Itella(""[, "en"|"fi"|"sv"]) Second parameter is language. Requires beautiful soup 4 (bs4)