前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >JAVA实现获取网易云音乐的歌曲url

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

作者头像
Cheng_Blog
发布于 2022-02-25 01:40:50
发布于 2022-02-25 01:40:50
92900
代码可运行
举报
文章被收录于专栏: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 删除。

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
JS逆向之网易云音乐
最近有一部很火的青春励志言情剧《亲爱的,热爱的》,其主人公之一佟年是一个网络歌手,其粉丝足有百万。好奇的我一搜,网易云音乐真有这么一号人物,真是现实和电视剧傻傻分不清楚。于是我就想着爬一下网易云音乐,分析一波这真假粉丝,(因为我觉得这个粉丝数目肯定存在刷粉丝的嫌疑~)。
老肥码码码
2020/01/17
2.5K0
JS逆向之网易云音乐
flutter属于前端还是后端(kotlin比较flutter)
尝试了网上多种库和教程都没办法互解,JAVA代码如下,求个大佬帮忙用dart(Flutter)实现一个可以互解的aes加密代码package com.example.lib;
全栈程序员站长
2022/07/25
8660
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.7K0
Python爬虫Scrapy爬西刺代理网站匿名ip
代理池ip爬取 #0 GitHub https://github.com/Coxhuang/scrapy_proxy #1 环境 Python3.7.3 Scrapy==1.6.0 #2 需求 爬取ip代理网站免费的ip 把不能用的ip过滤掉 目标站点 https://www.xicidaili.com/nt/ #3 准备 #3.1 新建一个scrapy项目 scrapy startproject proxy_ips . └── proxy_ips ├── proxy_ips │ ├──
Autooooooo
2020/11/09
5680
Python爬虫Scrapy爬西刺代理网站匿名ip
记一次使用java生成激活码|密钥
其中:密钥类别(2位)可以用来表示该激活码用来激活哪些设备或者哪些平台(如01表示某个平台,02表示某个app),时长(1位)用来表示该激活码的有效时长(如0表示永久、1表示7天、2表示30天等) 注意:前7位数加密后为11位,表示该激活码可以生成的个数;后4位数为随机数 × 11转32进制和混淆策略是为了激活码的加密性,用来校验该激活码是否有效
不愿意做鱼的小鲸鱼
2022/09/26
1.5K0
记一次使用java生成激活码|密钥
Python爬虫:爬取某q音乐歌曲
“相信大家都很喜欢听音乐,在各种音乐平台上,今天为大家介绍一个利用Python爬取某Q付费音乐的案列,欢迎大家一起学习,一起交流,共同进步!”
@莜莜
2021/06/24
1.3K0
Python爬虫实战:网易云音乐爬取
本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。
松鼠爱吃饼干
2020/11/19
4.3K0
Python爬虫实战:网易云音乐爬取
爬取网易云音乐评论并使用词云展示
  最近听到一首很喜欢的歌,许薇的《我以为》,评论也很有趣,遂有想爬取该歌曲下的所有评论并用词云工具展示。   我们使用chrome开发者工具,发现歌曲的评论都隐藏在以 R_SO_4 开头的 XHR
希希里之海
2018/05/16
8070
Python网易云音乐爬虫进阶篇
年前写过一篇爬网易云音乐评论的文章,爬不了多久又回被封,所以爬下来那么点根本做不了什么分析,后面就再改了下,加入了多线程,一次性爬一个歌手最热门50首歌曲的评论,算是进阶版了~
Awesome_Tang
2018/09/11
2.8K0
Python网易云音乐爬虫进阶篇
js 加密 crypto-js des加密
crypto-js https://www.npmjs.com/package/crypto-js
WindWant
2020/09/11
10.4K0
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
中说道了PBE——Password-based encryption(基于密码加密)。我也做测试了一下,现在把我做的效果给大家演示一下:
Hongten
2018/09/13
7380
PBE_Password-based encryption(基于密码加密)_项目中你也可以有
网易云音乐歌曲评论爬虫(附源码)
用过网易云音乐听歌的朋友都知道,网易云音乐每首歌曲后面都有很多评论,热门歌曲的评论更是接近百万或者是超过百万条.现在我就来分享一下如何爬取网易云音乐歌曲的全部评论,由于网易云音乐的评论都做了混淆加密处理,因此我们需要深入了解它的加密过程之后才能爬取到网易云音乐歌曲的全部评论.
Python中文社区
2018/10/25
1.9K0
网易云音乐歌曲评论爬虫(附源码)
Java实现微信跳一跳抓包修改分数
原改分代码为Python代码, import requests import json import time from Crypto.Cipher import AES import base64 action_data = { "score": 10086, "times": 666, "game_data": "{}" } session_id = "5TrXoE7IXtM/Nr7vITnbU9bmR53VH0u8RkVnm6m/Fezg==" aes_key = ses
杨逸轩
2018/06/14
1.4K0
JavaUtil_01_MD5加密
昨天做java微信开发,引用百度翻译API给公众号添加翻译功能时,需要使用MD5生成签名。注意,使用MD5生成签名后一定要转成小写,不然百度翻译后台不会认你这个签名的,会报无效签名的错误。
shirayner
2018/08/10
6840
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
User-Agent和Referer从列表中随机挑选一个(防止被网站反爬虫程序发现);
訾博ZiBo
2025/01/06
790
【Java爬虫】004-Jsoup学习笔记(补充:网页内容获取相关)
如何获取微信文章封面和文章标题!
小程序需要一个获取微信文章封面和标题的功能,然后网上找了一圈,找到了下面这个代码,但是已经不能使用了,获取不到微信的标题,自己改动之后分享给有需要的人。
执行上下文
2022/07/26
9950
爬虫实例七:网易云音乐
网易云在线播放每首歌曲时,都有一个外链地址,这是不会变的,跟每首歌的唯一一个id绑定在一起,而每首歌audio文件的URL如下:
远方的星
2021/03/01
4.3K1
爬虫实例七:网易云音乐
接口API中的敏感数据基于AES进行安全加密后返回
由于之前没有相关的经验,所以先在网上搜罗了一阵,这篇博客不错https://www.cnblogs.com/codeon/p/6123863.html给了我一些思路和启发。
翎野君
2023/05/12
9390
接口API中的敏感数据基于AES进行安全加密后返回
利用Python实现网易云音乐自动签到
标题:利用Python实现网易云音乐自动签到 作者:cuijianzhe 地址:https://solo.cjzshilong.cn/articles/2020/03/27/1585293177882.html
cuijianzhe
2022/06/14
1.2K0
利用Python实现网易云音乐自动签到
爬取网易云音乐精彩评论
故事的小黄花 从出生那年就飘着 童年的荡秋千 随记忆一直晃到现在 Re So So Si Do Si La So La Si Si Si Si La Si La So 吹着前奏望着天空 我想起花瓣试着掉落 ……
猴哥yuri
2018/08/16
5150
相关推荐
JS逆向之网易云音乐
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文