首先,需要下载NeteaseCloudMusicApi开源项目是集成了各种网易云音乐API

登录
刷新登录
发送验证码
校验验证码
注册(修改密码)
获取用户信息 , 歌单,收藏,mv, dj 数量
获取用户歌单
获取用户电台
获取用户关注列表
获取用户粉丝列表
获取用户动态
获取用户播放记录
获取精品歌单
获取歌单详情
搜索
搜索建议
获取歌词
歌曲评论
收藏单曲到歌单
专辑评论
歌单评论
mv 评论
电台节目评论
banner
获取歌曲详情
获取专辑内容
获取歌手单曲
获取歌手 mv
获取歌手专辑
获取歌手描述
获取相似歌手
获取相似歌单
相似 mv
获取相似音乐
获取最近 5 个听了这首歌的用户
获取每日推荐歌单
获取每日推荐歌曲
私人 FM
签到
喜欢音乐
垃圾桶
歌单 ( 网友精选碟 )
新碟上架
热门歌手
最新 mv
推荐 mv
推荐歌单
推荐新音乐
推荐电台
推荐节目
独家放送
mv 排行
获取 mv 数据
播放 mv/视频
排行榜
歌手榜
云盘
电台 - 推荐
电台 - 分类
电台 - 分类推荐
电台 - 订阅
电台 - 详情
电台 - 节目
给评论点赞
获取动态
热搜列表(简略)
发送私信
发送私信歌单
新建歌单
收藏/取消收藏歌单
歌单分类
收藏的歌手列表
订阅的电台列表
相关歌单推荐
付费精选接口
音乐是否可用检查接口
登录状态
获取视频播放地址
发送/删除评论
热门评论
视频评论
退出登录
所有榜单
所有榜单内容摘要
收藏视频
收藏 MV
视频详情
相关视频
关注用户
新歌速递
喜欢音乐列表(无序)
收藏的 MV 列表
获取最新专辑
听歌打卡
获取视频标签/分类下的视频
已收藏专辑列表
获取动态评论
歌单收藏者列表
云盘歌曲删除
热门话题
电台 - 推荐类型
电台 - 非热门类型
电台 - 今日优选
心动模式/智能播放
转发动态
删除动态
分享歌曲、歌单、mv、电台、电台节目到动态
通知-私信
通知-评论
通知-@我
通知-通知
设置
云盘数据详情
私信内容
我的数字专辑
batch批量请求接口
获取视频标签列表
全部mv
网易出品mv
收藏/取消收藏专辑
专辑动态信息
热搜列表(详细)
更换绑定手机
检测手机号码是否已注册
初始化昵称
更新歌单描述
更新歌单名
更新歌单标签
默认搜索关键词
删除歌单
电台banner
用户电台
热门电台
电台 - 节目详情
电台 - 节目榜
电台 - 新晋电台榜/热门电台榜
类别热门电台
云村热评
电台24小时节目榜
电台24小时主播榜
电台最热主播榜
电台主播新人榜
电台付费精品榜
歌手热门50首歌曲
购买数字专辑
获取 mv 点赞转发评论数数据
获取视频点赞转发评论数数据
调整歌单顺序
调整歌曲顺序
独家放送列表
获取推荐视频
获取视频分类列表
获取全部视频列表接口
获取历史日推可用日期列表
获取历史日推详细数据
国家编码列表
首页-发现
首页-发现-圆形图标入口列表
数字专辑-全部新碟
数字专辑-热门新碟
数字专辑&数字单曲-榜单
数字专辑-语种风格馆
数字专辑详情
更新头像
歌单封面上传
楼层评论
歌手全部歌曲
精品歌单标签列表
用户等级信息
电台个性推荐
用户绑定信息
用户绑定手机
新版评论
点赞过的视频
收藏视频到视频歌单
删除视频歌单里的视频
最近播放的视频
音乐日历
电台订阅者列表
云贝签到信息
云贝签到
云贝所有任务
云贝todo任务
云贝今日签到信息
云贝完成任务
云贝收入
云贝支出
云贝账户信息
账号信息
最近联系人
私信音乐
抱一抱评论
评论抱一抱列表
收藏的专栏
关注歌手新歌
关注歌手新MV
歌手详情
云盘上传
二维码登录
话题详情
话题详情热门动态
歌单详情动态
绑定手机
一起听状态
用户历史评论
云盘歌曲信息匹配纠正
云贝推歌
云贝推歌历史记录
已购单曲
获取mlog播放地址
将mlog id转为视频id
vip成长值
vip成长值获取记录
vip任务
领取vip成长值
歌手粉丝
数字专辑详情
数字专辑销量
音乐人数据概况
音乐人播放趋势
音乐人任务
账号云豆数
领取云豆

