标签: spotify

Spotify 元数据 API:按艺术家搜索

最初的计划是将其写成一篇博客文章,标题为“Spotify 元数据 API 中的低效率:或者,Jackson 5 如何杀死我的浏览器”,但在最后一刻改变了我的想法,因为我习惯于错过文档,也许我遗漏了一个未记录的功能,或者其他人已经解决了这个问题 - 因此这个问题有一定的博客文章语气!

我正在开发一个小型网络应用程序,主要面向一小群人,它允许任何人更新 Spotify 播放列表。由于不是每个人都有 Spotify(虽然我不知道为什么!),该页面将更新包含歌曲的数据库,因为在我的笔记本电脑上的 Spotify 中运行的应用程序轮询数据库以获取更新,然后使用 Spotify 应用程序 API,更新播放列表,订阅播放列表的任何人都会收到更新。没关系,虽然我想使用推送而不是投票,但这是另一天的话题。

我四处寻找与 Spotify 元数据 API 一起使用的 Javascript 库,并找到了一个(https://github.com/palmerj3/SpotifyJS),尽管它基本上是一个包装器,并且仍然需要您自己解析 JSON。我想我可以做得更好,并对最常见的字段(标题、艺术家、专辑、Spotify URI)进行一些基本的解析,我开始开发我自己的库/JQuery 插件。

按曲目搜索不是问题,它是对 Spotify 元数据 API 的一次调用,结果很容易解析,将返回的艺术家与请求的艺术家(如果存在)进行匹配,以便按标题/艺术家轻松搜索。

但是,按艺术家搜索(获取特定艺术家的所有歌曲列表)似乎很麻烦- * *!尽我所能从文档中得知,这就是过程。

  1. 搜索艺术家:这将返回与查询匹配的艺术家列表
  2. 对于每个艺术家,查找他们的专辑:这将返回一个列表专辑
  3. 查找每个专辑并检索曲目列表
  4. 如果匹配输出,则将每个曲目的艺术家与搜索艺术家进行比较

第一步将返回一个艺术家匹配的小列表,Foo Fighters 有 2 个,Silverchair 1,而 The Jackson 5 有 4 个。这个小列表变成了更多的专辑匹配 - 从记忆中 Foo Fighters 返回了 112,然后变成甚至更多的曲目列表。从 Javascript/JQuery 的角度来看,这会导致菊花链 AJAX 请求,对于每个步骤,以及在每个步骤中,针对 Spotify 服务器的大量几乎并发的 GET 请求。

我写的初始版本作弊并使用同步 AJAX,并且工作正常,因为每个请求必须在下一个请求开始之前完成,但是,这会锁定浏览器一段时间,并消除使用反馈给用户的可能性系统正在运行。然后我切换到异步请求,一切都崩溃了!您立即遇到了 Spotify 端的速率限制问题,它返回响应为 502 错误网关(顺便说一下,未在 Spotify 文档中作为状态列出)或 503 - 这两个 JQuery 都解释为状态代码 …

search metadata spotify

3
推荐指数
1
解决办法
4288
查看次数

使用 Python 进行 Spotify API 身份验证

我正在尝试对 Spotify API 中的用户进行身份验证,但它不断向我返回错误代码“invalid_client”。我正在 Python Django 解决方案上实现它,这是我的代码:

headers = {'Authorization': 'Basic '+standard_b64encode(client_id)+standard_b64encode(client_secret)}
r = requests.post('https://accounts.spotify.com/api/token', {'code': code, 'redirect_uri': redirect_uri, 'grant_type': grant_type, 'headers': headers}).json()
Run Code Online (Sandbox Code Playgroud)

知道为什么它不起作用吗?

python authentication api django spotify

3
推荐指数
1
解决办法
6186
查看次数

使用 Spotify API 时“解析 JSON 时出错”

我正在学习 Python,并尝试使用 Spotify Web api 创建播放列表,但收到 http 400 错误:解析 json 时出错。我想这与令牌中不正确的变量类型有关,但我很难调试它,因为我无法找到一种方法来查看原始格式的发布请求。

通过 API 发布需要授权,这是我为此创建的脚本:

import requests
import base64
requests.packages.urllib3.disable_warnings()

client_id = 'ID'
client_secret = 'SECRET'
redirect_uri = 'http://spotify.com/'
scope = 'playlist-modify-private playlist-read-private'

def request_token():

    #  1. Your application requests authorization
    auth_url = 'https://accounts.spotify.com/authorize'
    payload = {'client_id': client_id, 'response_type':'code','redirect_uri':redirect_uri}
    auth = requests.get(auth_url,params = payload)
    print '\nPlease go to this url to authorize ', auth.url

    #  2. The user is asked to authorize access within the scopes
    #  3. The user is …
Run Code Online (Sandbox Code Playgroud)

python api json token spotify

3
推荐指数
1
解决办法
2630
查看次数

是否可以使用 Spotify Web API 编写没有回调 URI 的桌面应用程序?

我想编写一个简单的供个人使用的桌面应用程序,它使用 Spotify Web API 来构建播放列表。

然而,据我所知,如果不提供回调 URI,就无法使用 API,而我没有回调 URI,因为我没有任何类型的域或服务器(除了我的个人计算机) 。

有没有一种方法可以在没有 URI 的情况下使用 API?

如果没有,设置回调 URI 的最佳方法是什么?我没有太多使用 Web 应用程序或客户端/服务器内容的经验,而且我过去使用的 API 不需要任何类型的回调。

python uri callback spotify

3
推荐指数
1
解决办法
3680
查看次数

在 Swift 中获取曲目的元数据

我正在开发 Xcode-Swift-Spotify 项目,我唯一想要的就是获取有关当前正在播放的歌曲的信息,我的意思是名称、专辑等信息,我尝试了很多不同的方式,但是我听不懂。请帮我。下面有一个例子

func audioStreaming(audioStreaming: SPTAudioStreamingController!, didStartPlayingTrack trackUri: NSURL!)
{

    SPTTrack.trackWithURI(self.player?.currentTrackURI, session: spotifyAuthenticator.session) { (error:NSError!, track:AnyObject!) -> Void in

        print(track.name)

    }}
Run Code Online (Sandbox Code Playgroud)

我忘了说,我正在使用 Spotify SDK

spotify ios swift

3
推荐指数
1
解决办法
2186
查看次数

从 Spotify 请求访问令牌时出现“仅支持有效的承载身份验证”错误

我正在尝试从 Spotify 获取 oAuth 访问令牌(他们的指南中的第 4 步)。

我相信,我按照他们的文档中的描述发送了所有必需的参数,但 Spotify 回应:

"error": {
    "status": 400,
    "message": "Only valid bearer authentication supported"
}
Run Code Online (Sandbox Code Playgroud)

这是我在 node.js 中的请求:

function getToken(code){
    var idAndSecret = config.clientId+':'+config.clientSecret;
    var authString = 'Basic ' + new Buffer(idAndSecret).toString('base64');
    var data = querystring.stringify({
        grant_type: "authorization_code",
        code: code,
        redirect_uri: REDIRECT_URI
    });
    var tokenReq = https.request({
        hostname: 'api.spotify.com',
        path: '/api/token?'+data,
        method: 'POST',
        headers: {
            'Authorization': authString
        }
    }, function(res){
        res.on('data', function(chunk){
            console.log(new Buffer(chunk).toString());
        });
        console.log(res.statusCode, JSON.stringify(res.headers));
    });

    tokenReq.end();
}
Run Code Online (Sandbox Code Playgroud)

我已经检查了我的 clientId、clientSecret、auth-code …

spotify node.js

3
推荐指数
1
解决办法
4688
查看次数

使用 Spotipy 将曲目添加到 Spotify 中的播放列表

我正在使用 Spotify API 的 Python 绑定来列出艺术家的热门曲目并将它们添加到播放列表中,但每次都失败,就好像它除了不同类型的输入一样。

New_Track_List 是一个字符串,其中包含顶部轨道查找的输出:

1:URI:

示例:“spotify:track:1pAyyxlkPuGnENdj4g7Y4f,spotify:track:7D2xaUXQ4DGY5JJAdM5mGP,spotify:track:74mG2xIxEUJwHckS0Co6jF,spotify:track:2rjqDPbLlb9QRlcj8DVM”

使用 URI 我从函数中得到这个

sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks=New_Track_List)
Run Code Online (Sandbox Code Playgroud)

