??我是一只喜歡聽音樂的猿,不知何時起,我養成了一邊聽歌一邊學習的習慣,
??我喜歡在聽著音樂敲代碼、我喜歡聽著歌看視頻教程、我喜歡聽著歌去思考問題,
就在我大二的時候我誕生了要自己做網站的想法,大二的時候我通過阿里云的云翼計劃購買了學生云服務器,因為便宜后面我續購了幾年一下子買到了2024年

從大二開始我就一直想做一個屬于自己的博客系統,用于自己日后寫博客,這個想法我想了非常的久,因此在后面當我學過非常多的知識后,我對于這個想法有了更多幻想,我想在我的博客系統中加入音樂播放功能,
我模仿了: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

最近在廈門做我的畢業設計,在未來的兩個月里,我準備一個人完成我的分布式專案yumbo博客系統,
如果感興趣,可以關注yumbo博客系統的github地址:
前端專案地址:https://github.com/1015770492/yumbo-vue
后端專案地址:https://github.com/1015770492/yumbo
前端技術堆疊;:Vue+ElementUI
后端技術堆疊:springCloudAlibaba技術堆疊 + MybatisPlus + MySQL + MongoDB + Redis + springsecurity
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/246588.html
標籤:其他
