找回密码
 立即注册
查看: 97|回复: 2

VIP闊充箰鐖櫕

[复制链接]

1881

主题

0

回帖

1881

积分

金牌会员

积分
1881
发表于 2023-8-26 20:52:09 | 显示全部楼层 |阅读模式
VIP闊充箰鐖櫕
  1. import osimport tkinter as tkimport webbrowserimport requestsimport tkinter.messagebox as mes_boximport PySimpleGUI as sgfrom tkinter import ttkfrom retrying import retryclass SetUI(object):    """    闊充箰寮规鐣岄潰    """    def __init__(self, weight=1000, height=600):        self.ui_weight = weight        self.ui_height = height        self.title = "   "        self.ui_root = tk.Tk(className=self.title)        self.ui_url = tk.StringVar()        self.ui_var = tk.IntVar()        self.ui_var.set(1)        self.show_result = None        self.song_num = None        self.response_data = None        self.song_url = None        self.song_name = None        self.song_author = None    def set_ui(self):        """        璁剧疆绠鏄揢I鐣岄潰        :return:        """        # Frame绌洪棿        frame_1 = tk.Frame(self.ui_root)        frame_2 = tk.Frame(self.ui_root)        frame_3 = tk.Frame(self.ui_root)        frame_4 = tk.Frame(self.ui_root)        # ui鐣岄潰涓彍鍗曡璁        ui_menu = tk.Menu(self.ui_root)        self.ui_root.config(menu=ui_menu)        file_menu = tk.Menu(ui_menu, tearoff=0)        ui_menu.add_cascade(label='鑿滃崟', menu=file_menu)        # file_menu.add_command(label='浣跨敤璇存槑', command=lambda: webbrowser.open('www.baidu.com'))        # file_menu.add_command(label='鍏充簬浣滆', command=lambda: webbrowser.open('www.baidu.com'))        file_menu.add_command(label='閫鍑', command=self.ui_root.quit)        # 鎺т欢鍐呭璁剧疆        choice_passageway = tk.Label(frame_1, text='璇烽夋嫨闊充箰鎼滅储閫氶亾锛', padx=10, pady=10)        # passageway_button_1 = tk.Radiobutton(frame_1, text='閰锋垜', variable=self.ui_var, value=1, width=10, height=3)        # passageway_button_2 = tk.Radiobutton(frame_1, text='缃戞槗浜', variable=self.ui_var, value=2, width=10, height=3)        # passageway_button_3 = tk.Radiobutton(frame_1, text='QQ闊充箰', variable=self.ui_var, value=3, width=10, height=3)        # passageway_button_4 = tk.Radiobutton(frame_1, text='閰锋垜', variable=self.ui_var, value=4, width=10, height=3)        input_link = tk.Label(frame_2, text="璇疯緭鍏ユ瓕鏇插悕鎴栨瓕鎵嬶細")        entry_style = tk.Entry(frame_2, textvariable=self.ui_url, highlightcolor='Fuchsia', highlightthickness=1,                               width=35)        label2 = tk.Label(frame_2, text=" ")        play_button = tk.Button(frame_2, text="鎼滅储", font=('妤蜂綋', 11), fg='Purple', width=2, height=1,                                command=self.get_KuWoMusic)        label3 = tk.Label(frame_2, text=" ")        # 琛ㄦ牸鏍峰紡        columns = ("搴忓彿", "姝屾墜", "姝屾洸", "涓撹緫")        self.show_result = ttk.Treeview(frame_3, height=20, show="headings", columns=columns)        # 涓嬭浇        download_button = tk.Button(frame_4, text="涓嬭浇", font=('妤蜂綋', 11), fg='Purple', width=6, height=1, padx=5,                                    pady=5, command=self.download_music)        # 鎺т欢甯冨眬        frame_1.pack()        frame_2.pack()        frame_3.pack()        frame_4.pack()        choice_passageway.grid(row=0, column=0)        # passageway_button_1.grid(row=0, column=1)        # passageway_button_2.grid(row=0, column=2)        # passageway_button_3.grid(row=0, column=3)        # passageway_button_4.grid(row=0, column=4)        input_link.grid(row=0, column=0)        entry_style.grid(row=0, column=1)        label2.grid(row=0, column=2)        play_button.grid(row=0, column=3, ipadx=10, ipady=10)        label3.grid(row=0, column=4)        self.show_result.grid(row=0, column=4)        download_button.grid(row=0, column=5)        # 璁剧疆琛ㄥご        self.show_result.heading("搴忓彿", text="搴忓彿")        self.show_result.heading("姝屾墜", text="姝屾墜")        self.show_result.heading("姝屾洸", text="姝屾洸")        self.show_result.heading("涓撹緫", text="涓撹緫")        # 璁剧疆鍒        self.show_result.column("搴忓彿", width=100, anchor='center')        self.show_result.column("姝屾墜", width=200, anchor='center')        self.show_result.column("姝屾洸", width=200, anchor='center')        self.show_result.column("涓撹緫", width=300, anchor='center')        # 榧犳爣鐐瑰嚮        self.show_result.bind('<ButtonRelease-1>', self.get_song_url)    @retry(stop_max_attempt_number=5)    def get_KuWoMusic(self):        """        鑾峰彇閰锋垜闊充箰        :return:        """        # 娓呯┖treeview琛ㄦ牸鏁版嵁        for item in self.show_result.get_children():            self.show_result.delete(item)        headers = {            'accept': 'application/json, text/plain, */*',            'accept - encoding': 'gzip, deflate',            'accept - language': 'zh - CN, zh;q = 0.9',            'cache - control': 'no - cache',            'Connection': 'keep-alive',            'csrf': 'HH3GHIQ0RYM',            'Referer': 'http://www.kuwo.cn/search/list?key=%E5%91%A8%E6%9D%B0%E4%BC%A6',            'User-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '                          'Chrome/99.0.4844.51 Safari/537.36',            'Cookie': '_ga=GA1.2.218753071.1648798611; _gid=GA1.2.144187149.1648798611; _gat=1; '                      'Hm_lvt_cdb524f42f0ce19b169a8071123a4797=1648798611; '                      'Hm_lpvt_cdb524f42f0ce19b169a8071123a4797=1648798611; kw_token=HH3GHIQ0RYM'        }        search_input = self.ui_url.get()        if len(search_input) > 0:            search_url = 'http://www.kuwo.cn/api/www/search/searchMusicBykeyWord?'            search_data = {                'key': search_input,                'pn': '1',                'rn': '80',                'httpsStatus': '1',                'reqId': '858597c1-b18e-11ec-83e4-9d53d2ff08ff'            }            try:                self.response_data = requests.get(search_url, params=search_data, headers=headers, timeout=20).json()                songs_data = self.response_data['data']['list']                if int(self.response_data['data']['total']) <= 0:                    mes_box.showerror(title='閿欒', message='鎼滅储: {} 涓嶅瓨鍦.'.format(search_input))                else:                    for i in range(len(songs_data)):                        self.show_result.insert('', i, values=(i + 1, songs_data[i]['artist'], songs_data[i]['name'],                                                               songs_data[i]['album']))            except TimeoutError:                mes_box.showerror(title='閿欒', message='鎼滅储瓒呮椂锛岃閲嶆柊杈撳叆鍚庡啀鎼滅储锛')        else:            mes_box.showerror(title='閿欒', message='鏈緭鍏ラ渶鏌ヨ鐨勬瓕鏇叉垨姝屾墜锛岃杈撳叆鍚庢悳绱紒')    def get_song_url(self, event):        """        鑾峰彇涓嬭浇姝屾洸鐨勫湴鍧        :return:        """        # treeview涓殑宸﹂敭鍗曞嚮        for item in self.show_result.selection():            item_text = self.show_result.item(item, "values")            # 鑾峰彇            self.song_num = int(item_text[0])        # 鑾峰彇涓嬭浇姝屾洸鐨勫湴鍧        if self.song_num is not None:            songs_data = self.response_data['data']['list']            songs_req_id = self.response_data['reqId']            song_rid = songs_data[self.song_num - 1]['rid']            music_url = 'http://www.kuwo.cn/api/v1/www/music/playUrl?mid={}&type=convert_url3' \                        '&httpsStatus=1&reqId={}' \                .format(song_rid, songs_req_id)            response_data = requests.get(music_url).json()            self.song_url = response_data['data'].get('url')            self.song_name = songs_data[self.song_num - 1]['name']            self.song_author = songs_data[self.song_num - 1]['artist']        else:            mes_box.showerror(title='閿欒', message='鏈夋嫨瑕佷笅杞界殑姝屾洸锛岃閫夋嫨')    def download_music(self):        """        涓嬭浇闊充箰        :return:        """        if not os.path.exists('./KuWoMusic'):            os.mkdir("./KuWoMusic/")        if self.song_num is not None:            song_name = self.song_name + '--' + self.song_author + ".mp3"            try:                save_path = os.path.join('./KuWoMusic/{}'.format(song_name)) \                    .replace('\\', '/')                true_path = os.path.abspath(save_path)                resp = requests.get(self.song_url)                with open(save_path, 'wb') as file:                    file.write(resp.content)                    mes_box.showinfo(title='涓嬭浇鎴愬姛', message='姝屾洸锛%s,淇濆瓨鍦板潃涓%s' % (self.song_name, true_path))            except Exception:                mes_box.showerror(title='閿欒', message='鏈壘鍒板瓨鏀炬瓕鏇茬殑鏂囦欢澶')        else:            mes_box.showerror(title='閿欒', message='鏈夋嫨瑕佷笅杞界殑姝屾洸锛岃閫夋嫨鍚庝笅杞')    def progress_bar(self, file_size):        """        浠诲姟鍔犺浇杩涘害鏉        :return:        """        layout = [[sg.Text('浠诲姟瀹屾垚杩涘害')],                  [sg.ProgressBar(file_size, orientation='h', size=(40, 20), key='progressbar')],                  [sg.Cancel()]]        # window鍙渶灏嗚嚜瀹氫箟鐨勫竷灞鍔犺浇鍑烘潵鍗冲彲 绗竴涓弬鏁版槸绐楀彛鏍囬銆        window = sg.Window('鏈哄櫒浜烘墽琛岃繘搴', layout)        # 鏍规嵁key鍊艰幏鍙栧埌杩涘害鏉        _progress_bar = window['progressbar']        for i in range(file_size):  # 寰幆            event, values = window.read(timeout=10)            if event == 'Cancel' or event is None:                break            _progress_bar.UpdateBar(i + 1)    def ui_center(self):        """        UI鐣岄潰绐楀彛璁剧疆锛氬眳涓        """        ws = self.ui_root.winfo_screenwidth()        hs = self.ui_root.winfo_screenheight()        x = int((ws / 2) - (self.ui_weight / 2))        y = int((hs / 2) - (self.ui_height / 2))        self.ui_root.geometry('{}x{}+{}+{}'.format(self.ui_weight, self.ui_height, x, y))    def loop(self):        """        鍑芥暟璇存槑:loop绛夊緟鐢ㄦ埛浜嬩欢        """        self.ui_root.resizable(False, False)  # 绂佹淇敼绐楀彛澶у皬        self.ui_center()  # 绐楀彛灞呬腑        self.set_ui()        self.ui_root.mainloop()if __name__ == '__main__':    a = SetUI()    a.loop()
复制代码
回复

使用道具 举报

0

主题

882

回帖

0

积分

新手上路

积分
0
发表于 2023-8-26 20:59:41 | 显示全部楼层
涓轰粈涔堬紒鏄痯ython!
鎴戝彧浼欳++鍟婏紝鍝堝搱鍝燂紒
回复 支持 反对

使用道具 举报

0

主题

988

回帖

0

积分

新手上路

积分
0
发表于 2023-8-26 21:04:57 | 显示全部楼层
e
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|翻墙党

GMT+8, 2026-10-2 17:35 , Processed in 5.182321 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表