落网的音乐很好听的,你造么?不能下载啊,怎么破?

本人比较喜欢听音乐,尤其是上下班路上,由于公司离住的地方不远,走着上班也就40分钟,喜欢边走边听音乐,听惯了那种流行音乐,总有点泛滥的感觉,于是到处扒拉那种不一样的听歌软件(什么酷狗,酷我,虾米,咪咕之类的就不算了),找到一些比较符合自己口味的,像LavaRadio,落网
http://www.luoo.net/。第一次用落网的感觉是,哇,这个小清新居然整理了这么多优质音乐,他每一期提供的音乐风格各有不同,总有那么点让人期待的感觉,后来,后来就一直用落网了....

不过让人遗憾的是,落网的音乐不能下载,上班路上安可没有那么多的流量,虽说用落网的客户端也可以听缓存的音乐,不过断网的情况下效果还是不理想。于是就想办法折腾落网的音乐,发现一个Chrome插件:声海盗,这货可以下载落网的音乐,用过后,感觉效果还是不太好,比如下载的音乐全是01.MP3这样的,而且必须得播放时才能下载,不是很方便。

实在抵挡不住那么好的音乐的诱惑,决定自己开发个小工具来下载落网的音乐,用着方便就行了,这么想也就这么做了,刚好最近学习Nodejs,就拿Nodejs来开发了。

开工前的准备

分析了落网的页面源代码,发现最后的脚本中有个播放列表的数组(窃喜),那么开发思路就有了,这样就可以很方便拿到他的播放列表了,然后根据播放列表的信息去下载MP3就可以了。他的列表代码这这样滴:

<script>
try{
var volPlaylist = [{"id":"11999","title":"\u4e16\u754c\u662f\u5757\u5fe7\u4f24\u7684\u77f3\u5934","artist":"\u6cbc\u6cfd","album":"\u8fdc","mp3":"http:\/\/luoo.800edu.net\/low\/luoo\/radio614\/01.mp3","poster":"http:\/\/img.luoo.net\/pics\/albums\/6679\/cover.jpg_580x580.jpg","poster_small":"http:\/\/img.luoo.net\/pics\/albums\/6679\/cover.jpg_60x60.jpg"},........];
var navid = ‘1‘;

}catch(e){}
......
</script>

需要解决的问题:

  • 根据期刊地址,发送http请求,从返回的html代码中拿到这段playList代码;

  • 下载mp3到本地,每个期刊创建一个目录,便于组织这些音乐;

  • 让用户按照自己的喜好,下载自己喜欢的音乐,也就是得有个界面让用户去选;

  • 下载完以后干啥呢,听呗!,还得解决下载后播放音乐的问题。

开工

针对以上问题去研究实现方案,四处奔波后(主要在npmjs上,上面有大量的第三方包),基本解决以上问题,解决方法如下:

  1. 发送Http请求的问题,这个可以直接用Nodejs自带的http模块,不过简单的处理还行,复杂的处理比如下载MP3就没有那么方便了,不过幸好有个request模块解决了这个问题,发送请求特方便,下载文件同样很Easy。

  2. 如何从返回的html代码中获取那个playlist列表呢,jsdom+jquery去提取?算了,直接分析字符串获取吧,也不麻烦。

  3. 创建目录啥的就不说了,直接用自带的fs模块去搞就行了。

  4. 弄个界面?起初想到了node-webkit,虽然用这货虽然可以把UI做的很棒,不过有些重量级了,我还是崇尚简洁轻量的,后来找到term-list模块,可以直接在控制台中弄个简单的列表选择界面,纯文本的哦,真方便。

  5. 下载音乐是需要时间的,怎么才能更友好的下载呢(提示下载进度),发现request模块并没有下载进度相关的信息,后来找到request-progress可以解决这个问题,然后再从界面上显示进度,可以使用progress这个东东。

  6. 咋播放下载下来的音乐呢,简单点就直接使用本地的播放器播放得了,那就用open模块,可以自动调用本地app打开MP3.

万事俱备,只欠代码,来吧,开搞吧!

感觉讲代码什么的最头疼了,说几个关键的吧,其余的根据各模块的官方文档都能搞明白。

