For*_*vin 5 spotify web-scraping
我已经知道网址是https://spclient.wg.spotify.com/color-lyrics/v2/track/${TRACK_ID}?format=json&vocalRemoval=false
它需要两个标头。app-platform: WebPlayer和authorization: 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 客户端使用的不记名令牌,但令牌总是会在很短的时间后过期。
因此,我要么寻找一种手动方式来获取永久令牌,要么寻找一种以编程方式获取短期令牌的方法。
我并不是在寻找特定编程语言的解决方案。任何语言都可以做抽象的解释。
这个 API 不是为公共使用而设计或记录的,而且也没有获得许可(请参阅Musixmatch的 API,Spotify 从中获取歌词),因此使用它(或吹嘘在 StackOverflow 上找到它)可能只会让 Spotify 进一步锁定他们的 API,你(不太可能但有可能)陷入法律麻烦(IANAL)。
话虽这么说,这些Bearer xxx令牌与从 Spotify官方 API创建的令牌不同,找到这些令牌的最简单方法就是自动执行登录过程(可能在浏览器中)并发出请求(这些令牌可能需要每隔几分钟/几小时/几天刷新一次,因此自动化是这里的关键)。我建议开始在无头浏览器上研究 Puppeteer 或 MS Playwright,然后从那里检索承载令牌。如果 API 似乎与这些 Bearer 令牌发生冲突,那么最好通过复制原始请求并修改歌曲 ID,在浏览器中执行 Puppeteer 本身的请求。
顺便说一句,我知道 Musixmatch 有多烦人,所以我完全理解第二段是否是您要走的路。