qianaonan 发表于 2024-6-1 17:49

python写一个小米rom下载直链获取器(卡刷包)

本帖最后由 qianaonan 于 2024-10-22 19:20 编辑

win1164位打包有可能32位的无法使用
转载需注明来源与作者!
转载需注明来源与作者!
转载需注明来源与作者!
重要的事情说三遍!import wx
import os
import sys
import json
import base64
import io
from 爬系统 import requests_xiaomi, requests_root, requests_num, requests_url,convert_img
def on_restart_click(self, event):
    if hasattr(sys, 'frozen'):
      executable = sys.executable
    else:
      executable = sys.executable
    os.execl(executable, executable, *sys.argv)
def get_mid_string(html, start_str, end):
    try:
      start = html.find(start_str)
      if start >= 0:
            start += len(start_str)
            end = html.find(end, start)
            if end >= 0:
                return html.strip()
    except:
      return None
file_path = r'D:\xiaomi.json'
if not os.path.exists(file_path):
    requests_xiaomi(file_path)
jixing_list = []
with open(file_path, 'r', encoding='utf-8') as f:
    stored_paragraphs = json.load(f)
for i in range(0, 10000):
    try:
      jixing_list.append(stored_paragraphs['机型'])
    except IndexError:
      break
device_versions = {item["机型"]: item["系统版本"] for item in stored_paragraphs}
# 将图片文件转换为 Base64 编码
def image_to_base64(image_path):
    with open(image_path, "rb") as image_file:
      image_data = image_file.read()
      base64_encoded_data = base64.b64encode(image_data)
      base64_message = base64_encoded_data.decode('utf-8')
    return base64_message

# 示例 Base64 编码的图片数据(请替换为你的 Base64 数据)
base64_image_data = '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'


class MyApp(wx.App):
    def OnInit(self):
      self.frame = Frame(None, title="Base64 Image Example")
      self.SetTopWindow(self.frame)
      self.frame.Show()
      return True
