献给喜欢落网的朋友们
比较喜欢落网的音乐,听落网也有1年多了,不知道落网的园友点这里:http://www.luoo.net/
去年曾经写过一篇文章解决落网音乐不能下载的问题:落网的音乐很好听的,你造么?不能下载啊,怎么破?
时隔一年,落网早已改版,原来基于html分析音乐下载地址的代码也已过时,平时工作过于繁忙,也没有去维护那个工具。
今天工作依旧忙的一沓糊涂,来听落网放松一下,发现726这个期刊的音乐甚是不错,每一个音符组合在一起唤起了我疲惫的神经,心血来潮,觉定要把这期的音乐下载下来,这才想到之前做的下载工具已经不能用了。
忙里偷闲,把原来的代码修改了一下,让他适应了新版的html,说白了就是从html代码中提取期刊信息,分析MP3的下载地址,好在落网没有做的那么绝,很快代码就改好了(最初的代码是在一个晚上写出来的,弄的比较挫,所以现在也是比较挫~),嗯,又可以愉快的下载音乐了。
酷酷的,是不是有种geek的感觉!
下载地址
这个工具是基于nodejs的,可以跨平台跑在不同的系统上,代码已经开源到GitHub上了,有兴趣的可以直接去clone一份:https://github.com/stanzhai/luoo-down
使用方法
- 先把代码clone下来,前提是你已经安装了git,没有的话直接去github下载代码的zip压缩包吧,
git clone https://github.com/stanzhai/luoo-down.git
- 确保你已经安装了nodejs,然后再代码所在的目录执行:
npm install
安装所需的依赖包 - 同样是在代码所在的目录执行
node app
就可以运行啦 - 在落网上找到你喜欢的期刊,把期刊号输入进来,回车就可以获取期刊信息,默认的期刊是726(这个期刊的音乐不错,推荐给大家)
- 选择你想下载的音乐,敲回车就可以下载了,对于已经下载的音乐,再次敲回车可以直接播放的(是不是很酷啊)
- 下载的音乐保存在downloads目录中
实现原理
这次的实现和去年实现的原理上是一样的,想了解实现的原理的园友可以看一下我去年写的那篇文章:http://www.cnblogs.com/jasondan/p/luoo-down.html
这次不同的地方在于使用了cheerio去提取html中的数据,因为落网的这次改版使得提取信息不如以前那样可以直接分析字符串那么方便了。
cheerio是nodejs的一个第三方模块,可以认为是精简版的服务端jquery,它实现了jquery的核心选择器功能,可以非常方便的实现html数据的提取,用它开发web信息采集或者爬虫真是太方便了:https://www.npmjs.com/package/cheerio
其他
关于信息采集,其实还可以通过分析落网的App找到期刊的api接口信息,不过成本会略高一些,曾反编译过他的Andriod客户端,发现接口部分的代码已经混淆加密了,也在iPhone上设置http代理,捕获过他的接口调用地址,发现还要传token,懒得分析他的token生成规则了,就采用了这种直接分析他的html页面的方式去实现了,缺点当然也很明显,那就是落网一旦改版,这个工具又不能用了,哈哈,只能期待落网的程序猿们少折腾啦!
分析MP3的下载地址也是非常简单的,使用chrome随便打开一个期刊,调出调试工具,分析网络请求,然后随便播放一首音乐就能找到mp3的下载地址了,当然如果你不嫌麻烦的话,也可以直接从这个地址上下载音乐的,chrome真乃神器也!
据说看到好文章不推荐的人,服务器容易宕机!
本文版权归翟士丹(Stan Zhai)和博客园共有,原创文章,未经允许不得转载,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构