Javascript打造豆瓣FM的歌词插件
来源:互联网 发布:windows系统cdp服务 编辑:程序博客网 时间:2024/06/10 00:24
这是自己第一次写chrome扩展程序,功能比较简单,就是为你在豆瓣FM上听歌时配上歌词,以此类推,大家只要懂得javascript就可以很轻松打造属于自己的各种插件。
有了以上这些其实功能就已经实现了,但我们还需要将它做成chrome扩展然后安装在chrome浏览器里,这样以后就可以很方便的使用。
建立一个manifest.json文件,内容类似下面这样:
然后你在找三张你喜欢的图片分别命名为icon.png,icon-48.png以及icon-128.png,当然这些名字你是可以任意的,只是要个上面文件里的名字对应。
最后在开发者工具里的扩展应用里打包你的代码,就会获得两个文件:
先上效果图:
首先进入chrome开发者工具,选择resource下的localstorage,在里面你可以看到你现在正在听的这首歌的相关信息,这将是我们一会儿需要使用javascript获取的,如下图:
接下来你需要一个可以获取歌词的API,http://geci.me/api/lyric/歌曲名,通过这个api你可以获得歌词的下载地址,例如你在地址栏输入http://geci.me/api/lyric/小情歌,将会返回如下json格式的数据:
这里我们只关注lrc,也就是歌词地址。
好了有了这些,我们就可以编写javascript代码了,代码这个思路是这样的,当你打开豆瓣FM这个网站的时候,代码会通过localstorage获取你的歌曲名,然后将歌曲名与http://geci.me/api/lyric/拼接成一个
api地址,如http://geci.me/api/lyric/+小情歌=http://geci.me/api/lyric/小情歌。然后通过这个地址发起异步请求,会得到上图的那堆数据,再根据数据中的lrc对应的值再次请求以获得歌词内容。
function DoubanFM(){this.name = 'FM';this.tmp_song_id = '';this.flag = 1;this.lyrics = this.draw_lyrics();}DoubanFM.prototype.draw_lyrics = function() {var lyrics_div = document.createElement('span');//用document.createElement()方法可以创造新的节点document.getElementById("fm-channel-list").appendChild(lyrics_div);//用document.body.appendChild()方法把新的节点附加到到document中lyrics_div.style.width = '230px';//下面几行是设置css//lyrics_div.style.backgroundColor = '#CCF';lyrics_div.style.zIndex = '10000';lyrics_div.style.position = 'absolute';lyrics_div.style.left="50px";lyrics_div.style.top="0px";lyrics_div.style.color="#93F";lyrics_div.align="center";return lyrics_div;}DoubanFM.prototype.geci_entry_url = function(song, artist) {if (song == undefined || song == null || song == '') return '';var url = 'http://geci.me/api/lyric/' + song;if (!(artist == undefined || artist == null || artist == '')) {url += '/' + artist;}console.log(url);return url;}DoubanFM.prototype.request_geci = function() {eval('var stored_song = ' + localStorage['bubbler_song_info']);//console.log('the song in localStorage:' + stored_song.artist + ' ' + stored_song.song_name);if (this.tmp_song_id != stored_song.id) {console.log(this.tmp_song_id + ' is not ' + stored_song.id);var url = this.geci_entry_url(stored_song.song_name, stored_song.artist);this.tmp_song_id = stored_song.id;this.ajax_get(url);}}DoubanFM.prototype.ajax_get = function(url) {var XHR = new XMLHttpRequest();var obj = this;//一次典型的原生js发起的AJAX请求XHR.onreadystatechange = function() {if (XHR.readyState == 4) {if (XHR.status == 200) {obj.deal_response(XHR.responseText);} else {obj.print_lyrics('获取歌词失败');}} else {obj.print_lyrics('歌词搜索中');}} XHR.open('GET', url, true);XHR.send(null);}DoubanFM.prototype.deal_response = function(data) {if (this.flag == 1) {eval('var resp = ' + data);if (resp.count > 0) {this.ajax_get(resp.result[0].lrc);this.flag++;} else {this.print_lyrics('没有找到歌词');}} else {this.print_lyrics(this.format(data));this.flag = 1;}}DoubanFM.prototype.format = function(text) {var s = text.replace(/\[(.*)\]/g, '').trim();//去除返回数据的[]两端的内容,只保留歌词部分return s.replace(/\n/g, '\n<br />');//每行末尾输出html的换行符}DoubanFM.prototype.print_lyrics = function(text) { this.lyrics.innerHTML =text; }var fm = new DoubanFM(true);window.setInterval(function() { fm.request_geci(); }, 1000);
有了以上这些其实功能就已经实现了,但我们还需要将它做成chrome扩展然后安装在chrome浏览器里,这样以后就可以很方便的使用。
建立一个manifest.json文件,内容类似下面这样:
{"name" : "demo","version" : "1.0","manifest_version" : 2,"description" : "用于豆瓣FM配歌词", "page_action" : {"default_icon" : "icon.png","default_title" : "Douban FM"},"permissions" : ["tabs", "http://douban.fm/", "http://*.geci.me/*"],"content_scripts" : [{"matches" : ["http://douban.fm/"],"js" : ["demo.js"],"runat" : "document_end"}],"icons" : {"48" : "icon-48.png","128" : "icon-128.png"}}
然后你在找三张你喜欢的图片分别命名为icon.png,icon-48.png以及icon-128.png,当然这些名字你是可以任意的,只是要个上面文件里的名字对应。
最后在开发者工具里的扩展应用里打包你的代码,就会获得两个文件:
第一个是作为你程序的签名,在你插件以后升级的时候使用,后一个就是安装文件,直接将其拖入chrome浏览器即可安装成功,如下图:
所有工作已完成,你可以享受自己的歌词插件了。
0 0
- Javascript打造豆瓣FM的歌词插件
- 如何为豆瓣FM写一个chrome的歌词插件
- 如何为豆瓣FM写一个chrome的歌词插件
- 为banshee添加豆瓣FM插件
- Android实现豆瓣FM的首页效果
- 豆瓣FM的搜歌利器
- 豆瓣FM-Hacker--豆瓣FM红心兆赫
- Chrome插件开发之制作豆瓣电台歌词
- rhythmbox的歌词插件
- 豆瓣FM分析
- 豆瓣FM snap应用
- 直接下载豆瓣fm的全部歌曲py脚本。(json操作)
- 打算写个下载豆瓣fm歌曲的小程序
- 小小的惊喜-archlinux下通过wine安装豆瓣FM
- Android实现了豆瓣FM的首页效果
- [Ai工程文件] 豆瓣FM页面的Ai设计图分享
- 基于python的豆瓣FM(终端命令行界面)
- 豆瓣FM歌曲播放圆形进度的实现
- Java虚拟机学习 - 对象访问
- 路由器实现负载均衡的三种模式解析
- 将一般的用户加入sudo组
- 设计模式--建造者模式(c#反射实现)
- 给初学者解释程序设计中内存外存的利用
- Javascript打造豆瓣FM的歌词插件
- 邮政储蓄银行储蓄卡银行预留手机号码问题
- linux给普通用户加 root权限
- 加工和交流
- 优秀前端学习资源汇总
- Collections集合工具类、Arrays工具类、其他常用类:System,Runtime,Date,Calendar,Math
- 走在《逆袭大学》的征程上
- media and camera框架之五:JetPlayer
- CareerCup Round-robin tournament