class Frame(wx.Frame):
    url = ''

    def __init__(self):
      # 解码 Base64 编码的图片数据
      image_data = base64.b64decode(base64_image_data)
      # 使用 io.BytesIO 将二进制数据转换为文件对象
      image_stream = io.BytesIO(image_data)
      # 从文件对象加载图片
      image = wx.Image(image_stream, wx.BITMAP_TYPE_PNG)
      # 转换为 wx.Bitmap
      bitmap = image.ConvertToBitmap()
      wx.Frame.__init__(self, None, title='原创:吾爱qianaonan', size=(580, 300), name='frame', style=541072384)
      icon = wx.Icon(bitmap)
      self.SetIcon(icon)
      self.启动窗口 = wx.Panel(self)
      self.Centre()
      vbox = wx.BoxSizer(wx.VERTICAL)
      self.组合框1 = wx.ComboBox(self.启动窗口, value='', pos=(115, 59), name='comboBox1', choices=jixing_list,
                                 style=wx.CB_DROPDOWN | wx.EXPAND)
      self.组合框1.Bind(wx.EVT_TEXT, self.on_text_changed)
      self.组合框1.Bind(wx.EVT_COMBOBOX, self.on_combobox_select)
      self.组合框1.Bind(wx.EVT_COMBOBOX_DROPDOWN, self.组合框1_弹出列表项)
      self.组合框1.Bind(wx.EVT_COMBOBOX_CLOSEUP, self.组合框1_收起列表项)
      self.组合框1.SetSize((147, 22))# 设置宽度为147
      vbox.Add(self.组合框1, proportion=0, flag=wx.ALL | wx.EXPAND, border=10)
      self.ignore_text_change = False
      self.组合框2 = wx.ComboBox(self.启动窗口, value='', pos=(115, 98), name='comboBox2', choices=[], style=16)
      self.组合框2.SetSize((147, 22))
      self.组合框2.Bind(wx.EVT_COMBOBOX_DROPDOWN, self.组合框2_弹出列表项)
      self.组合框2.Bind(wx.EVT_COMBOBOX, self.组合框2_选中列表项)
      self.标签1 = wx.StaticText(self.启动窗口, size=(39, 16), pos=(32, 63), label='机型', name='staticText',
                                 style=2321)
      self.标签2 = wx.StaticText(self.启动窗口, size=(56, 16), pos=(23, 101), label='某国系统', name='staticText',
                                 style=2321)
      self.标签3 = wx.StaticText(self.启动窗口, size=(101, 24), pos=(2, 140), label='开发板/稳定版',
                                 name='staticText', style=2321)
      self.组合框3 = wx.ComboBox(self.启动窗口, value='', pos=(115, 137), name='comboBox3', choices=[], style=16)
      self.组合框3.SetSize((147, 22))
      self.组合框3.Bind(wx.EVT_COMBOBOX_CLOSEUP, self.组合框3_收起列表项)
      self.标签4 = wx.StaticText(self.启动窗口, size=(80, 24), pos=(12, 178), label='系统版本号', name='staticText',
                                 style=2321)
      self.组合框4 = wx.ComboBox(self.启动窗口, value='', pos=(115, 174), name='comboBox4', choices=[], style=16)
      self.组合框4.SetSize((147, 22))
      self.组合框4.Bind(wx.EVT_COMBOBOX_CLOSEUP, self.组合框4_收起列表项)
      self.编辑框1 = wx.TextCtrl(self.启动窗口, size=(248, 215), pos=(296, 25), value='下载链接', name='text',
                                 style=wx.TE_MULTILINE|wx.TE_WORDWRAP|wx.TE_READONLY)
      self.按钮1 = wx.Button(self.启动窗口, size=(80, 32), pos=(172, 212), label='确认', name='button')
      self.按钮1.Bind(wx.EVT_BUTTON, self.按钮1_按钮被单击)
      self.按钮2 = wx.Button(self.启动窗口, size=(80, 32), pos=(81, 211), label='刷新', name='button')
      self.按钮2.Bind(wx.EVT_BUTTON, self.按钮2_按钮被单击)
      self.标签5 = wx.StaticText(self.启动窗口,size=(79, 24),pos=(1, 215),label='刷新json文件',name='staticText',style=2321)
      image = image.Scale(50, 50, wx.IMAGE_QUALITY_HIGH)
      bitmap = wx.Bitmap(image)
      self.图片框1 = wx.StaticBitmap(self.启动窗口,size=(50, 50),pos=(19, 5),name='staticBitmap',style=0,bitmap=bitmap)
    def 组合框1_收起列表项(self, event):
      self.ignore_text_change = False
    def 组合框1_弹出列表项(self, event):
      self.组合框1.AppendItems(jixing_list)
    def on_text_changed(self, event):
      if self.ignore_text_change:
            return
      text = self.组合框1.GetValue().lower()
      matched_options =
      self.ignore_text_change = True
      self.组合框1.Set(matched_options)
      self.组合框1.SetValue(text)
      self.组合框1.SetInsertionPointEnd()
      self.ignore_text_change = False
    def on_combobox_select(self, event):
      self.ignore_text_change = True
      selected_value = self.组合框1.GetStringSelection()
      self.组合框1.SetValue(selected_value)
    def 组合框2_弹出列表项(self, event):
      self.组合框2.Clear()
      self.组合框2.SetItems(list(device_versions.get(self.组合框1.GetValue())))
    def 组合框2_选中列表项(self, event):
      phone = self.组合框1.GetValue()
      contry = self.组合框2.GetValue()
      self.组合框3.SetItems(requests_root(file_path,phone, contry))
    def 组合框3_收起列表项(self, event):
      phone = self.组合框1.GetValue()
      contry = self.组合框2.GetValue()
      banben_root = self.组合框3.GetValue()
      version_list = requests_num(file_path,phone, contry, banben_root)
      if version_list:
            self.组合框4.SetItems(version_list)
    def 组合框4_收起列表项(self, event):
      phone = self.组合框1.GetValue()
      contry = self.组合框2.GetValue()
      banben_root = self.组合框3.GetValue()
      text =requests_num(file_path,phone, contry, banben_root)#
      #print(text)
      if self.组合框3.GetValue() not in "稳定版":
            url1 = 'https://xiaomirom.com/download/' + get_mid_string(text, '/download/', '-stable-') + '-weekly-' + self.组合框4.GetValue().strip() + '/#china-recovery'
      else:
            url1 = 'https://xiaomirom.com/download/' + get_mid_string(text, '/download/','-stable-') + '-stable-' + self.组合框4.GetValue().strip() + '/#china-recovery'
      self.url = requests_url(url1)
    def 按钮1_按钮被单击(self, event):
      self.编辑框1.SetValue("\n\n".join(self.url))
    def 按钮2_按钮被单击(self, event):
      requests_xiaomi(file_path)
      on_restart_click(self, event)
