从 Spotify 获取歌词数据

For*_*vin 5 spotify web-scraping

我已经知道网址是https://spclient.wg.spotify.com/color-lyrics/v2/track/${TRACK_ID}?format=json&vocalRemoval=false

它需要两个标头。app-platform: WebPlayerauthorization: Bearer TOKEN

因此,使用curl我可以获得这样的歌词信息:

$ TRACK_ID=3z8h0TU7ReDPLIbEnYhWZb
$ BEARER_TOKEN=xxxxxxxxxxxxxx
$ curl "https://spclient.wg.spotify.com/color-lyrics/v2/track/${TRACK_ID}?format=json&vocalRemoval=false" -H "app-platform: WebPlayer" -H "authorization: Bearer ${BEARER_TOKEN}"
{
  "lyrics": {
    "syncType": "LINE_SYNCED",
    "lines": [
      {
        "startTimeMs": "110",
        "words": "Is this the real life? Is this just fantasy?",
        "syllables": [],
        "endTimeMs": "0"
      },
      {
        "startTimeMs": "6990",
        "words": "Caught in a landslide, no escape from reality",
        "syllables": [],
        "endTimeMs": "0"
      },
      ...
Run Code Online (Sandbox Code Playgroud)

实际的问题是如何以编程方式获取所需的不记名令牌?我已尝试使用此网站上的“获取令牌”按钮请求令牌:https://developer.spotify.com/console/get-track/

但该令牌似乎仅适用于官方 API。对于歌词 API,我总是收到该令牌的以下响应:

{
  "error": {
    "status": 403,
    "message": "Client not allowed"
  }
}
Run Code Online (Sandbox Code Playgroud)

此外,上面链接中的不记名令牌更短并且不包含破折号。

我知道我可以复制https://open.spotify.com上的 Web 客户端使用的不记名令牌,但令牌总是会在很短的时间后过期。

因此,我要么寻找一种手动方式来获取永久令牌,要么寻找一种以编程方式获取短期令牌的方法。

我并不是在寻找特定编程语言的解决方案。任何语言都可以做抽象的解释。

Nee*_*tta 2

这个 API 不是为公共使用而设计或记录的,而且也没有获得许可(请参阅Musixmatch的 API,Spotify 从中获取歌词),因此使用它(或吹嘘在 StackOverflow 上找到它)可能只会让 Spotify 进一步锁定他们的 API,你(不太可能但有可能)陷入法律麻烦(IANAL)。

话虽这么说,这些Bearer xxx令牌与从 Spotify官方 API创建的令牌不同,找到这些令牌的最简单方法就是自动执行登录过程(可能在浏览器中)并发出请求(这些令牌可能需要每隔几分钟/几小时/几天刷新一次,因此自动化是这里的关键)。我建议开始在无头浏览器上研究 Puppeteer 或 MS Playwright,然后从那里检索承载令牌。如果 API 似乎与这些 Bearer 令牌发生冲突,那么最好通过复制原始请求并修改歌曲 ID,在浏览器中执行 Puppeteer 本身的请求。

顺便说一句,我知道 Musixmatch 有多烦人,所以我完全理解第二段是否是您要走的路。