Как воспроизвести песню Spotify из командной строки Linux в качестве премиум-пользователя

Я премиум-пользователь, но получаю 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}"

P.S. Spotipy возвращает ту же ошибку

Вы проверили, что попали по тому же URL-адресу от почтальона. если это работает, это может быть из-за режима боя с ботом, включенного на веб-сайте Spotify. Попробуйте передать заголовок агента пользователя, чтобы ваш запрос выглядел так, как будто он исходит из браузера.

axcl 14.04.2023 11:50
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
1
1
67
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы не можете воспроизвести песню с помощью команды curl. Ваш пробный метод — Поток учетных данных клиента. Этот метод может получить информацию об исполнителе, альбоме и песне.

Для воспроизведения песни требуется Поток кода авторизации. Он может заставить пользователей воспроизводить песни и получать информацию о пользователях в виде связанных пользовательских API.

Он должен получить токен по «redirect_URI».

Вот примеры здесь

Питон 1

Питон 2

Обзор кода

Демонстрационный код — использование экспресса на node.js Сохранить как 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.info("Listening on : 3000") })

установить зависимости

npm install axios express cors

Запустить его

node play-song.js

Затем откройте браузер, получите доступ к этому URL

localhost:3000/login

Помните, что номер порта должен быть вашим номером порта на панели инструментов

Результат

слева Spotify

справа вверху это браузер

правый нижний конец

В центре вверху находится панель «Звук» в Windows. Вы можете визуализировать звук через движение полосы после воспроизведения дорожки.

Ссылка

API воспроизведения песен

@jjk, спасибо, что приняли мой ответ, можете ли вы тоже проголосовать? Это даст мне еще 10 баллов.

Bench Vue 15.04.2023 13:48

Другие вопросы по теме