python教程

123网盘解析下载python脚本

我的站长站 2023-06-06 人阅读
import requests
import re
import tkinter as tk
from io import BytesIO
from urllib.request import urlopen
import base64
import json
class Form1(tk.Tk):
    def __init__(self):
        super().__init__()
        self.title("123Pan下载工具")
        self.geometry("400x300")
        self.label1 = tk.Label(self, text="请输入123盘的网址:")
        self.label1.pack()
        self.entry = tk.Entry(self, width=50)
        self.entry.pack()
        self.button1 = tk.Button(self, text="开始下载", command=self.download)
        self.button1.pack()
        self.label2 = tk.Label(self, text="提取下载链接:")
        self.label2.pack()
        self.label3 = tk.Label(self, text="")
        self.label3.pack()
        self.textbox = tk.Text(self, height=5, width=50)
        self.textbox.pack()
        self.button2 = tk.Button(self, text="清除输入", command=self.clear_input)
        self.button2.pack()
    def download(self):
        url = self.entry.get()
        share_id, share_Code = self.extract_id_and_code(url)
        if share_id:
            self.get_info(share_id, share_Code)
        else:
            tk.messagebox.showerror("错误", "没有找到123盘的网址!")
    def extract_id_and_code(self, url):
        share_id = re.search(r"(?<=/s/)[^./]+", url)
        share_Code = re.search(r"提取码:(\w+)", url)
        if share_id:
            share_id = share_id.group(0)
            if share_Code:
                share_Code = share_Code.group(1)
                if share_Code == "":
                    self.label3.config(text="")
                else:
                    self.label3.config(text="提取码:" + share_Code)
            return share_id, share_Code
        return None, None
    def get_info(self, share_id, share_Code):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100"
        }
        request_url = f"https://www.123pan.com/b/api/share/get?limit=100&next=1&orderBy=share_id&orderDirection=desc&shareKey={share_id}&SharePwd={share_Code}&ParentFileId=0&Page=1"
        response = requests.get(request_url, headers=headers)
        if response.status_code == 200:
            response_text = response.text
            self.parse_get_info(response_text, share_id)
        else:
            tk.messagebox.showerror("错误", "获取用户信息失败")
    def parse_get_info(self, response_text, share_id):
        data = json.loads(response_text)
        code = data["code"]
        if code == 0:
            info_list = data["data"]["InfoList"]
            if info_list:
                info = info_list[0]
                if info["Type"] == 0:
                    file_id = info["FileId"]
                    size = info["Size"]
                    s3_key_flag = info["S3KeyFlag"]
                    etag = info["Etag"]
                    self.combined_data(share_id, file_id, size, s3_key_flag, etag)
                else:
                    self.textbox.delete(1.0, tk.END)
                    self.textbox.insert(tk.END, "错误:软件目前不支持文件夹解析。")
        else:
            message = data["message"]
            tk.messagebox.showerror("错误", f"错误代码 {code}//{message}")
    def combined_data(self, share_id, file_id, size, s3_key_flag, etag):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100",
            "Content-Type": "application/json;charset=UTF-8"
        }
        url = "https://www.123pan.com/b/api/share/download/info"
        data = {
            "ShareKey": share_id,
            "FileID": file_id,
            "S3keyFlag": s3_key_flag,
            "Size": size,
            "Etag": etag
        }
        response = requests.post(url, headers=headers, json=data)
        if response.status_code == 200:
            response_text = response.text
            self.parse_download_url(response_text)
        else:
            tk.messagebox.showerror("错误", "获取下载链接失败")
    def parse_download_url(self, response_text):
        data = json.loads(response_text)
        code = data["code"]
        if code == 0:
            download_url = data["data"]["DownloadURL"]
            decoded_url = self.extract_download_url(download_url)
            self.get_xz_url(decoded_url)
        else:
            message = data["message"]
            tk.messagebox.showerror("错误", f"错误代码 {code}//{message}")
    def extract_download_url(self, url):
        params_match = re.search(r"params=([^&]+)", url)
        if params_match:
            params_value = params_match.group(1)
            decoded_bytes = base64.b64decode(params_value)
            decoded_string = decoded_bytes.decode("utf-8")
            if "auto_redirect" not in decoded_string:
                if "?" in decoded_string:
                    decoded_string += "&auto_redirect=0"
                else:
                    decoded_string += "?auto_redirect=0"
            return decoded_string
        else:
            tk.messagebox.showerror("错误", "提取DownloadURL失败")
    def get_xz_url(self, request_url):
        headers = {
            "User-Agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/109.0.0.0 Safari/537.36 Edg/109.0.1518.100"
        }
        response = requests.get(request_url, headers=headers)
        if response.status_code == 200:
            response_text = response.text
            self.parse_xz_url(response_text)
        else:
            tk.messagebox.showerror("错误", "获取直链失败")
    def parse_xz_url(self, response_text):
        data = json.loads(response_text)
        code = data["code"]
        if code == 0:
            redirect_url = data["data"]["redirect_url"]
            self.textbox.delete(1.0, tk.END)
            self.textbox.insert(tk.END, redirect_url)
        else:
            message = data["message"]
            tk.messagebox.showerror("错误", f"错误代码 {code}//{message}")
    def clear_input(self):
        self.entry.delete(0, tk.END)
        self.textbox.delete(1.0, tk.END)
