使用命令行连接到 Spotify API

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

我想使用命令行从 Spotify API 检索信息,例如如下所示:

curl "https://api.spotify.com/v1/search?type=artist&q=<someartist>"

但是当我这样做时,我得到:

{
  "error": {
    "status": 401,
    "message": "No token provided"
  }
}

我已经在我的 Spotify 开发者帐户中创建了一个应用程序。有人可以引导我完成如何传递我的凭据和搜索请求的过程吗?我不想编写应用程序或任何东西。我只想从命令行检索信息。

希望有人能帮忙!

curl spotify access-token
3个回答
8
投票

因此,我花了更多时间破译 https://developer.spotify.com/documentation/general/guides/authorization-guide/ 上的说明,实际上我找到了一个相当简单的解决方案。

我想要做的是通过搜索特定专辑从 Spotify Web API 检索 Spotify 专辑 URI。由于我不需要可刷新的访问令牌,也不需要访问用户数据,因此我决定采用客户端凭据授权流程(https://developer.spotify.com/documentation/general/guides/授权指南/#client-credentials-flow)。这就是我所做的:

  1. 在仪表板上创建应用程序https://developer.spotify.com/dashboard/applications并复制客户端 ID 和客户端密钥

  2. 使用 base64 对客户端 ID 和客户端密钥进行编码:

    echo -n <client_id:client_secret> | openssl base64
    
  3. 使用编码凭据请求授权,这为我提供了访问令牌:

    curl -X "POST" -H "Authorization: Basic <my_encoded_credentials>" -d grant_type=client_credentials https://accounts.spotify.com/api/token
    
  4. 使用该访问令牌,可以向 API 端点发出请求,不需要用户授权,例如:

     curl -H "Authorization: Bearer <my_access_token>" "https://api.spotify.com/v1/search?q=<some_artist>&type=artist"
    

所有可用端点都可以在这里找到:https://developer.spotify.com/documentation/web-api/reference/

在我的例子中,我想以“艺术家专辑”的格式读取终端中的输入并输出相应的Spotify URI,这正是以下 shell 脚本的作用:

#!/bin/bash
artist=$1
album=$2
creds="<my_encoded_credentials>"
access_token=$(curl -s -X "POST" -H "Authorization: Basic $creds" -d grant_type=client_credentials https://accounts.spotify.com/api/token | awk -F"\"" '{print $4}')
result=$(curl -s -H "Authorization: Bearer $access_token" "https://api.spotify.com/v1/search?q=artist:$artist+album:$album&type=album&limit=1" | grep "spotify:album" | awk -F"\"" '{print $4 }')

然后我可以像这样运行脚本:

myscript.sh some_artist some_album

它会输出专辑URI。


0
投票

这是一个最小的 bash 脚本,它利用客户端凭证流并使用收到的不记名令牌来调用 Spotify API:

client_id='<your_client_id>'
client_secret='<your_client_secret>'

# Client Credential Flow
json=$(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")

token=$(echo $json | jq -r ".access_token")

# Now use bearer token to query information
curl --request GET \
  --url https://api.spotify.com/v1/artists/3WrFJ7ztbogyGnTHbHJFl2 \
  --header "Authorization: Bearer $token"

-1
投票

现在问这个问题可能已经太晚了,但是你是如何传递包含空格的艺术家和专辑的。我发现 ' 和 " 不起作用,所以我必须以 Deep%20Purple Made%20In%20Japan 为例。

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