parcel: add UPS support

This commit is contained in:
enkore 2013-04-04 22:23:30 +02:00
parent d2f6dd97a5
commit 47cd088c1c

View File

@ -16,6 +16,7 @@ class TrackerAPI:
class DHL(TrackerAPI): class DHL(TrackerAPI):
URL="http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc={idcode}" URL="http://nolp.dhl.de/nextt-online-public/set_identcodes.do?lang=en&idc={idcode}"
def __init__(self, idcode): def __init__(self, idcode):
self.idcode = idcode self.idcode = idcode
self.url = self.URL.format(idcode=self.idcode) self.url = self.URL.format(idcode=self.idcode)
@ -41,6 +42,33 @@ class DHL(TrackerAPI):
def get_url(self): def get_url(self):
return self.url 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}"
def __init__(self, idcode):
self.idcode = idcode
self.url = self.URL.format(idcode=self.idcode)
error_selector = CSSSelector(".secBody .error")
self.error = lambda page: len(error_selector(page)) >= 1
self.status_selector = CSSSelector("#tt_spStatus")
self.progress_selector = CSSSelector(".pkgProgress div")
def status(self):
ret = {}
with urlopen(self.url) as page:
page = lxml.html.fromstring(page.read())
if self.error(page):
ret["progress"] = ret["status"] = "n/a"
else:
ret["status"] = self.status_selector(page)[0].text.strip()
progress_cls = int((int(self.progress_selector(page)[0].get("class").strip("staus")) + 1) / 4 * 100)
ret["progress"] = progress_cls
return ret
def get_url(self):
return self.url
class ParcelTracker(IntervalModule): class ParcelTracker(IntervalModule):
interval = 20 interval = 20