if __name__ == "__main__":
    form = Form1()
    form.mainloop()


相关推荐
  • Python脚本
  • 网盘解析
  • 123网盘
  • 监测腾讯云轻量服务器流量超标关机python脚本

    脚本介绍一款监测腾讯云轻量应用服务器流量包使用情况,并根据配置进行警告和关机的Python脚本。GitHub:https://github.com/XiaoXinYo/Tencent_Cloud_LightHouse_Server_Guardian脚本功能仅用于轻量级服务器1.自动检测流量包剩余,可设置使用比2.自动关...

    python教程 79 2年前
  • Python无需认证QQ扫码登录脚本

    无需认证QQ扫码登录脚本python脚本,盗用JD的QQ登录,也可以改成其他网址。无需自己注册腾讯开发者,无需自己有一套网址去申请应用Get_QQ返回QQ号,也可以获取到QQ头像、好友等其他信息,请勿用于非法行为import requestsimport timefrom PIL import Imagedef...

    python教程 303 2年前
  • 最新python织梦dedecms远程执行脚本

    织梦CMS是使用最多的CMS之 一,但是漏洞也非常多。分享一款python写的织梦远程文件包含漏洞。修复此漏洞方法,请见文章底部。织梦CMS漏洞代码#! /usr/bin/env python#coding=utf-8#Joseph(小续)import requestsimport sysimport redef main():try:url="...

    服务器配置 284 4年前
  • 123网盘在线解析下载网站源码
    123网盘在线解析下载网站源码

    源码简介123网盘在线解析下载网站源码,单文件PHP源码,只需在相关网站上找到资源链接,然后粘贴到123网盘解析PHP版本源码中进行解析,即可在网页上直接解析出下载链接。...

    php源码 596 10个月前
  • 百度网盘直连解析+aria2不限速下载方法

    本文分享的是利用第三方百度网盘直连解析工具+aria2软件来达到百度网盘不限速下载的方法,大家看操作。1、下载aria2,这里推荐这个版本:https://dl.motrix.app/release/Motrix-Setup-1.6.11.exe,然后安装。2、打开这个网站:https://baidu.kinh.cc/,分享链接...

    经验分享 3695 2年前
  • 158网盘直连解析代码

    API代码<?php/*** @package 158Pan* @author Andy* @version 1.2.0* @link https://lsland.cn*/// 指定允许其他域名访问 header(&#39;Access-Control-Allow-Origin:*&#39;);header(&#39;content-type:application/json;charset:utf-8&#39;);functi...

    php教程 132 2年前
  • 123网盘解析下载python脚本

    import requestsimport reimport tkinter as tkfrom io import BytesIOfrom urllib.request import urlopenimport base64import jsonclass Form1(tk.Tk): def __init__(self): super().__init__() self.title("123Pan下载工具") ...

    python教程 545 10个月前
  • 123网盘在线解析下载网站源码
    123网盘在线解析下载网站源码

    源码简介123网盘在线解析下载网站源码,单文件PHP源码,只需在相关网站上找到资源链接,然后粘贴到123网盘解析PHP版本源码中进行解析,即可在网页上直接解析出下载链接。...

    php源码 596 10个月前
  • 123网盘直连解析下载php源码

    一段123网盘直连解析下载源码,css样式都有,界面也很不错,复制到PHP环境即可运行。<!DOCTYPE html><html><head> <title>123解析</title> <style> body { font-family: "Helvetica Neue", Arial, sans-serif; backgr...

    php教程 83 9个月前
最新更新