从html代码中提取想要的信息,也就是字符串截取:

function findContent(html, key, endTag, offset) {
var start = html.indexOf(key);
var end = html.indexOf(endTag, start);
return html.substring(start + key.length, end + offset);
}

然后就可以很方便的获取播放列表了:playList = JSON.parse(findContent(html, ‘var volPlaylist =
‘, ‘}];‘, 2));

简化版的MP3下载代码:

    progress(request(mp3Info.mp3))  // 请求MP3的下载地址
.on(‘progress‘, function (state) {
// 这里处理下载进度
})
.pipe(fs.createWriteStream(mp3File)) // MP3保存到本地文件
.on(‘close‘, function (err) {
// 这里处理下载结束
});

结合request和request-progress模块去下载东西还是蛮方便的,若没有这些模块,我不知道要写多少代码,向此模块的作者致敬!

其他的全是些UI方面的东西了,也没啥值得说的,下面大家可以去GitHub找到完整的代码。

贴图欣赏

程序跑起来的效果图如下,输入要获取的期刊url,就可以分析出他的下载列表,然后选择自己喜欢的音乐回车开始下载,下载完成后,再次回车就可以播放了:

luoo-down,Windowns版的截图:

MP3下载目录,每期的歌曲单独存放到自己的目录中:

问题

大家知道我们获取播放列表是从落网的网页源代码中获取的,要是哪一天落网把页面改了,找不到播放列表了,那就妥妥的悲剧了。希望落网的程序猿们不要动那段播放列表的代码哦。

其实这个问题可以分析他们客户端调用的接口,接口变动总该是少的吧,他们有个Android的客户端,可以反编译分析下接口地址,不过会麻烦些,没有折腾,现在这个版本能用就先用着吧。

开源

开发完成后,边听歌,边调试,最后搞稳定了,差不多可以分享给大家用了,就扔到github上去了,开源分享精神必须是有滴!

GitHub项目地址:https://github.com/stanzhai/luoo-down

大家有兴趣的可以加入进来一起完善哦。

总结

总结下用到的一些模块:

var fs = require(‘fs‘)
, path = require(‘path‘)
, readline = require(‘readline‘)
, request = require(‘request‘) // 非常方便的发送http请求
, progress = require(‘request-progress‘) // 处理请求进度
, ProgressBar = require(‘progress‘) // 控制台进度显示
, open = require(‘open‘) // 使用本地应用打开文件
, colors = require(‘colors‘) // 控制台文本颜色
, List = require(‘term-list‘); // 控制台列表菜单项

相关技术点:Nodejs网页信息采集,文件下载及下载进度,控制台(终端)UI。

感觉不错?那就点个推荐吧。

落网的音乐很好听的,你造么?不能下载啊,怎么破?,布布扣,bubuko.com

时间: 2024-10-04 10:10:15

落网的音乐很好听的,你造么?不能下载啊,怎么破?的相关文章

Python多线程采集数据示例:落网_音乐期刊

待采集的网站如下: http://www.luoo.net/ 采集的内容未该站点下的"音乐期刊"(#为对应的期刊序数,为正整数) http://www.luoo.net/music/# 原创爬虫的作者的github地址: https://github.com/imchenkun/ick-spider/blob/master/luoospider.py 具体参见这篇博文: http://www.cnblogs.com/chenkun/p/5653459.html 网上牛人给出的代码: 1

lkmusic项目改进版本之WebAudio版本支持音乐可视化 已更新至github 欢迎下载

亲们如果觉得好请fork我的github lkmusic 效果预览图(2016-4-26日已经改进) 更新: 优化界面效果 修复播放完成后不会自动切换处于暂停状态的bug 已经上传至github(敬请关注) GitHub 项目仓库地址(欢迎访问): https://github.com/laikedou/LMusic.git 目录结构: index.html <!DOCTYPE html> <!--对离线存储进行支持--> <html lang="zh-cmn-Ha

网易云音乐mp3外链、真实地址下载方法

第一步打开网易云音乐,随便找到一首歌,播放,复制网址的ID, 例如:杨钰莹的心雨,网址是: http://music.163.com/#/song?id=317151 很明显,ID是317151 那么,这首歌的真实地址就是: http://music.163.com/song/media/outer/url?id=317151.mp3 这个地址不会失效的: 这就得到一个下载公式: http://music.163.com/song/media/outer/url?id=ID数字.mp3 把上面I

