最初的计划是将其写成一篇博客文章,标题为“Spotify 元数据 API 中的低效率:或者,Jackson 5 如何杀死我的浏览器”,但在最后一刻改变了我的想法,因为我习惯于错过文档,也许我遗漏了一个未记录的功能,或者其他人已经解决了这个问题 - 因此这个问题有一定的博客文章语气!
我正在开发一个小型网络应用程序,主要面向一小群人,它允许任何人更新 Spotify 播放列表。由于不是每个人都有 Spotify(虽然我不知道为什么!),该页面将更新包含歌曲的数据库,因为在我的笔记本电脑上的 Spotify 中运行的应用程序轮询数据库以获取更新,然后使用 Spotify 应用程序 API,更新播放列表,订阅播放列表的任何人都会收到更新。没关系,虽然我想使用推送而不是投票,但这是另一天的话题。
我四处寻找与 Spotify 元数据 API 一起使用的 Javascript 库,并找到了一个(https://github.com/palmerj3/SpotifyJS),尽管它基本上是一个包装器,并且仍然需要您自己解析 JSON。我想我可以做得更好,并对最常见的字段(标题、艺术家、专辑、Spotify URI)进行一些基本的解析,我开始开发我自己的库/JQuery 插件。
按曲目搜索不是问题,它是对 Spotify 元数据 API 的一次调用,结果很容易解析,将返回的艺术家与请求的艺术家(如果存在)进行匹配,以便按标题/艺术家轻松搜索。
但是,按艺术家搜索(获取特定艺术家的所有歌曲列表)似乎很麻烦- * *!尽我所能从文档中得知,这就是过程。
第一步将返回一个艺术家匹配的小列表,Foo Fighters 有 2 个,Silverchair 1,而 The Jackson 5 有 4 个。这个小列表变成了更多的专辑匹配 - 从记忆中 Foo Fighters 返回了 112,然后变成甚至更多的曲目列表。从 Javascript/JQuery 的角度来看,这会导致菊花链 AJAX 请求,对于每个步骤,以及在每个步骤中,针对 Spotify 服务器的大量几乎并发的 GET 请求。
我写的初始版本作弊并使用同步 AJAX,并且工作正常,因为每个请求必须在下一个请求开始之前完成,但是,这会锁定浏览器一段时间,并消除使用反馈给用户的可能性系统正在运行。然后我切换到异步请求,一切都崩溃了!您立即遇到了 Spotify 端的速率限制问题,它返回响应为 502 错误网关(顺便说一下,未在 Spotify 文档中作为状态列出)或 503 - 这两个 JQuery 都解释为状态代码 …
我正在尝试对 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,并尝试使用 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) 我想编写一个简单的供个人使用的桌面应用程序,它使用 Spotify Web API 来构建播放列表。
然而,据我所知,如果不提供回调 URI,就无法使用 API,而我没有回调 URI,因为我没有任何类型的域或服务器(除了我的个人计算机) 。
有没有一种方法可以在没有 URI 的情况下使用 API?
如果没有,设置回调 URI 的最佳方法是什么?我没有太多使用 Web 应用程序或客户端/服务器内容的经验,而且我过去使用的 API 不需要任何类型的回调。
我正在开发 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 获取 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 API 的 Python 绑定来列出艺术家的热门曲目并将它们添加到播放列表中,但每次都失败,就好像它除了不同类型的输入一样。
New_Track_List 是一个字符串,其中包含顶部轨道查找的输出:
示例:“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 首曲目。
示例:“1pAyyxlkPuGnENDj4g7Y4f、7D2xaUXQ4DGY5JJAdM5mGP、74mG2xIxEUJwHckS0Co6jF、2rjqDPbLlbQRlcj8DVM9kn”
相同的回溯输出。
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) 我需要知道用户何时更改“当前正在播放”的歌曲。
目前,我正在使用https://api.spotify.com/v1/me/player/currently-playing获取有关“当前正在播放”的歌曲的信息。但是,我需要知道它何时更改为下一首(不仅因为歌曲完成,还因为用户按下 NEXT SONG 按钮时)。
我目前的解决方法是https://api.spotify.com/v1/me/player/currently-playing每秒调用一次端点,但如果我经常这样做,我将超出速率限制。
我遵循了 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) 我正在使用以下代码通过 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)