# -*- coding: utf-8 -*- from os import makedirs, path from subprocess import check_output from traceback import format_exc from uuid import uuid4 from functions import * from bs4 import BeautifulSoup config = jsonLoad("config.json") 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"]) appendLog(f"Trying to get liters for url '{url}'") if config["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(" л", "") ) appendLog( f"Parsed {output} liters of water remaining (user: {str(filename)}, cardid: {cardid})" ) except Exception as exp: appendLog(f"Exception occured: {exp} (user: {str(filename)}, cardid: {cardid})") 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" appendLog(f"'html_file' is not defined so I won't gather any tmp data") if app != None: await app.send_message( config["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: appendLog(f"Exception occured 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")