台湾各个大学硕博论文链接,很全,有的可以全文下载。

http://ntur.lib.ntu.edu.tw/台湾大学机构典藏http://etds.ncl.edu.tw/cgi-bin/gs32/gsweb.cgi/ccd=uH.m91/webmge?Geticket=1台湾国家图书馆 全国博硕士论文资讯网http://etd.lib.nctu.edu.tw/cgi-bin/gs32/gsweb.cgi/login?o=dwebmge&cache=1429577940693台湾联合大学(国立交通.国立中央.国立清华.国立阳明大学)博硕士论文http

很好的计算机相关书籍下载网站----计算机书籍控

计算机书籍控:http://bestcbooks.com/ 转自:http://bestcbooks.com/free-programming-books 英文世界有人整理出史上最全的免费计算机书籍放到了github上:free-programming-books,列表很长,其中的电子书都是作者或者出版社等版权所有人授权公开的. 这里也整理一份中文版的免费(开源或有授权)的计算机书籍列表.虽目前搜寻到的书目不多,但希望列表可以丰满起来,如果有您知道没包含进此列表的,望留言补充. C语言 Linu

最近大家都开源,我也开源个落网音乐C#4.0版。

3天前,有个博文落网的音乐很好听的,你造么?不能下载啊,怎么破?很火. 我一看这不是用C#写比较容易.又可以在pc上运行. 最近我听音乐我听不懂,我没有音乐细胞.觉得摇滚外国的不和我胃口. 我还是喜欢听百度的top500. 我第一次看了博文,我觉得这用C#4.0写可行, 经过我一番考虑第二天我还是打算动手写了. 在百度上搜索相关技术后第三天晚上正式开工. 花了我4小时完工.测试了一下不错. 我今天看到圆子里大多人开源.我也开源开源. 顺便向圆子里的大神提提意见. 看看我这水平可以胜任一个2k的C

iATKOS&nbsp;v7硬盘安装教程(硬盘助手+变色龙安装版)

这是作者:Tong 写的一篇安装教程 首先感谢:wowpc制作的变色龙安装版.iATKOS作者以及硬盘安装助手作者前言:现在时代在进步,系统同样也在进步,在以前要在PC上整个Mac是很痛苦的事情,就算装好也可能面临驱动上的问题,在经历过这么多坎坷后,在pc上安装mac逐渐走向完美,更所谓比安装windows还要简单,忠心感谢那些为osx86做贡献的朋友.由于没有相机,手机像素低就拍不了相关安装过程,只能截点电脑的截图给大家参考了,新手要参考安装过程的话可以去论坛找以前的相关教程截图参考:一.准备

SongTaste闭站谢客 网络音乐731大限已至

7月20日,知名音乐分享网站SongTaste在页面上贴出了关闭告示--"在这里,我们很遗憾地宣布:SongTaste为尊重音乐版权,会在一个星期后关闭音乐板块",同时提醒用户转移重要数据.8月2日,虾米音乐在酷狗声称拥有版权的作品中,显示"所属专辑下架,暂时不能试听",而张惠妹的<趁早>.<听海>则依然可以试听和下载. 7月8日,国家版权局下发了<关于责令网络音乐服务商停止未经授权传播音乐作品的通知>,要求各音乐网站.APP于7

使用网易云音乐,丢掉QQ音乐吧

我是一个听音乐的重度用户,基本上每天大约有三分之一的时间里我在使用网易云音乐去听音乐.包括工作写代码的时候,跑步的时候,去上班的途中我都去听.首先需要声明的是,在这里我不是故意的去抹黑其他的音乐产品,我只是谈谈我一个真实用户的真切感受. 由于喜欢听音乐的原因,自从开始接触互联网后,我便开始接触了很多音乐播放类产品,从早期的千千静听,酷我音乐,酷狗音乐,QQ音乐,豆瓣FM,虾米音乐,JingFM, 多米音乐,落网等等,有太多的音乐产品,我都数不过来.其实不难看出,网易做音乐类产品还是近两年才发力,