Open MoeMegu opened 3 years ago
我的想法是:小于30s以下的,或者没有的去酷狗搜索
能否登录自己的vip账号?
我的想法是:小于30s以下的,或者没有的去酷狗搜索
API可以登录获取到VIP歌曲链接,能否加上这个功能
指的是网易 还是 QQ ?
@JumpAlang 网易的,因为网易会员歌不登录只能试听30秒,但是NeteaseCloudMusicApi如果登录自己VIP帐号的话可以拿到flac的完整版链接:
2. 邮箱登录
必选参数 :
email: 163 网易邮箱
password: 密码
可选参数 :
md5_password: md5加密后的密码,传入后 password 将失效
接口地址 : /login
调用例子 : /login?email=xxx@163.com&password=yyy
完成登录后 , 会在浏览器保存一个 Cookies 用作登录凭证 , 大部分 API 都需要用到这个 Cookies,非跨域情况请求会自动带上 Cookies
当然qq音乐的API也可以设置COOKIE登录:
设置用户Cookie
接口:/user/setCookie
参数:
data: 字符串,cookie 信息,格式如下 aaa=bbb; ccc=ddd; ....
该方法仅支持 post 请求,content-type 选择 application/json,同时,当且仅当传入的 cookie 为写配置的 QQ 号(启动参数 或 bin/config.js)时才会 被作为默认的公用 cookie 存储使用,各位在搭建自己的服务时记得修改这里的信。
1.qq音乐设置cookie这个之前有试过,比较麻烦,要定时更新cookies,不然登录就过期了,后面就改成如果qq音乐获取不到播放链接 就去酷我查找。 2.网易云音乐api,这个要去做相应定制,因为他现在是存在浏览器。要改成存在服务器。后面也要去定时刷新登录状态。
@JumpAlang qq音乐的接口只能手动导入cookie确实麻烦,可以先不考虑; 不过网易云的接口可以不用存在服务器,根据说明:
v3.30.0后支持手动传入cookie,登录接口返回内容新增 cookie 字段,保存到本地后,get请求带上?cookie=xxx 或者 post请求body带上 cookie 即可,如:/user/cloud?cookie=xxx
先GET一次login接口,然后会返回一个cookie字段,提取之后所有的请求后面加上?cookie=xxx就可以获取到登录后的结果,刚才我用浏览器试了下确实可以,具体代码就得靠大佬看看怎么弄了;刷新登录状态的话可以考虑每次请求都带cookie,这个接口好像是有缓存机制的
网易api这个cookies你有试过过期多久吗?
Max-Age=1296000; Expires=Mon, 8 Feb 2021 09:32:48 GMT;
15天?
我研究下
刚才把大佬代码简单改了下:
/home/www/Jusic-Serve-Houses/src/main/java/com/scoder/jusic/service/imp/MusicServiceImpl.java
972行 ->
response = Unirest.get(jusicProperties.getMusicServeDomain() + "/song/url?br=128000&id=" + musicId + "")
给后面加了&?cookie=,把自己的填了进去确实可以点播VIP歌曲了:
不加cookie的话是30秒
好的,感谢普及,我思考下是加到后端还是网易音乐api
刚把QQ音乐的api换成了下载链接
下载链接
接口:/song/url
参数:
id: songmid
type: 默认 128 // 128:mp3 128k,320:mp3 320k,m4a:m4a格式 128k,flac:flac格式 无损,ape:ape格式 无损
mediaId: 这个字段为其他接口中返回的 strMediaId 字段,可不传,不传默认同 songmid,但是部分歌曲不传可能会出现能获取到链接,但实际404, 所以有条件的大家都传吧
isRedirect: 默认 0,非 0 时直接重定向到播放链接
这个接口跟上个接口一样,也是依赖服务器的 Cookie 信息的,不支持批量获取,不一定是全部的歌曲都有无损、高品的, 要注意结合 size320,sizeape,sizeflac 等参数先判断下是否有播放链接
示例:/song/url?id=0039MnYb0qxYhV
自己加了个cookie也可以放vip了
@Override
public String getQQMusicUrl(String musicId) {
HttpResponse<String> response = null;
String result = null;
Integer failCount = 0;
while (failCount < jusicProperties.getRetryCount()) {
try {
--> response = Unirest.get(jusicProperties.getMusicServeDomainQq() + "/song/url?id=" + musicId + "&type=320")
.asString();
if (response.getStatus() != 200) {
failCount++;
} else {
JSONObject jsonObject = JSONObject.parseObject(response.getBody());
// log.info("获取音乐链接结果:{}", jsonObject);
if (jsonObject.get("result").equals(100)) {
--> result = jsonObject.getString("data");
break;
}else{
return null;
}
}
} catch (Exception e) {
failCount++;
log.error("qq音乐链接获取异常, 请检查音乐服务; Exception: [{}]", e.getMessage());
这个之前我试过了,不过cookies有效期太短,api的开源作者也想不出好的办法,要手动去更新cookies,所以后面我也没去更新这个cookies了。但是接口还留着,不过用的是我qq号码。
qq的登陆确实麻烦
后面想了下,网易vip播放链接功能还是放到api音乐端。这样好跟音乐api一起同步更新
后面还是更新到后端了,api音乐端看不懂。。。 已经部署上去,欢迎过来测试。
接口如下:
2.网易云音乐邮箱登录 http://www.alang.run:8080/netease/loginByEmail?email=邮箱&pwd=密码 登录成功会返回cookie,后端也自动设置cookie,如果不想登录且已知cookie,也可以使用第4个接口,直接设置cookie
3.网易云音乐刷新登录状态 http://www.alang.run:8080/netease/loginRefresh
4.网易云音乐设置cookie http://www.alang.run:8080/netease/setCookie?cookie=xxx
群里已有小伙伴分享帐号,现在即可聆听vip歌曲了
docker有没有更新?
有上传到hub了,你docker-compose那边改成1.5版本
好的,我试试
大佬更新下github源码,我想改下音质
已提交上去了
哈哈哈,我来了,我现在已经放弃共享cookie这条路了,因为存在封号风险,替代方案为根据歌名+歌手+歌曲时长去咪咕音乐匹配,这一块目前只在 soso-music 的客户端里实现,而且其实也只算部分吧,https://github.com/jsososo/soso-music/blob/master/server/route/find.js 这里可能还是有点乱。关于准确度,这个确实是存在一定问题,所以客户端侧我是开放了用户反馈机制,可以手动选择匹配是否错误,进行重新匹配。(不过像周杰伦这种一般都没啥问题)
咪咕音乐匹配的一个好处是,他的链接都是固定的,应该至少在他版权过期之前不会改,可以直接存入缓存/数据库。
另外,咪咕那边官方借口做过修改,我中间也有过很长时间没有更新,现在应该master分支都是ok的,但是我以及下线了在线演示了,因为咪咕会对大量调用的ip进行拉黑,这一块在服务端这边也是你会遇到的一个问题应该。
感谢小哥阳光普及。我目前的备用接口是使用酷我,咪咕背靠移动曲库应该更丰富些
感谢大佬开发!
我提报一个疑似bug:设置网易云cookie的时候,看到后台log里有不少条类似这样的警告。
2022-05-01 09:16:31.536 WARN 7 --- [nio-8888-exec-4] o.a.h.c.protocol.ResponseProcessCookies : Invalid cookie header: "set-cookie: __remember_me=true; Max-Age=1296000; Expires=Mon, 16 May 2022 09:15:59 GMT; Path=/;". Invalid 'expires' attribute: Mon, 16 May 2022 09:15:59 GMT
看到有的串在讨论(比如aws/aws-sdk-java-v2#2421)可能是因为默认不支持解析expires属性,需要设置CookieSpecs.STANDARD
还是什么,但是我完全不懂java,所以不太确定怎么解决……
环境是用docker部署的。
感谢!
目前可以先用手机号或者邮箱登录,不直接调用setCookies方法。 网易云音乐手机登录 http://www.alang.run:8080/netease/loginByPhone?phone=手机号&pwd=密码 登录成功会返回cookie,后端也自动设置cookie,如果不想登录且已知cookie,也可以使用第4个接口,直接设置cookie 2.网易云音乐邮箱登录 http://www.alang.run:8080/netease/loginByEmail?email=邮箱&pwd=密码 登录成功会返回cookie,后端也自动设置cookie,如果不想登录且已知cookie,也可以使用第4个接口,直接设置cookie
确实是这样登录的,也确实显示登录成功了,只是感觉报这个警告可能对cookie的过期时间有影响。
我又查了一下,貌似是Unirest库的问题,在Unirest 2里修复了:Kong/unirest-java#97
确实是这样登录的,也确实显示登录成功了,只是感觉报这个警告可能对cookie的过期时间有影响。
我又查了一下,貌似是Unirest库的问题,在Unirest 2里修复了:Kong/unirest-java#97
感谢提醒,此引用的jar包改动有点大,之前jav坐标是:com.mashape 现在改成com.kong,版本变动过大,得下个版本再修复了
点歌时点到会员歌曲,会出现30s的试听片段,或者出现0s的歌曲。获取歌曲是否可以增加一个判断歌曲长度的条件,总长度低于阈值秒数的歌曲不进入列表?