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{}

就这样了吧,祝白*愉快。

posted @ 2021-06-21 11:38  awcyvan  阅读(346)  评论(0编辑  收藏  举报