鱼C论坛

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

[作品展示] 【UI可执行程序版本】抖音无水印视频下载,附带源码

[复制链接]
发表于 2020-5-7 18:09:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
图片:
微信图片_20200507180600.png 批注 2020-05-07 180623.png
可执行单文件下载连接在最后

源码展示,我把图片变成二进制存储在了源码里面,但是太长了我就删了。ui的二进制也没了,你们可以自己去画嘛。但是核心方法都在。
from PySide2.QtWidgets import QApplication, QMessageBox,QFileDialog
from PySide2.QtUiTools import QUiLoader
import requests
import re
import json
import os
from PySide2.QtGui import  QIcon


class Download:

    def __init__(self):
        self.ui = QUiLoader().load('抖音无水印.ui')
        os.remove('抖音无水印.ui')
        self.ui.search.clicked.connect(self.find_share)
        self.ui.search_2.clicked.connect(self.find_hot)
        self.ui.download.clicked.connect(self.save2)
        self.ui.download_2.clicked.connect(self.save)
        self.ui.findpath.clicked.connect(self.findpath)
        self.path =os.getcwd()
        self.ui.path.setText(self.path)

    def findpath(self):
        filePath = QFileDialog.getExistingDirectory(self.ui, "选择存储路径")
        if filePath == None or filePath == '':
            pass
        else:
            self.path = filePath
            self.ui.path.setText(self.path)

    def find_share(self):
        def find_url(share_url):
            headers = {
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
            if share_url.find('v.douyin.com') < 0:
                return share_url
            response = requests.get(url=share_url, headers=headers,
                                    allow_redirects=False)  # allow_redirects = False 不允许跳转
            url = response.headers['Location']
            p = re.compile(r"/playwm")
            url = p.sub('/play', url, count=1)
            p2 = re.compile(r"/video/(.+?)/")
            vid = p2.findall(url)[0]
            headers = {
                'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}
            api = '''https://www.iesdouyin.com/web/api/v2/aweme/iteminfo/?item_ids={}'''.format(vid)
            response = requests.get(api, headers=headers)
            html = response.text
            data = json.loads(html)
            video_name = data["item_list"][0]["share_info"]["share_title"]
            return url, video_name

        def find_play(url):
            headers = {
                'user-agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36"}
            response = requests.get(url, headers=headers)
            html = response.text
            p = re.compile(r'playAddr: [\'"](https.+?)[\'"]')
            v_url = p.findall(html)
            return v_url[0]

        def save_vid(url, name,filePath,ui):
            p = re.compile(r"/playwm")
            url = p.sub('/play', url, count=1)
            headers = {
                'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
            response = requests.get(url, headers=headers)
            r = response.content
            with open(filePath+r'\{}.mp4'.format(name), 'wb') as f:
                f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '{}\n下载完成!'.format(name)
                              )
            #ui.url_input.clear()
        def main(share_url,ui):
            b = find_url(share_url)
            url = b[0]
            name = b[1]
            play_url = find_play(url)
            save_vid(play_url, name, self.path,ui)


        share_url = self.ui.url_input.toPlainText()
        p = re.compile(r"(https://v.douyin.com/.+?/)")
        share_urls = p.findall(share_url)
        if share_urls == []:
            QMessageBox.about(self.ui,
                              '警告',
                              '并没有找到分享链接\n或者\n分享链接可能有误!'
                              )
        else:
            for i in share_urls:
                main(i,self.ui)

    def find_hot(self):
        url_list = []
        names_list = []
        url = 'https://www.iesdouyin.com/web/api/v2/hotsearch/billboard/aweme/'
        headers = {
            'uesr-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Safari/537.36',
            'referer': 'https://www.iesdouyin.com/share/billboard/?id=0&utm_source=copy&utm_campaign=client_share&utm_medium=android&share_app_name=douyin'
        }
        response = requests.get(url, headers=headers)
        html = response.text
        data = json.loads(html)['aweme_list']
        error = ['/', '"', '\\', '|', '*', '>', '<', ':']
        for i in data:
            url = i['aweme_info']['video']["play_addr"]["url_list"][0]
            url_list.append(url)
            name = i['aweme_info']['share_info']['share_title']
            for each in error:
                if each in name:
                    name = name.replace(each, ' ')
            names_list.append(name)
        self.url_list = url_list
        self.names_list = names_list
        self.ui.listWidget.clear()
        self.data = {}
        count = 0
        for i in self.names_list:
            self.ui.listWidget.addItem(i)
            self.data[i] = self.url_list[count]
            count += 1


    def save(self):
        try:
            item = self.ui.listWidget.currentItem().text()
        except:
            QMessageBox.about(self.ui,
                              '警告',
                              '请先查询并选择!!'
                              )
        url = self.data[item]
        headers = {
            'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
        response = requests.get(url, headers=headers)
        r = response.content
        with open(self.path+r'\{}.mp4'.format(item), 'wb') as f:
            f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '下载完成!'
                              )

    def save2(self):
        try:
            item = self.ui.listWidget.currentItem().text()
        except:
            QMessageBox.about(self.ui,
                              '警告',
                              '请先查询并选择!!'
                              )
        url = self.data[item]
        p = re.compile(r"/playwm")
        url = p.sub('/play', url, count=1)
        headers = {
            'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/81.0.4044.122 Mobile Safari/537.36'}
        response = requests.get(url, headers=headers)
        r = response.content
        with open(self.path+r'\{}.mp4'.format(item), 'wb') as f:
            f.write(r)
            QMessageBox.about(self.ui,
                              '提示',
                              '下载完成!'
                              )

png = b'这是图片的二进制'
bit_ui = b'ui自己画'

with open('logo_3958666.png', 'wb') as g:
    g.write(png)
with open('抖音无水印.ui', 'wb') as f:
    f.write(bit_ui)
app = QApplication([])
app.setWindowIcon(QIcon('logo_3958666.png'))
os.remove('logo_3958666.png')
d = Download()
d.ui.show()
app.exec_()


成品链接https://lanzous.com/iccvi4h
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 18:28:11 | 显示全部楼层
沙发
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-7 18:33:24 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-27 05:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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