网站曲谱下载原理分析:揭秘URL构造过程

前言

偶然间发现一个有趣的油猴脚本,可以下载曲谱网站上的曲谱图片,包括VIP专享的资源。作为一名音乐爱好者和技术极客,我忍不住想要分析一下它是如何实现的。本文将详细探讨这个脚本是如何通过分析网页结构和URL模式,成功构造出曲谱图片的真实下载地址。

起点:预览图的URL

在曲谱网站上,曲谱预览图通常是这样的URL格式:

1
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/prev_82830.0.png

但完整高清图片的URL却被隐藏起来,特别是VIP曲谱。那么,如何从这个预览图URL推导出完整图片的URL呢?

脚本分析

首先,让我们看看这个油猴脚本的核心部分:

1
2
3
4
5
6
7
8
9
10
11
function analyzeImages(arr) {
var url = arr.map(item => item.img[0])[0];
var match = url.match(/(https:\/\/oss\.曲谱网站\.com\/yuepuku\/\d+\/\d+\/)\d+_([a-z]+)_([a-z]+)\/+[^\/]+/);
if (match) {
var pre = match[1];
var cid = match[2];
var typ = match[3];
var base = `${pre}${ypid}_${cid}_${typ}/${ypid}_${cid}.ypad.`;
fetchImages(base, typ);
} else {alert("URL解析失败");}
}

这段代码的关键在于正则表达式,它将URL解析为几个关键组成部分。

URL结构分解

以预览图URL为例:

1
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/prev_82830.0.png

根据脚本中的正则表达式,我们可以将它分解为:

  1. 基础URL前缀(pre): https://oss.曲谱网站.com/yuepuku/165/82830/
  2. 曲谱ID(ypid): 82830(从页面全局变量获取)
  3. 分类ID(cid): dcihefja
  4. 类型(typ): standard(线谱)或jianpu(简谱)

构造完整URL的过程

脚本使用以上信息构造出完整URL的模式:

1
var base = `${pre}${ypid}_${cid}_${typ}/${ypid}_${cid}.ypad.`;

将我们的例子代入:

1
基础URL模式 = https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/82830_dcihefja.ypad.

然后,脚本从0开始递增页码,尝试下载每一页:

1
2
3
4
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/82830_dcihefja.ypad.0.png
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/82830_dcihefja.ypad.1.png
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/82830_dcihefja.ypad.2.png
...

直到遇到404错误(表示没有更多页面)。

关键变量来源

那么,脚本是如何获取yuepuArrXianyuepuArrJian这两个数组的呢?

这两个变量实际上是曲谱网站自己定义的全局变量,用于存储线谱和简谱的数据。油猴脚本运行在与网页相同的JavaScript环境中,可以直接访问这些全局变量。

要验证这一点,你可以在曲谱网站的曲谱页面打开浏览器控制台,输入这些变量名,就能看到它们的内容。

真实URL与预览URL的区别

比较预览URL和真实URL:

预览URL:

1
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/prev_82830.0.png

真实URL:

1
https://oss.曲谱网站.com/yuepuku/165/82830/82830_dcihefja_standard/82830_dcihefja.ypad.0.png

主要差异在于:

  1. 预览URL包含prev_前缀
  2. 真实URL使用了ypad标识符
  3. 真实URL在文件名中包含了cid

自己动手实现

如果你想自己尝试下载曲谱,可以按照以下步骤操作:

  1. 打开曲谱网站上的曲谱页面
  2. 打开浏览器开发者工具(F12)
  3. 在控制台输入yuepuArrXianyuepuArrJian查看数据结构
  4. 复制其中的一个URL,按照上面的分析方法构造真实URL
  5. 使用递增的页码尝试下载所有页面

或者,你可以直接安装这个油猴脚本,它会在曲谱页面添加下载按钮,自动完成这一过程。

总结

这个油猴脚本通过分析网页结构和URL模式的规律,成功构造出了曲谱网站VIP曲谱的真实下载地址。它不需要复杂的API调用或数据库查询,只需要掌握URL的构造规则和网页上的关键变量。

这种逆向工程的方法是Web开发和网页分析中的常用技巧,通过观察和推断,可以发现许多网站的隐藏功能和数据结构。

希望这篇文章能帮助你理解网页URL构造的原理,也为你的音乐学习提供一些便利。记得尊重版权,合理使用下载的资源。

附:完整脚本逻辑

最后,我们来整理一下脚本的完整逻辑:

  1. 从页面中获取曲谱标题
  2. 创建UI元素(下载按钮和消息提示)
  3. 当用户点击下载按钮时:
    • 从网页全局变量中获取曲谱数组
    • 分析URL模式并构造基础URL
    • 递增页码尝试下载所有图片
    • 遇到404错误时停止并显示下载完成消息
  4. 对于音频文件,直接从页面元素中提取URL并下载

这种方法简单高效,无需服务器交互,完全在客户端实现。


免责声明:本文仅用于技术分析和学习目的,请尊重版权,合理使用相关资源。如果你喜欢曲谱网站的服务,请考虑支持他们的会员服务。


网站曲谱下载原理分析:揭秘URL构造过程
http://eevann.cn/2024/04/30/score-download/
作者
月下独白
发布于
2024年4月30日
许可协议