Untitled
unknown
plain_text
9 months ago
5.1 kB
13
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