追溯:

spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: You can add a maximum of 100 tracks per request.
Run Code Online (Sandbox Code Playgroud)

字符串中只有 20 首曲目。

第二次尝试:轨道 ID:

示例:“1pAyyxlkPuGnENDj4g7Y4f、7D2xaUXQ4DGY5JJAdM5mGP、74mG2xIxEUJwHckS0Co6jF、2rjqDPbLlbQRlcj8DVM9kn”

相同的回溯输出。

使用单个轨道 ID

sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="spotify:track:74mG2xIxEUJwHckS0Co6jF")
Run Code Online (Sandbox Code Playgroud)

尝试仅添加一首曲目,让我收到以下消息:

spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:s
Run Code Online (Sandbox Code Playgroud)

仅使用 Track ID 的相同消息,就好像它只检查传递字符串的第一个字母一样。

    sp.user_playlist_add_tracks(username, playlist_id=playlist, tracks="7D2xaUXQ4DGY5JJAdM5mGP")
Run Code Online (Sandbox Code Playgroud)

错误回溯:

spotipy.client.SpotifyException: http status: 400, code:-1 - https://api.spotify.com/v1/users/smokieprofile/playlists/40aijTeKoxo5u1VSS9E3UQ/tracks: Invalid track uri: spotify:track:7
Run Code Online (Sandbox Code Playgroud)

