【发布时间】:2015-04-02 08:56:24
【问题描述】:
我正在使用新的 Deezer iOS SDK (0.9.0),当返回的轨道将其 readable 属性设置为 NO 时,我需要找到替代轨道(如果有的话)。
这是我正在测试的曲目:http://www.deezer.com/track/95029960
它在英国(我所在的地方)不可用,但有替代轨道可用。
这是我在 API Explorer(来自英国)中查询曲目时的 API 响应:
{
"id": 95029960,
"readable": false,
"title": "Looking To Hide (Radio Edit)",
"isrc": "DKUCA1400209",
"link": "http://www.deezer.com/track/95029960",
"share": "http://www.deezer.com/track/95029960?utm_source=deezer&utm_content=track-95029960&utm_term=0_1427961877&utm_medium=web",
"duration": 198,
"track_position": 52,
"disk_number": 1,
"rank": 95640,
"explicit_lyrics": false,
"preview": "http://cdn-preview-0.deezer.com/stream/0fc9584d259b89c248e9bf6ccdb1a7bc-3.mp3",
"bpm": 0,
"gain": 0,
"available_countries": [
"DK",
"IS"
],
"alternative": {
"id": 87700625,
"readable": true,
"title": "Looking to Hide",
"isrc": "DKUCA1400209",
"link": "http://www.deezer.com/track/87700625",
"share": "http://www.deezer.com/track/87700625?utm_source=deezer&utm_content=track-87700625&utm_term=0_1427961877&utm_medium=web",
"duration": 199,
"track_position": 1,
"disk_number": 1,
"rank": 50142,
"explicit_lyrics": false,
"preview": "http://cdn-preview-e.deezer.com/stream/e7758b15d4d0b08dc6c69e617f16c46a-2.mp3",
"bpm": 0,
"gain": 0,
"available_countries": [
"AD",
"AE",
"AF",
...
"ZM",
"ZW"
],
"contributors": [
{
"id": 1627159,
"name": "Nadia Gattas",
"link": "http://www.deezer.com/artist/1627159",
"share": "http://www.deezer.com/artist/1627159?utm_source=deezer&utm_content=artist-1627159&utm_term=0_1427961877&utm_medium=web",
"picture": "http://api.deezer.com/2.0/artist/1627159/image",
"radio": false,
"tracklist": "http://api.deezer.com/2.0/artist/1627159/top?limit=50",
"role": "Main",
"type": "artist"
}
],
"artist": {
"id": 1627159,
"name": "Nadia Gattas",
"link": "http://www.deezer.com/artist/1627159",
"share": "http://www.deezer.com/artist/1627159?utm_source=deezer&utm_content=artist-1627159&utm_term=0_1427961877&utm_medium=web",
"picture": "http://api.deezer.com/2.0/artist/1627159/image",
"radio": false,
"tracklist": "http://api.deezer.com/2.0/artist/1627159/top?limit=50",
"type": "artist"
},
"album": {
"id": 8853909,
"title": "Looking to Hide",
"link": "http://www.deezer.com/album/8853909",
"cover": "http://api.deezer.com/2.0/album/8853909/image",
"release_date": "2014-10-27",
"tracklist": "http://api.deezer.com/2.0/album/8853909/tracks",
"type": "album"
},
"type": "track"
},
"contributors": [
{
"id": 1627159,
"name": "Nadia Gattas",
"link": "http://www.deezer.com/artist/1627159",
"share": "http://www.deezer.com/artist/1627159?utm_source=deezer&utm_content=artist-1627159&utm_term=0_1427961877&utm_medium=web",
"picture": "http://api.deezer.com/2.0/artist/1627159/image",
"radio": false,
"tracklist": "http://api.deezer.com/2.0/artist/1627159/top?limit=50",
"role": "Main",
"type": "artist"
},
{
"id": 1627159,
"name": "Nadia Gattas",
"link": "http://www.deezer.com/artist/1627159",
"share": "http://www.deezer.com/artist/1627159?utm_source=deezer&utm_content=artist-1627159&utm_term=0_1427961877&utm_medium=web",
"picture": "http://api.deezer.com/2.0/artist/1627159/image",
"radio": false,
"tracklist": "http://api.deezer.com/2.0/artist/1627159/top?limit=50",
"role": "Featured",
"type": "artist"
}
],
"artist": {
"id": 1627159,
"name": "Nadia Gattas",
"link": "http://www.deezer.com/artist/1627159",
"share": "http://www.deezer.com/artist/1627159?utm_source=deezer&utm_content=artist-1627159&utm_term=0_1427961877&utm_medium=web",
"picture": "http://api.deezer.com/2.0/artist/1627159/image",
"radio": false,
"tracklist": "http://api.deezer.com/2.0/artist/1627159/top?limit=50",
"type": "artist"
},
"album": {
"id": 9667910,
"title": "Dance Chart 41",
"link": "http://www.deezer.com/album/9667910",
"cover": "http://api.deezer.com/2.0/album/9667910/image",
"release_date": "2015-02-23",
"tracklist": "http://api.deezer.com/2.0/album/9667910/tracks",
"type": "album"
},
"type": "track"
}
如您所见,readable 是 false 但 alternative.readable 是 true。在这种情况下,我想使用 alternative 轨道的 id,因为原始轨道在我的国家/地区不可用。
基于此响应,我可以简单地将替代标识符拉出并使用它,但是因为我使用的是新的 Deezer iOS SDK,我似乎无法做到这一点..
按照文档,我使用以下代码从 API 获取我需要的所有值:
// the manager to use in the requests
DZRRequestManager *manager = [DZRRequestManager defaultManager];
// the keys we wish to obtain
NSArray *keys = @[ @"id", @"readable", @"alternative.id", @"alternative.readable" ];
// the track id
NSString *identifier = @"95029960";
// fetch the track
[DZRTrack objectWithIdentifier:identifier requestManager:manager callback:^(DZRTrack *track, NSError *error) {
// fetch the keys
[track valuesForKeyPaths:keys withRequestManager:manager callback:^(NSDictionary *values, NSError *keyPathsError) {
// log what we got.
NSLog(@"Got Values: %@", values);
}];
}];
现在,我期望返回所有 4 个值,前提是它们存在于 JSON api 响应中(它们是),但我得到以下输出:
2015-04-02 09:48:35.485 <redacted>[694:115244] Got Values: {
id = 95029960;
readable = 0;
}
然后我查看了track 的supportedInfoKeys 和alternative 似乎不存在。为什么是这样?
是否有其他方法可以在 Deezer iOS SDK 中获取替代曲目?
更新:
我被要求检查 keyPathsError 是否被退回。我以前没有做过的事情,因为我不知道您可以同时退回 values 和 keyPathsError 但是我有设置以下错误:
Domain: DZRModelErrorDomain,
Code: 4,
UserInfo: {
"NSLocalizedDescriptionKey" : "Some object could not be parsed",
"DZROriginalErrorsKey" : [
{
Domain: DZRModelErrorDomain,
Code: 4,
UserInfo: {
"NSLocalizedDescriptionKey" : "You requested and unknown key from Deezer Object",
"DZRRequestedPropertyKey" : "alternative"
}
}
]
}
这显然表明我试图获取不受支持的密钥,但为什么不受支持?
【问题讨论】:
-
您能检查一下
keyPathsError中的内容吗? -
@rckoenes 请查看我的更新。谢谢。
标签: ios objective-c deezer