-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathUPSTrackingSystem.py
35 lines (28 loc) · 1.33 KB
/
UPSTrackingSystem.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
from TrackingSystem import *
from urllib.request import urlopen
from bs4 import BeautifulSoup
class UPSTrackingSystem(TrackingSystem):
url = 'https://www.ups.com/WebTracking/processInputRequest?loc=pl_PL&Requester=NES&tracknum='
def __init__(self, parcelNumber):
super(UPSTrackingSystem, self).__init__(parcelNumber)
def getData(self):
address = UPSTrackingSystem.url + self.parcelNumber
return urlopen(address).read()
def isValid(self):
self.clearState()
site = BeautifulSoup(self.getData(), "lxml")
return len(site.select(".dataTable")) > 0
def checkState(self):
self.clearState()
site = BeautifulSoup(self.getData(), "lxml")
table = site.select(".dataTable")[0]
table = table.find_all("tr")[1:]
self.state["Numer"] = self.parcelNumber
#Thats radical!
self.state["Planowane doręczenie"] = site.find("label", text = "Planowane doręczenie:").find_parent().find_parent().find("dd").text
for (i, row) in enumerate(table):
data = row.find_all("td")
data = list(map(lambda x: " ".join(x.text.split()), data))
if len(data[0]) == 0 and len(self.events) > 0:
data[0] = self.events[-1].place
self.events.append(Event("%s %s" % (data[1], data[2]), data[0], data[3]))