you-get下载网页音乐的自动化
#0:关于you-get
如果你是一个经常在网上白*东西的人,那么你肯定会很收熟悉you-get这个东西。这个东西可以下载大多数主流网站上的视频、图片或音乐。但是,它是命令行界面,所以使用会有一些困难(特别是那么多参数),所以为什么不自己开发一个能够一键下载音乐(视频什么的后面的一篇文章会讲)的程序呢?所以就有了下面这个东西。
#1:准备阶段
我们的需求是在音乐的播放界面上添加一个按钮,实现对本地的一个程序的调用,然后帮助我们下载。所以我们来看看需要些什么。
首先,操作网页,那么你至少需要了解JavaScript。但是JS并不能操作本地文件,所以你需要更高级的网页语言(这里我使用PHP),但是PHP只能操作服务器上的文件,所以还需要搭个服务器(这里我用的是Apache的服务器并配置好了PHP,如果有Python就可以使用Python的简易服务器,具体操作自行百度),最后就是我们的主体程序了,这里我使用Python来编写。
#2:在网页上添加下载按钮
网页的来源是别人的网站,所以你想要改变的话有两种方法:
1、黑进别人的网站,进行一些操作
2、在控制台中(浏览器应该都有这个)执行添加按钮的代码
方案1虽然一劳永逸,但是所有人都会看到那个按钮,迟早别人会发现你在干什么;而方案2也有问题,就是你每下一首歌就需要输一次代码,太麻烦了。那么有没有更好的方法呢?
1、黑进别人的网站,进行一些操作
2、在控制台中(浏览器应该都有这个)执行添加按钮的代码
3、Tampermonkey
浏览器发烧友应该很熟悉这个浏览器插件,他可以在Google(针对Chrome)或者Microsoft(针对Edge)的应用商店中找到。如果你用的不是这两个浏览器(如FireFox),那么就只能去找百度了。
现在我们假设你已经有了Tampermonkey,然后就需要找一个目标,这里我使用网易云。首先在Tampermonkey里新建一个脚本,然后修改前面那段注释(因为Tampermonkey是通过那段注释来识别这段代码需要在哪些网站上运行,还有很多别的信息)如下:
// ==UserScript== // @name 起一个你喜欢的名字 // @namespace http://tampermonkey.net/ // @version 这个版本号随便写(但是至少得是数字) // @description None // @author 作者名称随意 // @match *://music.163.com/song* // @match *://music.163.com/m/song* // @match *://music.163.com/#/song* // @grant none // ==/UserScript==
重点在那3个@match后,那后面是我们要匹配的网址,注意协议和id都用的是通配符,这样可以在所有的页面上都起作用了。
然后继续,我们需要添加一个按钮,所以得先知道按钮应该加在哪儿,你总不会希望需要把页面划到最下面才能看到下载按钮吧,所以你应该指定按钮的父节点,在网易云上应该是这样的:
(function() { 'use strict'; // Your code here... var button = document.createElement("button"); var p=document.getElementById("content-operation");//按钮的父节点 })();
这里Tampermonkey是把一个函数进行包装之后作为一个文件来执行,所以你的所有代码都应位于这两个大括号中。然后为按钮设置一些参数:
(function() { 'use strict'; // Your code here... var button = document.createElement("button"); var p=document.getElementById("content-operation"); button.id="b"; button.textContent="随便什么能让你知道这个按钮是用来干嘛的文字"; button.style.width = "100px";//宽 button.style.height = "30px";//高 button.style.align = "center";//位置(其实这里用处不大) })();
保存一下,打开任意一个网易云的歌曲页面,应该可以看到多出来的按钮。
然后就要为按钮设置回调函数了。这里应该先架设你的服务器,然后创建一个PHP空页面(暂时),作为接收参数并启动程序的中介,然后把Tampermonkey代码改为:
(function() { 'use strict'; // Your code here... var button = document.createElement("button"); var p=document.getElementById("content-operation"); button.id="b"; button.textContent="随便什么能让你知道这个按钮是用来干嘛的文字"; button.style.width = "100px"; button.style.height = "30px"; button.style.align = "center"; button.onclick = function (){ window.open("http://████████████████.php?██="+window.location.href); }; p.appendChild(button); })();
第一处被█遮盖的地方应更改为你自己的PHP响应页面在你的服务器上的位置,然后第二处是个可以随便写的东西,只要它于你文件内部处理参数时使用的名字一致就行,这个参数是歌曲页面的链接,因为you-get只需要这个。
#3:PHP响应页面
直接贴代码:
<!doctype html> <html> <head> <meta charset="utf-8"> <title>随便什么标题</title> <style>body{text-align: center}</style> </head> <body> <?php $█=$_GET['█']; system('python ██████.py '.$█); ?> </body> </html>
这里被一个█遮盖的地方要于你之前JS里的那个一致,而Python文件的路径就是你自己的事了。
#4:Python文件
这里需要一个能够根据链接让you-get下载歌曲的功能,首先导入各个库:
import time import os from you_get import common import sys
顺带一提,这里使用的you-get必须是pip安装的,不然是找不到库的(当然你想通过os.system()调用也没人会说你什么)。
然后进行一些操作:
import time import os from you_get import common import sys link=sys.argv[1] common.any_download(url=link,output_dir=r'█████',caption=False)
就这么简单,第一行通过sys获取参数,第二行直接下载(下载视频什么的会有更多步骤,因为会有格式问题),完事。
然后你就可以通过这个自动化下载音乐了,其他音乐平台可以按照需求进行更改,如要兼容多个平台,可以使用下面这个格式的Tampermonkey代码来判断是哪个音乐平台,从而决定插入按钮的地方:
if(window.location.href.indexOf("music.163.com")!=-1){} else if(window.location.href.indexOf("y.qq.com")!=-1){} ……………………………………//省略 else{}
就这样了吧,祝白*愉快。