Coder Social home page Coder Social logo

anig1scur / tangdoudownloader Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ccbp/tangdoudownloader

0.0 0.0 0.0 68 KB

糖豆广场舞(tangdou.com)视频下载器,可以实现视频的自动下载以及简单的剪辑,以及可以将视频转换为音频格式。

Home Page: https://www.amrzs.net/2022/05/10/tangdou_downloader/

License: MIT License

Python 98.69% C 0.65% Batchfile 0.65%

tangdoudownloader's Introduction

糖豆视频下载器

Python Author license banner

使用说明

发布页面下载打包编译好的可执行程序后便可直接双击运行,由于本人时间有限并没有为其编写图形界面,故运行会会显示命令窗口,通过在窗口中根据提示进行交互即可。

使用过程中需要注意的是:

  • 需要提供想要下载的视频链接,链接中必须包含 vid 参数,或者也可以直接输入 vid 编号;
  • 使用回车键(Enter)选择默认值;
  • 由于使用单线程下载,故下载速度可能并不会很快;
  • 会在选择的储存目录下自动生成 Download 文件夹,之后所有的文件都将储存至该文件夹;
  • 若想要下载的视频已经存在则不会再次下载;
  • 若需要进行视频剪辑则需要输入起始与结束时间,时、分、秒之间可以使用” “(空格)、”.“(英文句号)、”:“(英文冒号)、”:“(中文冒号)、”,“(英文逗号)、”,“(中文逗号) 进行分隔,以上分隔符也可以混用(不推荐),时、分、秒若高位为 0 也可不全部给出,合法的输入示例如下(以 0 时 2 分 30 秒为例):
    • 0:2:30
    • 2:30
    • 0.2.30
    • 2 30
    • 0.2:30(不推荐)
  • 可以选择不进行剪辑,无论是否进行剪辑都可以在之后的提示中选择将视频文件转换为音频文件;
  • 剪辑过的视频可以选择不保存,无论是否选择保存都可以在之后的提示中选择将视频文件转换为音频文件;
  • 使用 Ctrl+C 可随时结束程序。

运行应用后会打印出简单的使用提示,示例交互过程如下:

===================糖豆视频下载器 By CCBP===================
     使用回车键(Enter)选择默认值,使用Ctrl+C退出程序
视频剪辑的时间输入以" "、"."、":"、":"、","、","作为分隔符
============================================================
请输入视频链接或vid编号:https://www.tangdoucdn.com/h5/play?vid=20000002258422&utm_campaign=client_share&utm_source=tangdou_android&utm_medium=wx_chat&utm_type=0&share_uid=#1652176249257
请输入文件储存目录(默认为当前目录):
[308.71 s] Download completed, save to d:\Workspace\Python\tangdou\Download\安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学.mp4 
剪辑起始时间(默认为不剪辑):2.30
剪辑截止时间:5.0
是否保存剪辑过的视频(y/n):y
[00:02:30<--->00:05:00]
Moviepy - Building video d:\Workspace\Python\tangdou\Download\安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学_edited.mp4.
MoviePy - Writing audio in 安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学_editedTEMP_MPY_wvf_snd.mp3
MoviePy - Done.
Moviepy - Writing video d:\Workspace\Python\tangdou\Download\安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学_edited.mp4
 
Moviepy - Done !
Moviepy - video ready d:\Workspace\Python\tangdou\Download\安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学_edited.mp4
是否转换为音频(y/n):y
MoviePy - Writing audio in d:\Workspace\Python\tangdou\Download\安徽金社《母亲》网红一夜火爆最新男生版 母亲节献礼附教学.mp3
MoviePy - Done.
请输入视频链接或vid编号:https://www.tangdoucdn.com/h5/play?vid=20000002258422&utm_campaign=client_share&utm_source=tangdou_android&utm_medium=wx_chat&utm_type=0&share_uid=#1652176249257
请输入文件储存目录(默认为当前目录):
[11.35 s] Download completed, save to D:\Workspace\Python\tangdou\dist\Download\雨凡《疯疯疯》64步弹跳附分解.mp4
剪辑起始时间(默认为不剪辑):11
剪辑截止时间:3.56
是否保存剪辑过的视频(y/n):n
是否转换为音频(y/n):y
MoviePy - Writing audio in D:\Workspace\Python\tangdou\dist\Download\雨凡《疯疯疯》64步弹跳附分解.mp3
MoviePy - Done.
请输入视频链接或vid编号:Traceback (most recent call last):
  File "d:\Workspace\Python\tangdou\main.py", line 144, in <module>
    main()
  File "d:\Workspace\Python\tangdou\main.py", line 62, in main
    url = input('请输入视频链接或vid编号:')