class myApp(wx.App):
    def OnInit(self):
      self.frame = Frame()
      self.frame.Show(True)
      return True
if __name__ == '__main__':
    app = myApp()   
    app.MainLoop()
import requests
from lxml import html,etree
import json
import os
import re
import sys
from bs4 import BeautifulSoup
req = requests.session()
def on_restart_click(self, event):
    if hasattr(sys, 'frozen'):
      executable = sys.executable
    else:
      executable = sys.executable
    os.execl(executable, executable, *sys.argv)
def get_rom_url(file_path,device_name, version_name):
    with open(file_path, 'r', encoding='utf-8') as f:
      data = json.load(f)
    for device in data:
      if device["机型"] == device_name:
            return device["系统版本"].get(version_name, "版本名未找到")
    return "机型未找到"
def requests_xiaomi(file_path):
    data = []
    a = req.get('https://xiaomirom.com/series/')
    a.encoding = 'utf-8'
    tree = html.fromstring(a.content)
    for i in range(1, 1000):
      jixing = tree.xpath(f'/html/body/section/div/div/div/div/dl/dt[{i}]/a/text()')
      if not jixing:
            break
      jixing_name = jixing.strip()
      version_list = {}
      for a in range(1, 10):
            xitongbanben = tree.xpath(f'/html/body/section/div/div/div/div/dl/dd[{i}]/a[{a}]/text()')
            xitong_url = tree.xpath(f'/html/body/section/div/div/div/div/dl/dd[{i}]/a[{a}]/@href')
            if not xitongbanben:
                break
            version_list.strip()] = xitong_url.strip()
      data.append({"机型": jixing_name, "系统版本": version_list})
    with open(file_path, 'w', encoding='utf-8') as json_file:
      json.dump(data, json_file, ensure_ascii=False, indent=4)
def requests_root(file_path,phone, country):
    with open(file_path, 'r', encoding='utf-8') as f:
      data = json.load(f)
    url = None
    for item in data:
      if item["机型"] == phone:
            system_versions = item["系统版本"]
            if country in system_versions:
                url = system_versions
                break
    if not url:
      return None
    req = requests.session()
    a = req.get(url)
    a.encoding = 'utf-8'
    tree1 = html.fromstring(a.content)
    no_root = tree1.xpath(
      '/html/body/section/div/div/div/div/section/div/div/div/div/div/ul/li/a/span/text()')
    root = tree1.xpath('/html/body/section/div/div/div/div/section/div/div/div/div/div/ul/li/a/span/text()')
    if root and int(root) != 0:
      root_list=['稳定版', '开发版/内测版']
    else:
      root_list=['稳定版']
    return root_list
xitong_root=[]
def requests_num(file_path,phone, country,banban_root):
    req = requests.session()
    #print(get_rom_url(phone,country))
    a = req.get(get_rom_url(file_path,phone,country))
    a.encoding = 'utf-8'
    parse_html = etree.HTML(a.text)
    c = parse_html.xpath('//strong/text()')
    del c[:5]
    xi_list = []
    for i in c:
      if "下载" in i:
            i = i.replace("下载", "")
            xi_list.append(i)
      else:
            xi_list.append(i)
    result_dict = {}
    grouped_data = for i in range(0, len(xi_list), 3)]
    for group in grouped_data:
      if group and len(group) == 3:
            if 'Fastboot' not in group:
                key = group
                value = group
                if key in result_dict:
                  result_dict.append(value)
                else:
                  result_dict =
    key_to_find = banban_root
    values=None
    if key_to_find in result_dict:
      values = result_dict
    soup = BeautifulSoup(a.content, 'html.parser')
    text_to_find = '下载'
    links = []
    for a in soup.find_all('a', string=text_to_find):
      href = a.get('href')
      if href:
            links.append(href)
      href=links
    returnvalues,href
