吉他初学者学习网站搭建系列(6)——如何根据歌名查歌词

文章目录

背景

当你想要扒歌时,第一件事就是如何先拿到一首歌的歌词。当然,你可以去复制粘贴,但是如果可以在网站中直接搜到,那就太棒了。

实现

这里用到了国外的API https://developer.musixmatch.com/documentation。该网站提供了丰富的全球曲库,以及丰富的API,供用户查询。

分免费和付费两个版本,免费版本提供每日2000次的调用量(所有接口),但对于非商业场景已经够用。你首先需要注册一个账号,然后你会获得免费的apikey。

track.search

get请求:https://api.musixmatch.com/ws/1.1/track.search

参数:
apikey apikey
q_track歌名包含的字
q_artist歌手包含的字

请求结果如下:

此时,你会拿到一个搜索结果列表track_list,然后你可以得到一个重要参数:track_id

track.lyrics.get

上一步拿到的track_id将作为这个API的参数,

get请求:https://api.musixmatch.com/ws/1.1/track.lyrics.get

参数:
apikey apikey
track_id track唯一标识

返回结果:

歌词是lyrics_body,展示时,你还需要将lyrics_copyright展示,以防止侵权。

效果

存在问题

由于这个api是有域名的,所以本地访问会有CORS限制,所以,你需要做一层代理,例如,假设你用的vite或者webpack,你可以在配置中,增加proxy的设置:

javascript 复制代码
import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [vue()],
  server: {
    proxy: {
      "/api": {
        target: "http://api.musixmatch.com",
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, ""),
      },
    },
  },
})

我这里将本地的访问都改为/api/ws/1.1/...,这样,就会命中这个代理。

如果是线上项目,你需要给线上配一个代理服务器才能解决这个问题,比如通过ngnix。如果是静态页面,就没有太好的方法了,除非musixmatch提供白名单服务,目前来看并没有。因此我只有本地才会启用这个功能模块,线上我直接隐藏了。

希望能帮助到你😉

相关推荐
学长毕设10 小时前
基于SpringBoot的青少年编程学习平台系统-附源码
spring boot·学习·青少年编程
小大宇10 小时前
Vue知识点6-computed计算属性
前端·javascript·vue.js
程序员海军11 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_9499706911 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
天外飞雨道沧桑13 小时前
我在浏览器里练了一个 792 参数的大模型,它学会了补全 JavaScript
开发语言·javascript·ai·ecmascript·ai编程
小小de风呀14 小时前
de风——【从零开始学习Linux】(九):进程基础 —— 从冯诺依曼体系到 fork 创建进程
linux·学习
李某学编程14 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习
鶴哥只手遮天14 小时前
jQuery 4.0 源码架构与工程实践-第 01 章 · 全景与工程结构:一个 20 岁库的自省
前端·javascript·jquery
Song_RsHt15 小时前
Redis 与微服务,什么场景下无可替代
java·redis·后端·学习·微服务
inksci15 小时前
在线编辑表格,功能强大,json互转
前端·javascript·html