102 lines
3.1 KiB
Python
102 lines
3.1 KiB
Python
# -*- coding: utf-8 -*-
|
|
|
|
import logging
|
|
from os import makedirs, path
|
|
from subprocess import check_output
|
|
from traceback import format_exc
|
|
from uuid import uuid4
|
|
|
|
from bs4 import BeautifulSoup
|
|
from libbot import config_get
|
|
|
|
from modules.utils import *
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
class EmptyCardException(Exception):
|
|
pass
|
|
|
|
|
|
async def getWaterLeft(cardid, filename, app=None):
|
|
url = f"https://bwtaqua.com.ua/card-topup/?id={cardid}"
|
|
|
|
try:
|
|
# if path.exists(f"data/pages/{str(filename)}.html") is False:
|
|
# run(["touch", f"data/pages/{str(filename)}.html"])
|
|
|
|
logger.info(f"Trying to get liters for url '{url}'")
|
|
|
|
if await config_get("use_compiled_page_saver") is True:
|
|
proc = check_output(
|
|
[
|
|
"PageSaver/pageSaver",
|
|
f"https://bwtaqua.com.ua/card-topup/?id={cardid}",
|
|
]
|
|
) # , ">", f"data/pages/{str(filename)}.html"])
|
|
html_file = proc.decode("utf-8")
|
|
else:
|
|
proc = check_output(
|
|
[
|
|
"node",
|
|
"./PageSaver/pageSaver.js",
|
|
f"https://bwtaqua.com.ua/card-topup/?id={cardid}",
|
|
]
|
|
) # , ">", f"data/pages/{str(filename)}.html"])
|
|
html_file = proc.decode("utf-8")
|
|
|
|
# with open(f'data/pages/{str(filename)}.html') as f:
|
|
# html_file = f.read()
|
|
# f.close()
|
|
|
|
soup = BeautifulSoup(html_file, "html.parser")
|
|
|
|
output = (
|
|
(
|
|
soup.find_all(
|
|
"h3",
|
|
class_="headline headline_center headline_pink js-payment-balance",
|
|
)[0].getText()
|
|
)
|
|
.replace("Твій баланс ", "")
|
|
.replace(" л", "")
|
|
)
|
|
|
|
logger.info(
|
|
f"Parsed {output} liters of water remaining (user: {str(filename)}, cardid: {cardid})"
|
|
)
|
|
|
|
except Exception as exp:
|
|
logger.exception(
|
|
f"Exception occured: {exp} (user: {str(filename)}, cardid: {cardid})", exp
|
|
)
|
|
|
|
try:
|
|
tmp_name = str(uuid4())
|
|
makedirs("tmp", exist_ok=True)
|
|
with open(path.join("tmp", tmp_name), "w", encoding="utf-8") as f:
|
|
f.write(html_file)
|
|
except NameError:
|
|
tmp_name = "N/A"
|
|
logger.warning(f"'html_file' is not defined so I won't gather any tmp data")
|
|
|
|
if app != None:
|
|
await app.send_message(
|
|
await config_get("owner_id"),
|
|
f"**Exception occured:**\n • User: `{str(filename)}`\n • Card: [{cardid}]({url})\n • Exception: `{exp}`\n • TMP UUID: `{tmp_name}`\n • Traceback: `{format_exc()}`",
|
|
disable_web_page_preview=True,
|
|
)
|
|
else:
|
|
logger.warning(f"Exception occurred and could not send to user: {exp}")
|
|
|
|
output = "Failure"
|
|
|
|
return output
|
|
|
|
|
|
if __name__ == "__main__":
|
|
cardid = input("Enter card number: ")
|
|
userid = input("Enter Telegram ID (optional): ")
|
|
|
|
print(f"Card has {str(getWaterLeft(cardid, userid, app=None))} l. left")
|