Java版本中最好用的网易云音乐、qq音乐api请求工具,你还在忙于如何使用java调音乐api?来看下这里的实现

去年闲着没事干,就封装了下面QQ和Netease音乐的 api ,目的就是通过java可以更便捷的调用,网易云音乐或者qq音乐的api,另外每个接口我都加了注释,对于不懂的参数,通过接口上的注释直接可以查看,不需要一边看在线文档一遍写java代码。

实现了主流音乐api,项目中还允许你快速的去搭建其它第三方音乐api,只需要按照规范写接口即可完成调用

在线文档:
一、QQ音乐API在线文档
二、网易云音乐API在线文档
封装工具的项目源码地址(附快速上手文档):https://github.com/1015770492/yumbo-music-utils

maven中央仓库地址

仓库地址:https://mvnrepository.com/artifact/top.yumbo.music/yumbo-music-utils

引入下面的maven依赖即可快速使用

gav坐标:

<repositories>
    <repository>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <!-- 使用阿里云镜像仓库地址,防止maven去仓库找不到
        新版本的aliyun镜像仓库地址建议mirrors中也修改,
             如果已经改好了,则可以去掉这个repositories -->
        <url>https://maven.aliyun.com/repository/central</url>
    </repository>
</repositories>

<dependencies>
	<!-- https://mvnrepository.com/artifact/top.yumbo.music/yumbo-music-utils -->
	<dependency>
	  <groupId>top.yumbo.music</groupId>
	  <artifactId>yumbo-music-utils</artifactId>
	  <version>1.2.1</version>
	</dependency>
</dependencies>


  作为一只喜欢听音乐的程序员,喜欢边听歌边敲代码、喜欢边听歌边学习。

就在我大二的时候我诞生了要自己做网站的想法,大二的时候我通过阿里云的云翼计划购买了学生云服务器,因为便宜后面我续购了几年一下子买到了2024年
如果你不想花钱买服务器想自己搭建一台高性能高带宽的公网服务器,可以看下我前面写过的一些文章
《时隔一年,我又来捣鼓我家移动光猫了,你还不知道如何获取公网ip吗?》
《家用移动光猫(型号:HS8545M5)利用公网ipv6对外提供公网服务。(100M的宽带,真香 )》
在这里插入图片描述
从大二开始我就一直想做一个属于自己的博客系统,用于自己日后写博客,这个想法我想了非常的久,因此在后面当我学过非常多的知识后,我对于这个想法有了更多幻想,我想在我的博客系统中加入音乐播放功能。

我模仿了:https://netease-music.fe-mm.com/#/music/playlist的界面,采用Vue+ElementUI自己设计了一个音乐播放器

下面是大致布局(响应式布局)

采用的是一个单组件
在这里插入图片描述
下面的Music.vue就是上面这个布局,github地址:https://github.com/1015770492/music
在这里插入图片描述

在我的想法中,我想把 QQ音乐网易云音乐 的 api 进行统一管理,例如搜索一首歌曲的资源,可以统一两个库中的音乐,这样就不容易因为版权问题不能播放。


因此诞生了统一QQ音乐网易云音乐 的 api 的想法。

在我去实现的过程中,我在思考我平常使用的springboot注解例如@Autowired@GetMapping等注解,我想模仿一下springboot中的做法

我想做到这样:

@MusicService(url = "/search/hot",serviceProvider = MusicEnum.NeteaseCloudMusic)
JSONObject jsonObject;// 调用网易云音乐api,将返回的数据注入到这个对象中

当时我想做到的是在局部变量中进行注入,也就是注解作用:@Target({ElementType.LOCAL_VARIABLE}),但是我失败了,因为通过反射只能得到局部变量的名称,却得不到局部变量的值,也就是实现不了将json注入到jsonObject中。


如果能这样做,那么使用起来最方便,可以直接在需要的地方直接加注解注入进去,然后直接使用。


另外我还要解决一个问题,那就是通过反射得到注解信息后,需要在调用它的时候才发请求(懒加载的含义)也就是代码执行到这个注解的时候才去发请求,得到返回的json数据。

