From a898110d7e1e3d6ea07bb90a88455da6f1eca169 Mon Sep 17 00:00:00 2001 From: Arvedui Date: Sat, 19 Apr 2014 20:50:41 +0200 Subject: [PATCH] rewritten DHL function in parcel modul fixed #28 --- i3pystatus/parcel.py | 45 +++++++++++++++++++++++++++++++------------- 1 file changed, 32 insertions(+), 13 deletions(-) diff --git a/i3pystatus/parcel.py b/i3pystatus/parcel.py index be572d1..21769da 100644 --- a/i3pystatus/parcel.py +++ b/i3pystatus/parcel.py @@ -18,36 +18,55 @@ class TrackerAPI: return {} -"""class DHL(TrackerAPI): +class DHL(TrackerAPI): URL = "http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc={idcode}" def __init__(self, idcode): self.idcode = idcode self.url = self.URL.format(idcode=self.idcode) - error_selector = CSSSelector("#set_identcodes .error") - self.error = lambda page: len(error_selector(page)) >= 1 - self.progress_selector = CSSSelector( - ".greyprogressbar > span, .greenprogressbar > span") - self.last_status_selector = CSSSelector(".events .eventList tr") - self.intrarow_status_selector = CSSSelector("td.status div") + def error(self, page): + result = ''.join(page.xpath('//div[@class="col col-lg-12"]/h2/text()')) + + if self.idcode in result: + return False + return True + + def get_progress(self, page): + elements = page.xpath('//tr[@class="mm_mailing_process "]/td/ul/li') + + for i, element in enumerate(elements, 1): + picture_link = ''.join(element.xpath('./img/@src')).lower() + + if 'active' in picture_link: + status = ''.join(element.xpath('./img/@alt')) + + progress = '%i' % (i/len(elements)*100) + + elif 'default' in picture_link: + break + + return progress, status def status(self): ret = {} with urlopen(self.url) as page: + #with open('/home/marcel/ownCloud/dhl_site/paketzentrum/DHL Sendungsverfolgung.htm', 'r') as page: page = lxml.html.fromstring(page.read()) - if self.error(page): + + if not self.error(page): ret["progress"] = ret["status"] = "n/a" + else: - ret["progress"] = self.progress_selector(page)[0].text.strip() - last_row = self.last_status_selector(page)[-1] - ret["status"] = self.intrarow_status_selector( - last_row)[0].text.strip() + progress, status = self.get_progress(page) + ret["progress"] = progress + ret["status"] = status + return ret def get_url(self): return self.url -""" + class UPS(TrackerAPI): URL = "http://wwwapps.ups.com/WebTracking/processRequest?HTMLVersion=5.0&Requester=NES&AgreeToTermsAndConditions=yes&loc=en_US&tracknum={idcode}"