KeyboardInterrupt

实现方法

糖豆视频都是以URL的参数vid作为引索,可以通过vid获得想要的视频。原始视频链接的获取有HTML解析与API接口请求两种方式。

视频API请求

接口地址为api-h5.tangdou.com/sample/share/main?vid=,该接口返回一个JSON格式数据,对该数据进行解析后data属性下的video_url的值正是原始视频链接,title属性的值则为使用Unicode编码的视频名称,但要想从此接口正常获取数据需提供请求标头如下:

Accept: application/json, text/plain, */*
Accept-Encoding: gzip, deflate, br
Accept-Language: zh,zh-CN;q=0.9
Connection: keep-alive
Host: api-h5.tangdou.com
Referer: https://www.tangdoucdn.com/
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36

音频API请求

糖豆视频页面下方会有推荐的相关视频,接口地址为api-h5.tangdou.com/sample/share/recommend?page_num=1&vid=。该接口返回一个JSON格式数据,对该数据进行解析后data属性的值为一个数组,数组的每一个元素即为一个推荐的视频,其中的mp3url的值为原始音频链接,title属性的值为使用Unicode编码的音频名称,所需请求标头同上。

其中mp3url的值为https://mp3qingiu.tangdou.com/wuqu/xxxx.mp3,直接通过该地址即可获取音频文件,但xxxx.mp3为一个长度为32的编号,通过观察推断该编号为使用MD5算法生成的,由于不清楚原文是什么,故无法直接使用该链接地址获取音频。

🔴此接口实际上为获取视频下方推荐视频对应的音频,并不是我们实际想要的音频,故暂时弃用此方法。

HTML解析

通过访问视频链接,通过GET方法获得响应体,响应体为HTML文档,对其进行解析寻找video标签便可获得视频原始连接。但若直接访问www.tangdoucdn.com/h5/play?vid=是无法找到video标签的,因为该地址中的video标签为动态生成的。而访问share.tangdou.com/splay.php?vid=则可以直接获取video标签。

注意

下载时必须附带如下请求头才可正常获取我们想要的视频:

Referer: https://www.tangdoucdn.com

否则下载到的视频则是一个名为hello.mp4的默认视频文件。

关于打包

pyinstaller

这里我使用的是pyinstaller对程序打包为exe文件,但直接使用命令pyinstaller -F -i assets/icon/download.ico main.py进行打包并运行后会出现FileNotFound错误,提示matplotlibrc无法找到。

在搜索到Python Pyinstaller MatplotlibrcPyinstaller adding data filesFinding the rc configuration file后将,matplotlibrc文件复制到与程序同一目录下,使用命令pyinstaller -F --add-data "matplotlibrc;." -i assets/icon/download.ico main.py进行打包即可消除此错误。

以及对moviepy打包时出现如下问题:

AttributeError: module ‘moviepy.video.fx.all’ has no attribute ‘crop’
AttributeError: module ‘moviepy.audio.fx.all’ has no attribute ‘audio_fadein’

参照moviepy用pyinstaller打包问题即可解决。

ps: Python打包真是太麻烦了,不只麻烦,打包出来的东西因为依赖的关系有非常大,想缩减又是很麻烦。

python embedded

由于使用pyinstaller打包出来的exe文件体积过大不利于传播,并且程序的启动加载速度也过于缓慢。并且为了使用户无需自主配置python环境,因此通过添加嵌入式python环境的方式执行程序,教程参考知乎文章pyinstaller打包的exe太大?你需要嵌入式python玄学

致谢

Direct download icons created by Freepik - Flaticon

tangdoudownloader's People

Contributors

ccbp avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.