我是高级用户,但我使用此代码段获得了
403 Premium account needed
。
只有我一个人,还是从命令行播放 spotify 歌曲是一件非常困难的事情?
#!/bin/bash
TRACK_ID="0hCB0YR03f65y1YKr59OSs" # Zeppelin
# Spotify App Credentials
CLIENT_ID="my_id"
CLIENT_SECRET="my_secret"
# Obtain token
TOKEN="$(\
curl -X POST "https://accounts.spotify.com/api/token" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=client_credentials&client_id=$CLIENT_ID&client_secret=$CLIENT_SECRET"| jq -r '.access_token')"
# Play a song on the Spotify player
curl -s -X "PUT" "https://api.spotify.com/v1/me/player/play" \
--data "{\"uris\": [\"spotify:track:$TRACK_ID\"]}" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${TOKEN}"
附言Spotipy 返回相同的错误
Client Credentials Flow
。
该方法可以获取艺术家、专辑和歌曲信息。
Authorization Code Flow
。可以做用户播放歌曲,获取用户信息等相关用户API。
它应该通过“redirect_URI”获取令牌。
这里有例子 在这里
演示代码 - 在 node.js 上使用 express 另存为
play-song.js
您需要启动 Spotify 应用程序或通过浏览器登录到 Spotify。
const axios = require('axios')
const express = require('express')
const cors = require('cors')
const app = express()
app.use(cors())
// for raw JSON of Body
app.use(express.json())
const REDIRECT_URI = '<your redirect URL>' // mine is http://localhost:3000/callback
const CLIENT_ID = '<your client id>'
const CLIENT_SECRET = '<your client secret>'
const SCOPE = ['playlist-modify-private', 'user-read-currently-playing', 'user-read-playback-state', 'user-modify-playback-state']
app.get("/login", (request, response) => {
const redirect_url = `https://accounts.spotify.com/authorize?response_type=code&client_id=${CLIENT_ID}&scope=${SCOPE}&state=123456&redirect_uri=${REDIRECT_URI}&prompt=consent`
response.redirect(redirect_url);
})
app.get("/callback", async (request, response) => {
const code = request.query["code"]
await axios.post(
url = 'https://accounts.spotify.com/api/token',
data = new URLSearchParams({
'grant_type': 'authorization_code',
'redirect_uri': REDIRECT_URI,
'code': code
}),
config = {
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
params: {
'grant_type': 'client_credentials'
},
auth: {
username: CLIENT_ID,
password: CLIENT_SECRET
}
})
.then(resp1 => {
axios.get(
url = 'https://api.spotify.com/v1/me/player/devices',
config = {
headers: {
'Accept-Encoding': 'application/json',
Authorization: `Bearer ${resp1.data.access_token}`
}
}
).then(resp2 => {
const device_id = resp2.data.devices[0].id
const track_id = '7pKfPomDEeI4TPT6EOYjn9' // Imagine-Remastered 2010
const access_token = resp1.data.access_token;
axios.put(`https://api.spotify.com/v1/me/player/play?device_id=${device_id}`, {
uris: [`spotify:track:${track_id}`]
}, {
headers: {
'Authorization': `Bearer ${access_token}`,
'Content-Type': 'application/json'
}
})
.then(data => {
response.send(JSON.stringify({"device id": device_id}))
})
.catch(error => {
console.error(error)
});
})
});
})
// use your <redirect URL>'s port
app.listen(3000, () => { console.log("Listening on : 3000") })
npm install axios express cors
node play-song.js
然后打开浏览器,访问这个网址
localhost:3000/login
记住端口号应该在你的仪表板中使用你的端口号
左边是Spotify
右上角是浏览器
右下角是终端
中间顶部是 Windows 中的声音面板 - 您可以在播放曲目后通过条的移动看到声音。