Skip to content

Commit d1daa05

Browse files
committed
add new emails
1 parent 0b4d6e6 commit d1daa05

File tree

5 files changed

+101
-0
lines changed

5 files changed

+101
-0
lines changed

README.md

+3
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@ Supported Emails
2424
- Manta Sleep
2525
- Monoprice
2626
- NewEgg
27+
- Nintendo
2728
- Nuleaf
2829
- Paypal
30+
- Pledge Box
2931
- Philips Hue
3032
- Prusa
3133
- Reolink
@@ -34,6 +36,7 @@ Supported Emails
3436
- Target
3537
- Timeless
3638
- The Smartest House
39+
- Ubiquiti
3740
- UPS
3841
- USPS
3942
- Wyze
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import logging
2+
import re
3+
4+
from bs4 import BeautifulSoup
5+
from ..const import EMAIL_ATTR_BODY
6+
7+
8+
_LOGGER = logging.getLogger(__name__)
9+
ATTR_NINTENDO = 'nintendo'
10+
EMAIL_DOMAIN_NINTENDO = 'nintendo.com'
11+
12+
13+
def parse_nintendo(email):
14+
"""Parse Nintendo tracking numbers."""
15+
tracking_numbers = []
16+
17+
soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
18+
links = [link.get('href') for link in soup.find_all('a')]
19+
for link in links:
20+
if not link:
21+
continue
22+
match = re.search('trackNums=(.*?)$', link)
23+
if match and match.group(1) not in tracking_numbers:
24+
tracking_numbers.append(match.group(1))
25+
26+
return tracking_numbers
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import logging
2+
import re
3+
4+
from bs4 import BeautifulSoup
5+
from ..const import EMAIL_ATTR_BODY
6+
7+
8+
_LOGGER = logging.getLogger(__name__)
9+
ATTR_PLEDGEBOX = 'pledgebox'
10+
EMAIL_DOMAIN_PLEDGEBOX = 'pledgebox.com'
11+
12+
13+
def parse_pledgebox(email):
14+
"""Parse Pledge Box tracking numbers."""
15+
tracking_numbers = []
16+
17+
soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
18+
lines = [element.text for element in soup.find_all('td')]
19+
for line in lines:
20+
if not line:
21+
continue
22+
match = re.search('^(\d{12})$', line)
23+
_LOGGER.error(match)
24+
25+
if match and match.group(1) not in tracking_numbers:
26+
tracking_numbers.append(match.group(1))
27+
28+
return tracking_numbers
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
import logging
2+
import re
3+
4+
from bs4 import BeautifulSoup
5+
from ..const import EMAIL_ATTR_BODY, EMAIL_ATTR_SUBJECT
6+
7+
8+
_LOGGER = logging.getLogger(__name__)
9+
ATTR_UBIQUITI = 'ubiquiti'
10+
EMAIL_DOMAIN_UBIQUITI = 'shopifyemail.com'
11+
12+
13+
def parse_ubiquiti(email):
14+
"""Parse Ubiquiti tracking numbers."""
15+
tracking_numbers = []
16+
_LOGGER.error(email)
17+
18+
# see if it's an shipped order email
19+
order_number_match = re.search('A shipment from order #(.*?) is on the way', email[EMAIL_ATTR_SUBJECT])
20+
_LOGGER.error(order_number_match)
21+
if not order_number_match:
22+
return tracking_numbers
23+
24+
order_number = order_number_match.group(1)
25+
26+
soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
27+
links = [link.href for link in soup.find_all('a')]
28+
for link in links:
29+
if not link:
30+
continue
31+
match = re.search('/(\d{26})/orders/', link)
32+
if match and link not in tracking_numbers:
33+
tracking_numbers.append({
34+
"tracking_number": order_number,
35+
"link": link,
36+
})
37+
38+
return tracking_numbers

custom_components/email/sensor.py

+6
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@
5353
from .parsers.gamestop import ATTR_GAMESTOP, EMAIL_DOMAIN_GAMESTOP, parse_gamestop
5454
from .parsers.litter_robot import ATTR_LITTER_ROBOT, EMAIL_DOMAIN_LITTER_ROBOT, parse_litter_robot
5555
from .parsers.the_smartest_house import ATTR_SMARTEST_HOUSE, EMAIL_DOMAIN_SMARTEST_HOUSE, parse_smartest_house
56+
from .parsers.ubiquiti import ATTR_UBIQUITI, EMAIL_DOMAIN_UBIQUITI, parse_ubiquiti
57+
from .parsers.nintendo import ATTR_NINTENDO, EMAIL_DOMAIN_NINTENDO, parse_nintendo
58+
from .parsers.pledgebox import ATTR_PLEDGEBOX, EMAIL_DOMAIN_PLEDGEBOX, parse_pledgebox
5659

5760

5861
parsers = [
@@ -92,6 +95,9 @@
9295
(ATTR_GAMESTOP, EMAIL_DOMAIN_GAMESTOP, parse_gamestop),
9396
(ATTR_LITTER_ROBOT, EMAIL_DOMAIN_LITTER_ROBOT, parse_litter_robot),
9497
(ATTR_SMARTEST_HOUSE, EMAIL_DOMAIN_SMARTEST_HOUSE, parse_smartest_house),
98+
(ATTR_UBIQUITI, EMAIL_DOMAIN_UBIQUITI, parse_ubiquiti),
99+
(ATTR_NINTENDO, EMAIL_DOMAIN_NINTENDO, parse_nintendo),
100+
(ATTR_PLEDGEBOX, EMAIL_DOMAIN_PLEDGEBOX, parse_pledgebox),
95101
]
96102

97103
_LOGGER = logging.getLogger(__name__)

0 commit comments

Comments
 (0)