python spotify spotipy

3
推荐指数
1
解决办法
4212
查看次数

如何知道用户何时使用 Spotify API 更改歌曲

我需要知道用户何时更改“当前正在播放”的歌曲。

目前,我正在使用https://api.spotify.com/v1/me/player/currently-playing获取有关“当前正在播放”的歌曲的信息。但是,我需要知道它何时更改为下一首(不仅因为歌曲完成,还因为用户按下 NEXT SONG 按钮时)。

我目前的解决方法是https://api.spotify.com/v1/me/player/currently-playing每秒调用一次端点,但如果我经常这样做,我将超出速率限制。

spotify

3
推荐指数
1
解决办法
2301
查看次数

Spotify Auth 库在登录时返回 Type.EMPTY

我遵循了 android 身份验证指南快速入门指南中的所有内容。我按照指南告诉我生成一个 SHA1 并将其添加到 Spotify 应用程序仪表板,我得到了 app_client 并将其添加到我的应用程序中。这两种情况仍然返回相同的东西。我什至尝试实现通过浏览器登录功能,但它仍然返回类型 EMPTY。

这是我的登录类

class SignInActivity : AppCompatActivity(), ConnectionStateCallback, Player.NotificationCallback {

private var mPlayer : SpotifyPlayer? = null

private val CLIENT_ID = //replace this
private val REDIRECT_URI = //replace this
private val REQUEST_CODE = 1337


override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_login)

    btnSignin.setOnClickListener {
        val builder = AuthenticationRequest.Builder(CLIENT_ID, AuthenticationResponse.Type.TOKEN, REDIRECT_URI)
        builder.setScopes(arrayOf("user-read-private", "streaming"))
        val request = builder.build()

        AuthenticationClient.openLoginActivity(this, REQUEST_CODE, request)
    }
}

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) …
Run Code Online (Sandbox Code Playgroud)

authentication android spotify retrofit spotify-app

3
推荐指数
1
解决办法
322
查看次数

通过 Google Apps 脚本的 Spotify API 授权

我正在使用以下代码通过 Google Apps 脚本向 Spotify API 发出请求:

function search() {

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sheet = ss.getActiveSheet();
  var artist = sheet.getRange(1,1).getValue();
  artist = encodeURIComponent(artist.trim());
  var result = searchSpotify(artist);
  Logger.log(result);
}

function searchSpotify(artist) {
  //searches spotify and returns artist ID
  var response = UrlFetchApp.fetch("https://api.spotify.com/v1/search?q=" + artist + "&type=artist&limit=1", 
  { method: "GET",
    headers:{
      "contentType": "application/json",
      'Authorization': "Bearer BQBnpSUdaEweirImw23yh2DH8OGhTwh5a_VnY_fgb2BPML0KvFvYd04CaEdUhQN9N4ZUXMIVfJ1MjFe1_j0Gl0UoHDhcoC_dklluZyOkq8Bo6i2_wfxSbGzP3k5EUjUKuULAnmTwCdkdZQnl-SNU0Co"
            },
  });
  json = response.getContentText();
  var data = JSON.parse(json);
  var uri = data.artists.items[0].uri.slice(15);
  var getArtists = getRelatedArtists(uri);
  Logger.log(getArtists);
  return getArtists;
}

function getRelatedArtists(uri) …
Run Code Online (Sandbox Code Playgroud)

spotify google-sheets google-apps-script

3
推荐指数
1
解决办法
914
查看次数