Skip to content

Commit

Permalink
add new emails
Browse files Browse the repository at this point in the history
  • Loading branch information
ljmerza committed Jan 18, 2023
1 parent 0b4d6e6 commit d1daa05
Show file tree
Hide file tree
Showing 5 changed files with 101 additions and 0 deletions.
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,10 @@ Supported Emails
- Manta Sleep
- Monoprice
- NewEgg
- Nintendo
- Nuleaf
- Paypal
- Pledge Box
- Philips Hue
- Prusa
- Reolink
Expand All @@ -34,6 +36,7 @@ Supported Emails
- Target
- Timeless
- The Smartest House
- Ubiquiti
- UPS
- USPS
- Wyze
Expand Down
26 changes: 26 additions & 0 deletions custom_components/email/parsers/nintendo.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import logging
import re

from bs4 import BeautifulSoup
from ..const import EMAIL_ATTR_BODY


_LOGGER = logging.getLogger(__name__)
ATTR_NINTENDO = 'nintendo'
EMAIL_DOMAIN_NINTENDO = 'nintendo.com'


def parse_nintendo(email):
"""Parse Nintendo tracking numbers."""
tracking_numbers = []

soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
links = [link.get('href') for link in soup.find_all('a')]
for link in links:
if not link:
continue
match = re.search('trackNums=(.*?)$', link)
if match and match.group(1) not in tracking_numbers:
tracking_numbers.append(match.group(1))

return tracking_numbers
28 changes: 28 additions & 0 deletions custom_components/email/parsers/pledgebox.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
import logging
import re

from bs4 import BeautifulSoup
from ..const import EMAIL_ATTR_BODY


_LOGGER = logging.getLogger(__name__)
ATTR_PLEDGEBOX = 'pledgebox'
EMAIL_DOMAIN_PLEDGEBOX = 'pledgebox.com'


def parse_pledgebox(email):
"""Parse Pledge Box tracking numbers."""
tracking_numbers = []

soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
lines = [element.text for element in soup.find_all('td')]
for line in lines:
if not line:
continue
match = re.search('^(\d{12})$', line)
_LOGGER.error(match)

if match and match.group(1) not in tracking_numbers:
tracking_numbers.append(match.group(1))

return tracking_numbers
38 changes: 38 additions & 0 deletions custom_components/email/parsers/ubiquiti.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
import logging
import re

from bs4 import BeautifulSoup
from ..const import EMAIL_ATTR_BODY, EMAIL_ATTR_SUBJECT


_LOGGER = logging.getLogger(__name__)
ATTR_UBIQUITI = 'ubiquiti'
EMAIL_DOMAIN_UBIQUITI = 'shopifyemail.com'


def parse_ubiquiti(email):
"""Parse Ubiquiti tracking numbers."""
tracking_numbers = []
_LOGGER.error(email)

# see if it's an shipped order email
order_number_match = re.search('A shipment from order #(.*?) is on the way', email[EMAIL_ATTR_SUBJECT])
_LOGGER.error(order_number_match)
if not order_number_match:
return tracking_numbers

order_number = order_number_match.group(1)

soup = BeautifulSoup(email[EMAIL_ATTR_BODY], 'html.parser')
links = [link.href for link in soup.find_all('a')]
for link in links:
if not link:
continue
match = re.search('/(\d{26})/orders/', link)
if match and link not in tracking_numbers:
tracking_numbers.append({
"tracking_number": order_number,
"link": link,
})

return tracking_numbers
6 changes: 6 additions & 0 deletions custom_components/email/sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,9 @@
from .parsers.gamestop import ATTR_GAMESTOP, EMAIL_DOMAIN_GAMESTOP, parse_gamestop
from .parsers.litter_robot import ATTR_LITTER_ROBOT, EMAIL_DOMAIN_LITTER_ROBOT, parse_litter_robot
from .parsers.the_smartest_house import ATTR_SMARTEST_HOUSE, EMAIL_DOMAIN_SMARTEST_HOUSE, parse_smartest_house
from .parsers.ubiquiti import ATTR_UBIQUITI, EMAIL_DOMAIN_UBIQUITI, parse_ubiquiti
from .parsers.nintendo import ATTR_NINTENDO, EMAIL_DOMAIN_NINTENDO, parse_nintendo
from .parsers.pledgebox import ATTR_PLEDGEBOX, EMAIL_DOMAIN_PLEDGEBOX, parse_pledgebox


parsers = [
Expand Down Expand Up @@ -92,6 +95,9 @@
(ATTR_GAMESTOP, EMAIL_DOMAIN_GAMESTOP, parse_gamestop),
(ATTR_LITTER_ROBOT, EMAIL_DOMAIN_LITTER_ROBOT, parse_litter_robot),
(ATTR_SMARTEST_HOUSE, EMAIL_DOMAIN_SMARTEST_HOUSE, parse_smartest_house),
(ATTR_UBIQUITI, EMAIL_DOMAIN_UBIQUITI, parse_ubiquiti),
(ATTR_NINTENDO, EMAIL_DOMAIN_NINTENDO, parse_nintendo),
(ATTR_PLEDGEBOX, EMAIL_DOMAIN_PLEDGEBOX, parse_pledgebox),
]

_LOGGER = logging.getLogger(__name__)
Expand Down

0 comments on commit d1daa05

Please sign in to comment.