分类 前端分享 下的文章

介绍开源的网易云音乐 NodeJS 版 API,划重点这是个开源项目


发现它就要从大二参加山东省齐鲁软件设计大赛说起,我们的团队叫做神鸟工作室。名字是挺土的,不过结局还好,拿到了二等奖(100块奖金:joy:)。项目是一个音乐软件,我们卡在了音乐来源上面,当时年少轻狂想着全网搜索音乐。当时的我们技术真的是做不到这个,本人开始想办法(不是多牛逼,其实是我真能巴拉),然后就有了下文。

项目介绍

项目地址

文档地址

文档截图

这是基于跨站请求伪造 (CSRF), 伪造请求头 , 调用官方 API实现的网易云音乐api

实现情况

全部接口已升级到最新
具备登录接口,多达100多个接口
更完善的文档

基本功能、特性(部分)

基本功能、特性(部分)

运行这个一本正经的项目

安装项目

$ git clone git@github.com:Binaryify/NeteaseCloudMusicApi.git

$ npm install

运行项目

$ node app.js

服务器启动默认端口为 3000, 若不想使用 3000 端口 , 可使用以下命令 : Mac/Linux

$ PORT=4000 node app.js

windows 下使用 git-bash 或者 cmder 等终端执行以下命令 :

$ set PORT=4000 && node app.js

服务器启动默认 host 为localhost,如果需要更改, 可使用以下命令 : Mac/Linux

$ HOST=127.0.0.1 node app.js

windows 下使用 git-bash 或者 cmder 等终端执行以下命令 :

$ set HOST=127.0.0.1 && node app.js

在这里非常感谢这个项目的作者,非常好的开源项目。

不久的将来,我会上线这个api,免费供网友使用。全免费哦,为保证服务器稳定运行,可能会限制次数,如您有需要可为您在您的主机上免费搭建专属音乐api服务,不收费哦。


针对angular分页插件tm.pagination二次触发问题三种解决方案


今天在开发个人博客的时候,需要对列表进行分页操作,因为整体使用的是AngularJs,所以分页插件也就选择了AngularJs pagination.js。可是在调试的时候发现的非常恶心的事情,在加载列表的时候接口被请求了两次,可要知道个人网站可经不起这成倍的请求。然后就开始了漫漫资料查询路,有资料说这两个变量需要同时监听

$scope.paginationConf.currentPage
$scope.paginationConf.itemsPerPage

否则就会加载两次。当场就象暴走,懒得我还不想换,没办法所以就有了下面的更改。

第一种解决方式,也是自己的解决方式

//第一次加载标志位
$scope.loadDataFirst = 1;
//分页控件配置 
$scope.paginationConf = {
    currentPage: 1,
    totalItems: 10,
    itemsPerPage: 10,
    perPageOptions: [10, 20, 30, 40, 50],
    onChange: function() {
        if($scope.loadDataFirst == 1) {
            $scope.reloadList(); //重新加载
            $scope.loadDataFirst = 2;
        }else if($scope.loadDataFirst == 2) {
            $scope.loadDataFirst = 0;
        }else if ($scope.loadDataFirst == 0) {
            $scope.reloadList(); //重新加载
        }
    }
};

说一下思路:既然它会加载两次,那么直观的来说,初始化变量

$scope.loadDataFirst = 1。

进入监听事件判断是否为1,如果是的话加载第一页列表,将

$scope.loadDataFirst = 2;

否则进入下一判断,判断如果为2,表示第一次列表已经加载,进入第二次加载,此时不加载数据,将

$scope.loadDataFirst = 0;

最后去判断是否为零,是的话,加载数据,加载参数分页插件会设置。

 
为什么会有最后一个判断

  1. 不是直接else,为了灵活性,将影响控制在最小范围
  2. 在切换每页数据的时候,还会监听这里,所以必须预留一个加载结束后,可以直接执行的列表刷新

第二种解决方式,网上找的大佬的,灵感也是来自于此,只是稍作改进

$scope.reload = true;
//分页控件配置 
$scope.paginationConf = {
    currentPage : 1,
    totalItems : 10,
    itemsPerPage : 10,
    perPageOptions : [ 10, 20, 30, 40, 50 ],
    onChange : function() {
        if(!$scope.reload) {
            return;
        }
        $scope.reloadList();//重新加载 这个方法会重复调用两次
        $scope.reload = false;
        setTimeout(function() {
            $scope.reload = true;
        }, 200);
    }
};

第三种解决方式,网上找的大佬的,据说资源消耗太大,不建议使用

$scope.conf = {
    // 总条数
    total : 1190,
    // 当前页
    currentPage : 1,
    // 一页展示多少条
    itemPageLimit : 1,
    // 是否显示一页选择多少条
    isSelectPage : false,
    // 是否显示快速跳转
    isLinkPage : false
}
// 监控你的页码 , 发生改变既请求
$scope.$watch('conf.currentPage + conf.itemPageLimit' , function(news){
    // 把你的http请求放到这里
    console.log($scope.conf.currentPage , $scope.conf.itemPageLimit);
});

技术之路永无止境,一直走就好