豆瓣FM电台Chrome扩展——下载

作为一个豆瓣fm的忠实用户,被豆瓣fm与音乐不期而遇的理念深深吸引。 最近豆瓣推出升级到PRO享受更高品质音乐的服务,升级后确实质量提升明显。但是有个功能仍然没有提供,那就是无法下载喜欢的歌曲。 在对豆瓣fm网页经过一番研究之后,决定做个下载当前歌曲的Chrome插件,只是方便自己下载喜欢的音乐,不喜勿入。

第一步:找到资源

用chrome的开发者工具打开douban.fm首页,通过chrome开发者工具中的Network可以查看所有的资源,其中包括.mp3文件。 在看看豆瓣播放器是个flash,ok了,flash通过http协议来get音频文件。

第二步:获取当前播放歌曲的URL

第一步中我们了解到,豆瓣的flash音乐播放器直接通过http get方法获取资源,因此我们无法直接得知flash内部正在播放的文件地址,我们只好通过chrome extension的chrome.webRequest.onBeforeRequest.addListener 事件来监视所有的http request, 所以一旦后台监听程序发现新的.mp3请求就告知页面更新下载地址。 但chrome extension的页面和后台的通知机制是页面主动询问chrome后台。 所以也就需要更多的代码来实现这个简单的功能。在这里我们在后台注册与页面的通信事件, 通过这个事件,一旦有页面消息传递给后台,在后台中注册的方法将会被调用:

chrome.extension.onMessage.addListener(function (request, sender, sendResponse){ dosomething;} );

页面通过:

chrome.extension.sendMessage({from:"douban.fm"}, function (response) {dosomething});  

来和后台通信,其中第一参数用来指明请求的页面,第二个参数则是一个回调函数。

还有一个后台事件很有用:

chrome.webRequest.onHeadersReceived.addListener(function (details) {dosomething}, arg2);

这个事件发生在http reponse header 达到时,可以用来做一些小事情,比如说修改音频保存时使用的名字。代码如:

chrome.webRequest.onHeadersReceived.addListener(function (details) {
    if(details.url.indexOf(".mp3?douban=")!=-1){
     response =details;// for debugging
     for (i = 0; i < details.responseHeaders.length; i++) {
       if(details.responseHeaders[i].name.toLowerCase() == "content-type"){
          details.responseHeaders[i].value= "application/x-please-download-me";
        }
     }
     details.responseHeaders.push({name:"Content-disposition",value:"attachment; filename="+tab.title.substring(0, tab.title.lastIndexOf('-')-1)+ ".mp3"});
    }


    return {
        responseHeaders : details.responseHeaders
    };
}, {
        urls : ["<all_urls>"],
        types : ["main_frame", "sub_frame", "stylesheet", "script", "image", "object", "xmlhttprequest", "other"]
    },
["blocking", "responseHeaders"]);


 第三步:创建页面下载连接

用Js在页面上添加一个下载的链接,通过这个链接就可以把当前的播放的mp3文件下载, 为了在能当面页面下载我们嵌入一个隐藏的iframe.



全部代码:https://github.com/darlinglele/extensions/tree/master/fm


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
"高品质豆瓣FM"让你轻松享受高达320kbps高品质的豆瓣FM! 一个简单的Chrome插件来帮助你轻松享受高品质的豆瓣FM。 ## 插件是怎么工作的? 本插件在你播放豆瓣FM的同时,让你拥有选择可以播放更高品质的音源。 您需要手动关闭掉豆瓣FM的音量来正常使用这个插件。 如果你在使用过程中碰到了任何问题,请联系作者:[email protected] Version 2.1.5 (2015-03-02) ~~~~~~~~~~~~~~~~~~~~~~~~~~ - 修复由于豆瓣新增 CSP header 导致外部音源加载失败问题 Version 2.1.4 (2015-02-28) ~~~~~~~~~~~~~~~~~~~~~~~~~~ - 修复Issues Version 2.1.0 (2014-04-04) ~~~~~~~~~~~~~~~~~~~~~~~~~~ - 开启使用网易音乐320k音源 - 增加下载歌曲链接,可以展示当前播放的歌曲文件地址 - Bugfix ### Version 2.0.1 (2014-04-01) - 极大的优化了搜索匹配歌曲的逻辑 ### Version 2.0.0 (2014-04-01) - 增加百度音乐的源,现在可以提供高达320kbps的音质 - 增加一个设置页面,可以方便的开启和关闭插件,设置音源 - 恼人的关闭音量提醒现在可以不再出现 - 增加分享按钮,喜欢就分享给你的朋友吧 - 增加github fork链接,欢迎fork ### Version 1.1.1 - 更新描述文件 - bugfix ### Version 1.1.0 - 修正了播放外部音源会无尽循环的问题 - 修复了某些情况会导致插件崩溃的Bug - 屏蔽了播放条的进度部分,让音乐播放更纯粹 - 当播放外部音源的时候,点击音量左边的小图标会调到外部音乐的页面 支持语言:中文 (简体)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值