Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >JAVA实现获取网易云音乐的歌曲url

JAVA实现获取网易云音乐的歌曲url

作者头像
Cheng_Blog
发布于 2022-02-25 01:40:50
发布于 2022-02-25 01:40:50
96700
代码可运行
举报
文章被收录于专栏:Cheng's BlogCheng's Blog
运行总次数:0
代码可运行
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import com.alibaba.fastjson.JSON;
import com.site.blog.my.core.entity.music.NetEaseMusicEntity;
import com.site.blog.my.core.util.HttpUtils;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.lang3.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.math.BigInteger;
import java.util.*;

public class NetEaseMusicEntityUtil {
    /**
     * buU9L(["爱心", "女孩", "惊恐", "大笑"])的值
     */
    public static String g = "0CoJUm6Qyw8W8jud";
    /**
     * buU9L(["流泪", "强"])的值
     */
    public static String b = "010001";
    /**
     * buU9L(Rg4k.md)的值
     */
    public static String c = "00e0b509f6259df8642dbc35662901477df22677ec152b5ff68ace615bb7b725152b3ab17a876aea8a5aa76d2e417629ec4ee341f56135fccf695280104e0312ecbda92557c93870114af6c9d05c4f7f0c3685b7a46bee255932575cce10b424d813cfe4875d3e82047b97ddef52741d546b8e289dc6935b3ece0462db0a22b8e7";
    /**
     * 随机生成长度为16的字符串
     */
    public static String i = createRandomStr(16);


    /**
     * 随机生成长度i的字符串
     *
     * @param size
     * @return
     */
    public static String createRandomStr(int size) {
        String keys = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        String key = "";
        for (int i = 0; i < size; i++) {
            int pos = (int) Math.floor(Math.random() * keys.length());
            key = key + String.valueOf(keys.charAt(pos));
        }
        return key;
    }

    /**
     * 随机生成USERAGENT
     *
     * @return
     */
    public static String createRandomUSERAGENTS() {
        String[] USER_AGENTS = {
                "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 2.0.50727; Media Center PC 6.0)",
                "Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET CLR 1.0.3705; .NET CLR 1.1.4322)",
                "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727; InfoPath.2; .NET CLR 3.0.04506.30)",
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN) AppleWebKit/523.15 (KHTML, like Gecko, Safari/419.3) Arora/0.3 (Change: 287 c9dfb30)",
                "Mozilla/5.0 (X11; U; Linux; en-US) AppleWebKit/527+ (KHTML, like Gecko, Safari/419.3) Arora/0.6",
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2pre) Gecko/20070215 K-Ninja/2.1.1",
                "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9) Gecko/20080705 Firefox/3.0 Kapiko/3.0",
                "Mozilla/5.0 (X11; Linux i686; U;) Gecko/20070322 Kazehakase/0.4.5"
        };
        Random rand = new Random();
        int num = rand.nextInt(USER_AGENTS.length);
        return USER_AGENTS[num];
    }

    /**
     * 截取长度
     *
     * @param str
     * @param size
     * @return
     */
    public static String zfill(String str, int size) {
        while (str.length() < size) {
            str = "0" + str;
        }
        return str;
    }

    /**
     * aes加密
     *
     * @param sSrc
     * @param sKey
     * @return
     * @throws Exception
     */
    public static String aesEncrypt(String sSrc, String sKey) throws Exception {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        byte[] raw = sKey.getBytes();
        SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
        //使用CBC模式,需要一个向量iv,可增加加密算法的强度
        IvParameterSpec iv = new IvParameterSpec("0102030405060708".getBytes());
        cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);
        byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
        //此处使用BASE64做转码。
        return new Base64().encodeToString(encrypted);
    }

    /**
     * rsa加密算法
     *
     * @param text
     * @param pubKey
     * @param modulus
     * @return
     */
    public static String rsaEncrypt(String text, String pubKey, String modulus) {
        List<String> list = Arrays.asList(text.split(""));
        Collections.reverse(list);
        String _text = StringUtils.join(list, "");
        BigInteger biText = new BigInteger(1, _text.getBytes());
        BigInteger biEx = new BigInteger(1, hexToBytes(pubKey));
        BigInteger biMod = new BigInteger(1, hexToBytes(modulus));
        String biRet = biText.modPow(biEx, biMod).toString(16);
        return zfill(biRet, 256);
    }

    /**
     * 十六进制,字节
     *
     * @param hexString 十六进制字符串
     * @return {@link byte[]}
     */
    private static byte[] hexToBytes(String hexString) {
        if (hexString == null || hexString.equals("")) {
            return null;
        }
        int length = hexString.length() / 2;
        char[] hexChars = hexString.toCharArray();
        byte[] bytes = new byte[length];
        String hexDigits = "0123456789abcdef";
        for (int i = 0; i < length; i++) {
            int pos = i * 2; // 两个字符对应一个byte
            int h = hexDigits.indexOf(hexChars[pos]) << 4; // 注1
            int l = hexDigits.indexOf(hexChars[pos + 1]); // 注2
            if (l == -1) { // 非16进制字符
                return null;
            }
            bytes[i] = (byte) (h | l);
        }
        return bytes;
    }

    /**
     * 得到参数
     *
     * @param musicId 音乐id
     * @return {@link String}
     */
    public static String getParams(String musicId) throws Exception {
        String encText = "{\"ids\":\"[" + musicId + "]\",\"level\":\"standard\",\"encodeType\":\"aac\",\"csrf_token\":\"\"}\"";
        return aesEncrypt(aesEncrypt(encText, g), i);
    }


    public static void main(String[] args) throws Exception {
        Map formdata = new HashMap<>(2);
        formdata.put("params", getParams("32019002"));
        formdata.put("encSecKey", rsaEncrypt(i, b, c));
        Map header = new HashMap<>(3);
        header.put("User-Agent", createRandomUSERAGENTS());
        header.put("referer", "https://music.163.com");
        header.put("origin", "https://music.163.com/");
        header.put("accept", "*/*");
        String s = HttpUtils.httpPostRequest("https://music.163.com/weapi/song/enhance/player/url/v1?csrf_token=", header, formdata);

        System.out.println(s);
    }
}