这是一个比较麻烦的事情,我的处理方式是,将反射的时机放在了get方法中在get的时候执行反射并且将请求得到的数据返回

一个调用的例子

下面是网易云音乐的一个接口
在这里插入图片描述

import com.alibaba.fastjson.JSONObject;
import top.yumbo.util.music.musicImpl.netease.NeteaseCloudMusicInfo;

public class NeteaseCloudMusicDemo {
    
    public static void main(String[] args) {
    	// 得到封装网易云音乐信息的工具类
        final NeteaseCloudMusicInfo neteaseCloudMusicInfo = new NeteaseCloudMusicInfo();
        // 调用网易云的热搜服务,返回json数据
        final JSONObject jsonObject = neteaseCloudMusicInfo.searchHot();
        System.out.println(jsonObject);// 打印得到的json数据

    }
}

下面是控制台中打印的信息,最后一行就是json对象的打印,前面两行是反射的时候我为了方便debug将调用的方法信息都打印一下

当前执行:class top.yumbo.util.music.musicImpl.netease.NeteaseCloudMusicInfo.searchHot()
请求的相对路径:/search/hot
{"result":{"hots":[{"iconType":1,"first":"四季予你","second":1},{"iconType":1,"first":"有何不可","second":1},{"iconType":1,"first":"我的世界守则","second":1},{"iconType":1,"first":"踏山河","second":1},{"iconType":1,"first":"薛之谦","second":1},{"iconType":1,"first":"张杰","second":1},{"iconType":1,"first":"We Can't Stop","second":1},{"iconType":1,"first":"红黑","second":1},{"iconType":1,"first":"起风了","second":1},{"iconType":1,"first":"林俊杰","second":1}]},"code":200}

项目地址

https://github.com/1015770492/yumbo-music-utils

如果想要调用QQ音乐的api则调用我写好的工具类就行了
也就是替换上面new NeteaseCloudMusicInfo();改为new QQMusicInfo();
  因为两个音乐平台的地址以及功能是不一样的,因此我没有将他们再进行抽象化,准备后面通过类来完成它们的统一。
在这里插入图片描述

也为了日后方便,我计划会将他做成一个工具类通过maven发布到maven仓库中,这个工具或许日后我会把它做成springboot启动器以微服务的方式暴露出去。

项目后期工作

做好了这个架子,后面就非常简单,只需要按照文档

网易云音乐api文档在线地址
QQ音乐api文档在线地址

如下写封装方法即可
以热搜/search/hot为例
在这里插入图片描述

NeteaseCloudMusicInfo类中的定义如下即可,具体代码见github

在这里插入图片描述

  • 12
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
引用的异常`java.lang.IllegalStateException: Engine is busy - please try later`表示引擎正在忙于处理其他任务,建议稍后再尝试。这个异常通常在多线程或并发执行的情况下出现,可能是由于并发请求过多导致引擎无法及时处理。解决这个问题的方法包括增加线程数、请求间隔时间等。 而引用提供了JDBC jar包的下载链接,你可以访问该链接获取mysql-connector-java 8.0.16版本的jar包,该jar包是用于在Java应用程序连接和操作MySQL数据库的。 至于引用的异常`JDBC请求报错Variable Name must not be null in JDBC Request`,这是由于在JDBC请求变量名为空导致的。在JDBC请求,可以通过使用变量来传递参数,但是变量名不能为空。请检查你的JDBC请求配置,确保变量名正确并不为空。 总结回答你的问题,`java.awt.IllegalComponentStateException`异常通常是由多线程或并发执行引起的,可以通过整线程数或请求间隔来解决。另外,你可以通过引用提供的链接下载mysql-connector-java 8.0.16版本的JDBC jar包来解决对MySQL数据库的操作,同时请确保在JDBC请求正确使用变量名避免出现`Variable Name must not be null`的异常。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [性能测试_JMeter你可能会忽略的细节点-2](https://blog.csdn.net/qq_30864373/article/details/126535516)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗水人间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值