Untitled

 avatar
unknown
plain_text
2 months ago
5.1 kB
3
Indexable
import os
import sys
import json
import requests
from argparse import ArgumentParser

try:
    from utils import crypto
    from utils import data
    from utils.logger import Logger
    from utils.request import Request
except ImportError:
    from realme_ota.utils import crypto
    from realme_ota.utils import data
    from realme_ota.utils.request import Request
    from realme_ota.utils.logger import Logger

def main():
    parser = ArgumentParser()
    verbosity = parser.add_mutually_exclusive_group()
    verbosity.add_argument("-v", "--verbosity", type=int, choices=range(0, 6), default=4, help="Set the verbosity level. Range: 0 (no logging) to 5 (debug). Default: 4 (info).")
    verbosity.add_argument("-s", "--silent", action='store_true', help="Enable silent output (purge logging). Shortcut for '-v0'.")
    parser.add_argument("product_model", type=str, help="Product Model (ro.product.name).")
    parser.add_argument("ota_version", help="OTA Version (ro.build.version.ota).")
    parser.add_argument("rui_version", type=int, choices=[1, 2, 3, 4, 5], help="RealmeUI Version (ro.build.version.realmeui).")
    parser.add_argument("nv_identifier", type=str, nargs='?', help="NV (carrier) identifier (ro.build.oplus_nv_id) (if none, provide 0 or omit).")
    req_opts = parser.add_argument_group("request options")
    req_opts.add_argument("-r", "--region", type=int, choices=[0, 1, 2, 3], default=0, help="Use custom region for the request (GL = 0, CN = 1, IN = 2, EU = 3).")
    req_opts.add_argument("-g", "--guid", type=str, default="0", help="The guid of the third line in the file /data/system/openid_config.xml (only required to extract 'CBT' in China).")
    req_opts.add_argument("-i", "--imei", type=str, nargs='+', help="Specify one or two IMEIs for the request.")
    req_opts.add_argument("-b", "--beta", action='store_true', help="Try to get a test version (IMEI probably required).")
    req_opts.add_argument("-l", "--language", type=str, default=None, help="Specify the language of response (en-EN by default, zh-CN in China).")
    req_opts.add_argument("--old-method", action='store_true', help="Use old method for the request (only applies if rui_version >= 2).")
    out_opts = parser.add_argument_group("output options")
    out_opts.add_argument("-d", "--dump", type=str, help="Save request response into a file.")
    out_opts.add_argument("-o", "--only", type=str, help="Only show the desired value from the response.")
    args = parser.parse_args()
    
    logger = Logger(level=0 if args.silent else args.verbosity)
    
    request = Request(
        req_version=1 if (args.old_method or args.rui_version == 1) else 2,
        model=args.product_model,
        ota_version=args.ota_version,
        rui_version=args.rui_version,
        nv_identifier=args.nv_identifier,
        region=args.region,
        deviceId=args.guid,
        imei0=args.imei[0] if args.imei and len(args.imei) > 0 else None,
        imei1=args.imei[1] if args.imei and len(args.imei) > 1 else None,
        beta=args.beta,
        language=args.language
    )
    
    logger.log(f"Load payload for {args.product_model} (RealmeUI V{args.rui_version})")
    
    try:
        request.set_vars()
        req_body, req_hdrs, plain_body = request.set_body_headers()
    except Exception as e:
        logger.die(f"Error setting request variables: {e}", 2)
    
    logger.log("Waiting for the server response...")
    
    try:
        response = requests.post(request.url, data=request.body, headers=request.headers, timeout=30)
        response.raise_for_status()
    except Exception as e:
        logger.die(f"Request failed: {e}", 1)
    
    try:
        json_response = json.loads(response.content)
        server_data = json.loads(request.decrypt(json_response[request.resp_key]))
    except Exception as e:
        logger.die(f"Failed to parse server response: {e}", 2)
    
    logger.log("Data received successfully!")
    
    # Обработка и запись данных в текстовый файл
    try:
        version_name = server_data.get("versionName", "Unknown Version")
        description_url = server_data.get("description", {}).get("url", "No Description URL")
        update_url = server_data.get("components", [{}])[0].get("componentPackets", {}).get("url", "No Update URL")
        phone_model = args.product_model
        
        output_text = f"""
        ----------------------------------
        *{phone_model}*
        Версия: {version_name}
        Изменения: {description_url}
        Ссылка: {update_url}
        ----------------------------------
        """.strip()
        
        with open("update_info.txt", "w", encoding="utf-8") as file:
            file.write(output_text + "\n")
            
        logger.log("Data successfully saved to update_info.txt!")
    except Exception as e:
        logger.die(f"Error writing to file: {e}", 1)

if __name__ == "__main__":
    main()
Editor is loading...
Leave a Comment