def requests_url(text):
    a=req.get(text)
    a.encoding='urf-8'
    soup = BeautifulSoup(a.content, 'html.parser')
    buttons = soup.find_all('button', class_='btn btn-warning')
    download_links = []
    for button in buttons:
      onclick_value = button.get('onclick', '')
      link_start = onclick_value.find("'") + 1
      link_end = onclick_value.find("'", link_start)
      download_link = onclick_value
      download_links.append(download_link)
    for link in download_links:
      if ".zip" in link:
            s=re.search(r'\.com/(.*)', link).group(1)
            s1='https://bn.d.miui.com/'+s
            s2='https://cdnorg.d.miui.com/'+s
            s3='https://bkt-sgp-miui-ota-update-alisgp.oss-ap-southeast-1.aliyuncs.com/'+s
            return link,s1,s2,s3
两个py文件交互使用,我电脑上运行没问题,运行该程序会在D盘创建一个xiaomi.json用于保存相应的数据,免得下次使用还要获取一次,里面数据获取速度根据自己的网速决定,requests爬虫都要考虑到速度,下载链接可以用于迅雷、idm、ndm等,不对下载速度做保证。
机型下拉框有搜索功能。
老规矩:
蓝奏云:https://wwm.lanzout.com/i8h6U20ow01a
百度云链接:链接:https://pan.baidu.com/s/1-gsxmAk3AZdOq3tDXafCSg?pwd=xydy
已解决图片加载问题

qianaonan 发表于 2024-6-1 18:50

本帖最后由 qianaonan 于 2024-6-1 18:54 编辑

只体版新 发表于 2024-6-1 18:44

我设置的图标问题,可以以下内容删掉
image_path = r'D:\Desktop\7-210503214Ja07.png'
      image = wx.Image(image_path, wx.BITMAP_TYPE_PNG)
      image = image.Scale(50, 50, wx.IMAGE_QUALITY_HIGH)
      bitmap = wx.Bitmap(image)
      self.图片框1 = wx.StaticBitmap(self.启动窗口,size=(50, 50),pos=(19, 5),name='staticBitmap',style=0,bitmap=bitmap)

icon = wx.Icon(r'D:\Desktop\7-210503214Ja07.png')
      self.SetIcon(icon)
也可以重新复制代码,已经将那几行删掉了。

qianaonan 发表于 2024-6-29 15:50

amun 发表于 2024-6-29 14:24
小米的先都要先解锁吧

特老的机型不用,我记得小米6之前的可以不用,后面都需要的。出厂为miui系统的一般绑定7天可以解,如果升级了hyperos可以靠软件解,出厂为hyperos的得有解锁权限

只体版新 发表于 2024-6-1 18:44

https://pic.rmb.bdstatic.com/bjh/240601/dbf8e48248d342fed42c7b0b38f5506a3113.png

沧海轻舟 发表于 2024-6-1 20:04

感谢分享

qwq5555 发表于 2024-6-1 20:06

好好,正好借此学习一下

877 发表于 2024-6-1 21:53

正好需要刷机

loveyao6688 发表于 2024-6-1 22:14

感谢大佬,找了很久。速度都上不去

xt202403 发表于 2024-6-2 07:39

刚需啊,好东西

JUNWO999 发表于 2024-6-2 09:45

正好借此学习一下

kkblog 发表于 2024-6-2 09:52

只体版新 发表于 2024-6-1 18:44


俺也一样
页: [1] 2 3
查看完整版本: python写一个小米rom下载直链获取器(卡刷包)