发表时间:2020-12-09

本站文章除注明转载/出处外,皆为作者原创,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-12-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python爬虫:爬取某q音乐歌曲
“相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取某Q付费音乐的案列,欢迎大家一起学习,一起交流,共同进步!”
@莜莜
2021/06/24
1.4K0
js 加密 crypto-js des加密
crypto-js https://www.npmjs.com/package/crypto-js
WindWant
2020/09/11
10.7K0
记一次使用java生成激活码|密钥
其中:密钥类别(2位)可以用来表示该激活码用来激活哪些设备或者哪些平台(如01表示某个平台,02表示某个app),时长(1位)用来表示该激活码的有效时长(如0表示永久、1表示7天、2表示30天等) 注意:前7位数加密后为11位,表示该激活码可以生成的个数;后4位数为随机数 × 11转32进制和混淆策略是为了激活码的加密性,用来校验该激活码是否有效
不愿意做鱼的小鲸鱼
2022/09/26
1.6K0
记一次使用java生成激活码|密钥
Python爬虫实战:网易云音乐爬取
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/11/19
4.3K0
Python爬虫实战:网易云音乐爬取
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
中说道了PBE——Password-based encryption(基于密码加密)。我也做测试了一下,现在把我做的效果给大家演示一下:
Hongten
2018/09/13
7520
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
前后端请求AES加解密
AES前后端加解密 前端 安装依赖 npm install --save crypto-js 工具类 const CryptoJS = require("crypto-js"); exports.aes = { // 加密 encrypt: function (str, key) { return CryptoJS.AES.encrypt(str, key).toString(); }, //解密 decrypt: function (str, key) { let b
码客说
2021/05/13
6.1K0
爬取网易云音乐评论并使用词云展示
  最近听到一首很喜欢的歌,许薇的《我以为》,评论也很有趣,遂有想爬取该歌曲下的所有评论并用词云工具展示。   我们使用chrome开发者工具,发现歌曲的评论都隐藏在以 R_SO_4 开头的 XHR
希希里之海
2018/05/16
8220
利用Python实现网易云音乐自动签到
标题:利用Python实现网易云音乐自动签到 作者:cuijianzhe 地址:https://solo.cjzshilong.cn/articles/2020/03/27/1585293177882.html
cuijianzhe
2022/06/14
1.2K0
利用Python实现网易云音乐自动签到
JS逆向之网易云音乐
最近有一部很火的青春励志言情剧《亲爱的,热爱的》,其主人公之一佟年是一个网络歌手,其粉丝足有百万。好奇的我一搜,网易云音乐真有这么一号人物,真是现实和电视剧傻傻分不清楚。于是我就想着爬一下网易云音乐,分析一波这真假粉丝,(因为我觉得这个粉丝数目肯定存在刷粉丝的嫌疑~)。
老肥码码码
2020/01/17
2.5K0
JS逆向之网易云音乐
Java使用AES加密解密
AES加密机制: 密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 这个标准用来替代原先的DES(Data Encryption Standard),已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中
二十三年蝉
2018/08/01
5.1K0
JavaUtil_01_MD5加密
昨天做java微信开发,引用百度翻译API给公众号添加翻译功能时,需要使用MD5生成签名。注意,使用MD5生成签名后一定要转成小写,不然百度翻译后台不会认你这个签名的,会报无效签名的错误。
shirayner
2018/08/10
6990
Python网易云音乐爬虫进阶篇
年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了~
Awesome_Tang
2018/09/11
2.8K0
Python网易云音乐爬虫进阶篇
爬取网易云音乐精彩评论
故事的小黄花 从出生那年就飘着 童年的荡秋千 随记忆一直晃到现在 Re So So Si Do Si La So La Si Si Si Si La Si La So 吹着前奏望着天空 我想起花瓣试着掉落 ……
猴哥yuri
2018/08/16
5290
如何获取微信文章封面和文章标题!
小程序需要一个获取微信文章封面和标题的功能,然后网上找了一圈,找到了下面这个代码,但是已经不能使用了,获取不到微信的标题,自己改动之后分享给有需要的人。
执行上下文
2022/07/26
1.1K0
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
User-Agent和Referer从列表中随机挑选一个(防止被网站反爬虫程序发现);
訾博ZiBo
2025/01/06
1220
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
网易云音乐歌曲评论爬虫(附源码)
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处理,因此我们需要深入了解它的加密过程之后才能爬取到网易云音乐歌曲的全部评论.
Python中文社区
2018/10/25
2K0
网易云音乐歌曲评论爬虫(附源码)
常见的加密算法
前端使用开源CryptoJS (crypto.js) 为 JavaScript加密算法,Github地址(https://github.com/brix/crypto-js)。目前已支持的算法包括:
分母为零
2019/07/04
1.8K0
DES ECB加解密的Java实现
[2020-08-12 16:04:15.037]# RECV HEX FROM 117.136.81.93 :51423> C4 FC 35 4A 83 E1 71 F2 0D C0 FC B1 01 72 A2 DE D3 42 8C C8 39 0E EA 17 E8 24 4A 0A 0C 71 70 5B A4 06 FA FB 27 94 96 D9 AD E5 BB B6 29 05 D8 DF BE D9 CD F5 BB 33 CA 42 64 F3 6C 82 AB C4 D6 9D 2F E0 61 45 C2 20 49 02
ccf19881030
2020/08/17
1.8K0
Python数据可视化 | 网易云音乐年度歌曲
网易云音乐2018年度听歌报告—遇见你,真好。 相信有不少人在上周,应该已经看过自己网易云音乐的年度报告了。 小F也是去凑凑热闹,瞅了一波自己的年度听歌报告。 那么你在云村又听了多少首歌,听到最多的歌词又是什么呢? 2018年你的年度歌手又是谁,哪些又是你最爱的歌呢? 不过相比去年,我的票圈并没有很多发自己年度报告的朋友。 不得不说,版权之争开始,网易云音乐似乎就在走下坡路。 很多喜欢的歌听不了,这应该是大家共同的痛点。 最大的印象就是周董的歌,在愚人节时下架了,原以为只是个玩笑,不想却是真的。 本次通过
龙哥
2019/04/25
1.8K1
Python数据可视化 | 网易云音乐年度歌曲
Python爬虫爬取网易云音乐全部评论
beautiful now.png 思路整理 访问网易云音乐单曲播放界面,我们可以看到当我们翻页的时候网址是没有变化的,这时候我们大致可以确定评论是通过post形式加载的; .
Awesome_Tang
2018/09/11
1.5K0
Python爬虫爬取网易云音乐全部评论
相关推荐
Python爬虫:爬取某q音乐歌曲
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验