diff options
-rw-r--r-- | README.md | 12 | ||||
-rw-r--r-- | e3372.py | 55 | ||||
-rw-r--r-- | main.py | 16 |
3 files changed, 68 insertions, 15 deletions
@@ -2,16 +2,8 @@ ## Requirements - - TODO - - -## Installation - - python3 -m venv venv - . ./venv/bin/activate - pip install wheel - pip install -r requirements.txt +* lxml (python3-lxml) +* see `requirements.txt` ## License @@ -1,6 +1,16 @@ import requests + +from datetime import datetime from bs4 import BeautifulSoup + +def build_request(params: dict): + items = [] + for key, value in params.items(): + items.append(f'<{key}>{value}</{key}>') + return '<request>'+''.join(items)+'</request>' + + class E3372: def __init__(self, ip: str): self.ip = ip @@ -25,7 +35,46 @@ class E3372: response = self.request('device/signal') print(response) - def request(self, endpoint: str, method='GET'): + def get_sms(self, count=10, page=1): + request = build_request({ + 'PageIndex': page, + 'ReadCount': count, + 'BoxType': 1, + 'SortType': 0, + 'Ascending': 0, + 'UnreadPreferred': 1 + }) + response = self.request('sms/sms-list', data=request) + + sms_list = [] + for message in response.find_all('Message'): + sms = SMS( + index=int(message.find('Index').get_text()), + phone=message.find('Phone').get_text(), + content=message.find('Content').get_text(), + date=message.find('Date').get_text() + ) + sms_list.append(sms) + + return sms_list + + + def send_sms(self): + pass + + def request(self, endpoint: str, data=None): url = f'http://{self.ip}/api/{endpoint}' - r = requests.get(url) if method == 'GET' else requests.post(url) - return BeautifulSoup(r.text, 'xml').find('response')
\ No newline at end of file + r = requests.get(url) if data is None else requests.post(url, data=data) + return BeautifulSoup(r.text, 'lxml-xml').find('response') + + +class SMS: + def __init__(self, index=None, phone=None, content=None, date=None): + self.index = index + self.phone = phone + self.content = content + self.date = date + + def timestamp(self): + # input example: 2020-08-11 14:55:51 + return int(datetime.strptime(self.date, '%Y-%m-%d %H-%M-%S').strftime("%s"))
\ No newline at end of file @@ -2,10 +2,22 @@ from argparse import ArgumentParser from pprint import pprint from e3372 import E3372 + def main(): - client = E3372('192.168.8.1') + parser = ArgumentParser() + parser.add_argument('--ip', + default='192.168.8.1', + help='Modem IP address') + args = parser.parse_args() + + client = E3372(args.ip) client.auth() - pprint(client.headers) + + messages = client.get_sms() + + for m in messages: + print(m) + if __name__ == '__main__': main() |