spotify - libspotify : how to find out if a track uri is correct and playable?

标签 spotify

这个问题听起来很简单,但我找不到方法来检查轨道 uri 是否正确。

例如,通过给定的有效轨道 uri spotify:track:5Z7ygHQo02SUrFmcgpwsKW 播放轨道的正常过程是:

1) 通过 sp_link_create_from_string(const char *$track_uri) 获取 sp_link*

2) 通过 sp_link_as_track(sp_link*) 获取 sp_track*

3) sp_track_add_ref(sp_track*)

4) 如果 sp_track_error() 返回 SP_ERROR_OK 或 SP_ERROR_IS_LOADING,但 metadata_updated 和 SP_ERROR_OK,则 sp_session_player_load 和 sp_session_player_play 加载并播放轨道。

5) 当轨道结束时 sp_track_release() 和 sp_session_player_unload()。

现在,如果用户在 Spotify 轨道 URI 上输入错误并尝试播放 spotify:track:5Z7ygHQo02SUrFmcgpwsKQ (最后一个字符 Q 是一个拼写错误,应为 >W)。过程中所有可能的错误检查都不会返回任何错误:

步骤 1) sp_link 不为 NULL

步骤 2) sp_track* 不为 NULL

步骤 3) 返回 SP_ERROR_OK

第 4 步)sp_track_error() 返回 SP_ERROR_IS_LOADING,metadata_updated 永远不会被调用,当然程序会挂起。

轨道加载前的检查无法发现轨道 uri 的无效性。 API sp_track_availability 听起来像是一种方法,但如果未加载轨道,它将始终返回 NOT AVAILABLE,但如果轨道 uri 不正确,则永远不会加载轨道。

我是否错过了什么或误解了 API?

最佳答案

您可以通过检查链接类型来检查 uri 是否有效:

enum    sp_linktype { 
  SP_LINKTYPE_INVALID = 0, 
  SP_LINKTYPE_TRACK = 1, 
  SP_LINKTYPE_ALBUM = 2, 
  SP_LINKTYPE_ARTIST = 3, 
  SP_LINKTYPE_SEARCH = 4, 
  SP_LINKTYPE_PLAYLIST = 5, 
  SP_LINKTYPE_PROFILE = 6, 
  SP_LINKTYPE_STARRED = 7, 
  SP_LINKTYPE_LOCALTRACK = 8, 
  SP_LINKTYPE_IMAGE = 9 
}

这使我们可以像这样执行链接检查:

  1. 检查 sp_link_type(link) == SP_LINKTYPE_TRACK
  2. 从 sp_link_as_track(link) 创建 sp_track* 轨道,或者 sp_track_get_playable(sp_link*, sp_session*)
  3. 等待加载,然后检查可用性

关于spotify - libspotify : how to find out if a track uri is correct and playable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12011497/

相关文章:

javascript - 尝试通过 React 使用 Spotify 推荐时出现 400 错误

javascript - Spotify 网络 API 结果 "undefined"

javascript - 如何使用多个 api 调用填充数组?

api - 我可以从 Spotify API 保存哪些数据?

authentication - 无法使用 sp_session_relogin (libspotify)

objective-c - 如何从 Cocoa 获取 Spotify Mac 中当前正在播放的轨道

spotify - 使用 Spotify API 播放完整长度的歌曲

javascript - Spotify api 1.0.0 获取给定轨道集的播放列表的图像

ruby-on-rails - 刷新 token 时 Spotify Web API 错误请求错误 "invalid_client"

autohotkey - Spotify 中下一首歌曲的热键