高级用户如何从 linux 命令行播放 spotify 歌曲

问题描述 投票:0回答:1

我是高级用户,但我使用此代码段获得了

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 返回相同的错误

curl spotify
1个回答
0
投票

不能通过 curl 命令播放歌曲。你的尝试方法是

Client Credentials Flow
。 该方法可以获取艺术家、专辑和歌曲信息。

歌曲的播放需要

Authorization Code Flow
。可以做用户播放歌曲,获取用户信息等相关用户API。

它应该通过“redirect_URI”获取令牌。

这里有例子 在这里

Python 1

Python 2

代码概述

演示代码 - 在 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 中的声音面板 - 您可以在播放曲目后通过条的移动看到声音。

参考

播放歌曲 API

© www.soinside.com 2019 - 2024. All rights reserved.