环境要求

需要 NodeJS 8.12+ 环境

安装


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

$ npm install

项目地址:

https://github.com/binaryify/neteasecloudmusicapi

Java

依赖

  <dependencies>
        <dependency>
            <groupId>com.squareup.okhttp3</groupId>
            <artifactId>okhttp</artifactId>
            <version>4.8.0</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
    </dependencies>
package teach;


import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Scanner;


public class Main {
    public static void main(String[] args) throws IOException {
        System.out.println("请输入歌单ID");
        Scanner input = new Scanner(System.in);
        String a = input.next();
        OkHttpClient client = new OkHttpClient().newBuilder()
                .build();
        Request request = new Request.Builder()
                .url("http://localhost:3000/playlist/detail?id=" + a)
                .method("GET", null)
                .addHeader("adminToken", "123433333333ss")
                .addHeader("Cookie", "NMTID=00OtKcEk-mEW3xa7kzlsfhTmRda3dsAAAF5A1Vbzg")
                .build();
        Response response = client.newCall(request).execute();

        JSONObject jsonArray = JSONObject.parseObject(response.body().string());

        String playlist = jsonArray.getString("playlist");
        JSONObject jsonObject1 = JSONObject.parseObject(playlist);
        String trackIds = jsonObject1.getString("trackIds");
        JSONArray jsonArray1 = JSONArray.parseArray(trackIds);
        System.out.println("共"+jsonArray1.size()+"首");
        String id = null;
        String name = null;
        String down = null;
        for (int i1 = 0; i1 < jsonArray1.size(); i1++) {
            JSONObject jsonObject2 = JSONObject.parseObject(jsonArray1.getString(i1));
            id = jsonObject2.get("id").toString();
            request = new Request.Builder()
                    .url("http://localhost:3000/song/detail?ids=" + id)
                    .method("GET", null)
                    .build();
            response = client.newCall(request).execute();
            JSONObject song = JSONObject.parseObject(response.body().string());
            JSONArray songs = JSONArray.parseArray(song.getString("songs"));
            for (int i = 0; i < songs.size(); i++) {
                JSONObject object = JSONObject.parseObject(songs.get(i).toString());
                name=object.getString("name");
            }
            request = new Request.Builder()
                    .url("http://localhost:3000/song/url?id=" + id)
                    .method("GET", null)
                    .build();
            response = client.newCall(request).execute();
            JSONObject url = JSONObject.parseObject(response.body().string());
            JSONArray urls = JSONArray.parseArray(url.getString("data"));
            for (int i = 0; i < urls.size(); i++) {
                JSONObject object = JSONObject.parseObject(urls.getString(i));
                down = object.getString("url");
            }
            if(down==null){
                System.out.println("没版权");
                continue;
            }
            System.out.println("歌名:"+name);
            System.out.println("歌曲ID:"+id);
            System.out.println("歌曲URL:"+down);
            downLoadFromUrl(down,name+".wav","/Volumes/Throws/大杂烩");
        }

    }

    public static void downLoadFromUrl(String urlStr, String fileName, String savePath) throws IOException {
        URL url = new URL(urlStr);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();
        //设置超时间为3秒
        conn.setConnectTimeout(3 * 1000);
        //防止屏蔽程序抓取而返回403错误
        conn.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");

        //得到输入流
        InputStream inputStream = conn.getInputStream();
        //获取自己数组
        byte[] getData = readInputStream(inputStream);

        //文件保存位置
        File saveDir = new File(savePath);
        if (!saveDir.exists()) {
            saveDir.mkdir();
        }
        File file = new File(saveDir + File.separator + fileName);
        FileOutputStream fos = new FileOutputStream(file);
        fos.write(getData);
        if (fos != null) {
            fos.close();
        }
        if (inputStream != null) {
            inputStream.close();
        }
        System.out.println("info:" + url + " download success");

    }

    private static byte[] readInputStream(InputStream inputStream) throws IOException {
        byte[] buffer = new byte[1024];
        int len = 0;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        while ((len = inputStream.read(buffer)) != -1) {
            bos.write(buffer, 0, len);
        }
        bos.close();
        return bos.toByteArray();

    }




}

实现思路:利用开源项目的接口来解析json获取下载地址并下载到本地 我只实现了从歌单下载 想实现其他请看NeteaseCloudMusicApi的官方文档

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