【问题标题】:Creating an array of tracks from multiple playlists in Spotify iOS SDK 3.0在 Spotify iOS SDK 3.0 中从多个播放列表创建一组曲目
【发布时间】:2014-07-05 01:50:42
【问题描述】:

我可以使用 CocoaLibSpotify 做到这一点,但我不知道应该如何在新的 Spotify iOS SDK 中做到这一点。

我正在尝试从通过其 URI 加载的多个播放列表创建一组曲目。这里的目标是能够从一组播放列表中随机播放曲目。

我已经能够从其 URI 加载播放列表,它表示为 SPPlaylistSnapshot。似乎没有办法从这个 SPPlaylistSnapshot 中获取单个曲目,因此我可以创建一个可以添加和绘制的池。

有谁知道这样做的方法吗?

【问题讨论】:

    标签: ios spotify


    【解决方案1】:

    SPTPlaylistSnapshot 具有firstTrackPage 属性,其中包含第一个 x 轨道,其中 x 是一个我不记得的数字。有了第一页,您可以请求其他页面,直到获得所有曲目。

    有关详细信息,请参阅 SPTPlaylistSnapshotSPTListPage 的文档。

    【讨论】:

    • 我知道有一个更新的 API,但我没有看到这个 API 已被阻止。现在,当我尝试从 firstPage 或任何其他页面获取项目时,items.count 始终为 0,即使 firstTrackPage.totalListLength 返回 > 0 另外 trackCount 在 SPTPlaylistSnapshot.playlist(withURI 的结果中为 0
    【解决方案2】:

    身份验证后,定义一个播放列表请求,如下所示:

    let playListRequest = try! SPTPlaylistList.createRequestForGettingPlaylists(forUser: userName, withAccessToken: token)
    

    我使用 alamofire 发布此请求:

    Alamofire.request(playListRequest)
            .response { response in
    
    
                let list = try! SPTPlaylistList(from: response.data, with: response.response)
    
                for playList in list.items  {
                    if let playlist = playList as? SPTPartialPlaylist {
                        print( playlist.name ) // playlist name
                        print( playlist.uri)    // playlist uri
    
                        let stringFromUrl =  playlist.uri.absoluteString
                        let uri = URL(string: stringFromUrl)
                        // use SPTPlaylistSnapshot to get all the playlists
                        SPTPlaylistSnapshot.playlist(withURI: uri, accessToken: token!) { (error, snap) in
                            if let s = snap as? SPTPlaylistSnapshot {
                                // get the tracks for each playlist
                                print(s.name) 
    
                                for track in s.firstTrackPage.items {
                                    if let thistrack = track as? SPTPlaylistTrack {
    
                                        print(thistrack.name)
    
                                    }
                                }
                            }
    
    
                        }
                    }
                }
        }
    

    【讨论】:

      【解决方案3】:

      基本上大家说的都对,使用 SPTPlaylistSnapshot 来获取播放列表的曲目,这是我在 Swift 3 中获取播放列表中所有项目的代码。

      func getTracksFrom(page:SPTListPage, allItems:[SPTPlaylistTrack]) -> [SPTPlaylistTrack] {
          guard let items = page.items as? [SPTPlaylistTrack] else {print("empty page");return allItems}
          var allTracks = allItems
          allTracks.append(contentsOf: items)
      
          var nextPage = SPTListPage()
      
          if page.hasNextPage {
              page.requestNextPage(withAccessToken: (SPTAuth.defaultInstance().session.accessToken)!) { (error, data) in
                  guard let p = data as? SPTListPage else {return}
                  nextPage = p
              }
      
              return getTracksFrom(page:nextPage,allItems:allTracks)
          }
          return allTracks
      }
      
      func getAllTracksFrom(_ playlist:SPTPlaylistSnapshot) -> [SPTPlaylistTrack]  {
          var allTracks:[SPTPlaylistTrack] = []
          allTracks = getTracksFrom(page: playlist.firstTrackPage, allItems: allTracks)
          return allTracks
      }
      
      override func viewDidLoad() {
          super.viewDidLoad()
          guard let p = playlist else {return}
          SPTPlaylistSnapshot.playlist(withURI: p.uri, accessToken: (SPTAuth.defaultInstance().session.accessToken)!, callback: { (error, dataOrNil) in
              guard error == nil else {print(error!);return}
              guard let playlistSnapshot = dataOrNil as? SPTPlaylistSnapshot else {print("couldn't cast as SPTPlaylistSnapshot");return}
              self.tracks = self.getAllTracksFrom(playlistSnapshot)
              self.tableView.reloadData()
          })
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-01-28
        • 1970-01-01
        • 1970-01-01
        • 2021-02-21
        • 2016-08-01
        • 2013-10-22
        • 2015-09-08
        • 1970-01-01
        相关资源
        最近更新 更多