如何从Apple Music API返回歌曲?

时间:2018-03-05 11:06:36

标签: swift rest api apple-musickit

我需要添加一个从Apple Music API返回歌曲的新功能。以下代码返回nil,但它适用于相册ID。我修改了APIClient.swift的代码。有关详细信息,请参阅来源。

它返回歌曲(id:完成:) JSON解码失败。

来源:https://github.com/shingohry/AppleMusicSearch

SongModel.swift

func song(id: String, completion: @escaping (Resource?) -> Swift.Void) {
    let completionOnMain: (Resource?) -> Void = { resource in
        DispatchQueue.main.async {
            completion(resource)
        }
    }

    guard let url = URL(string: "https://api.music.apple.com/v1/catalog/\(APIClient.countryCode)/songs/\(id)") else { return }

    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.addValue("Bearer \(APIClient.developerToken)",
        forHTTPHeaderField: "Authorization")

    data(with: request) { data, error -> Void in
        guard error == nil else {
            print(#function, "URL Session Task Failed", error!)
            completionOnMain(nil)
            return
        }

        guard let jsonData = try? JSONSerialization.jsonObject(with: data!),
            let dictionary = jsonData as? [String: Any],
            let dataArray = dictionary["data"] as? [[String: Any]],
            let songDictionary = dataArray.first,
            let songData = try? JSONSerialization.data(withJSONObject: albumDictionary),
            let album = try? JSONDecoder().decode(Resource.self, from: songData) else {
                print(#function, "JSON Decode Failed");
                completionOnMain(nil)
                return
        }
        completionOnMain(song)
    }
}

0 个答案:

没有答案