2012-10-21 12 views
6

के साथ आईट्यून्स खोज एपीआई परिणाम मैपिंग मैं आईट्यून्स खोज एपीआई परिणामों को कस्टमकिट में रीस्टकिट का उपयोग करके लोड करने की कोशिश कर रहा हूं। मैं परिणाम के लिए एक सरल NSObject उपवर्ग परिभाषित किया है:रीस्टकिट

@interface LSiTunesResult : NSObject 

@property (nonatomic) NSInteger itemID; 
@property (nonatomic) NSInteger artistID; 

@property (strong, nonatomic) NSString *title; 
@property (strong, nonatomic) NSString *artistName; 
@property (strong, nonatomic) NSString *collectionName; 
@property (strong, nonatomic) NSString *itemDescription; 

@property (strong, nonatomic) NSURL *imageURL; 
@property (strong, nonatomic) NSURL *thumbnailURL; 
@property (strong, nonatomic) NSURL *trackPreviewURL; 
@property (strong, nonatomic) NSURL *trackViewURL; 

// 
+ (RKObjectMapping *)objectMapping; 

@end 

सादगी के लिए, मैं परिभाषित किया है वस्तु मानचित्रण

RKObjectMapping *mapping = [RKObjectMapping mappingForClass:[LSiTunesResult class]]; [mapping addAttributeMappingsFromDictionary:@{ @"artistName" : @"artistName" }];

मैं कुछ अलग अलग तरीकों से वास्तव में अनुरोध करने के लिए कोशिश की है परिणाम, एक कस्टम RKObjectManager और एक RKObjectRequestOperation दोनों का उपयोग कर। RKObjectRequestOperation साथ मेरे सरल उदाहरण लगता है कि:

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:[LSiTunesResult objectMapping] pathPattern:nil keyPath:@"results" statusCodes:nil]; 
RKObjectRequestOperation *operation = [[RKObjectRequestOperation alloc] initWithRequest:urlRequest responseDescriptors:@[responseDescriptor]]; 
[operation.HTTPRequestOperation setAcceptableContentTypes:[NSSet setWithObject:@"text/javascript"]]; 

[operation setCompletionBlockWithSuccess:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NSLog(@"The search results are: %@", [mappingResult array]); 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"Failure reason: %@", [error localizedDescription]); 
}]; 

[operation start]; 

दुर्भाग्य से, मैं RKResponseMapperOperation से निम्नलिखित त्रुटि मिलती है: "restkit.network:RKResponseMapperOperation.m:197 प्रतिक्रिया डेटा पार्स करने में विफल: सामग्री के साथ एक संसाधित नहीं हो सकने प्रतिक्रिया (200) पर लोड किए गए टाइप करें 'टेक्स्ट/जावास्क्रिप्ट' '

मेरे पास नेटवर्क लॉगिंग चालू है, और ऐसा लगता है कि आईट्यून्स एपीआई की प्रतिक्रिया सामग्री प्रकार को' टेक्स्ट/जावास्क्रिप्ट 'के रूप में चिह्नित करती है, जबकि शरीर में वैध JSON होता है। मैंने RKObjectRequestOperation को बताने की कोशिश की है कि पाठ/जावास्क्रिप्ट एक स्वीकार्य सामग्री प्रकार है।

क्या किसी को आईट्यून्स एपीआई और रेस्टकिट के साथ कोई अनुभव है? मुझे उत्सुकता है कि यह मेरे अंत में एक साधारण मैपिंग समस्या है, या यदि सामग्री प्रकार का दावा करने वाले आईट्यून्स एपीआई जावास्क्रिप्ट है, जबकि यह मान्य है JSON RestKit को फेंक रहा है। नीचे आईट्यून्स खोज एपीआई प्रतिक्रिया का एक नमूना है जो मेरे उदाहरण के दौरान लॉग है।

2012-10-21 01:48:54.061 Listen[99898:617] T restkit.network:RKHTTPRequestOperation.m:124 GET 'http://itunes.apple.com/search?term=The%20Lumineers&country=US&media=music&limit=1' (200): 
    response.headers={ 
     "Cache-Control" = "no-transform, max-age=60"; 
     Connection = "keep-alive"; 
     "Content-Encoding" = gzip; 
     "Content-Length" = 519; 
     "Content-Type" = "text/javascript; charset=utf-8"; 
     Date = "Sun, 21 Oct 2012 05:48:54 GMT"; 
     Vary = "Accept-Encoding"; 
     "X-Apple-Partner" = "origin.0"; 
     "apple-timing-app" = "49 ms"; 
     "x-apple-application-instance" = 1018018; 
     "x-apple-application-site" = NWK; 
     "x-apple-orig-url-path" = "/search?term=The%20Lumineers&country=US&media=music&limit=1"; 
     "x-apple-translated-wo-url" = "/WebObjects/MZStoreServices.woa/ws/wsSearch?term=The%20Lumineers&country=US&media=music&limit=1"; 
     "x-webobjects-loadaverage" = 0; 
    } 
    response.body= 


    { 
    "resultCount":1, 
    "results": [ 
    {"wrapperType":"track", "kind":"music-video", "artistId":350720227, "trackId":516035614, "artistName":"The Lumineers", "trackName":"Ho Hey", "trackCensoredName":"Ho Hey", "artistViewUrl":"https://itunes.apple.com/us/artist/the-lumineers/id350720227?uo=4", "trackViewUrl":"https://itunes.apple.com/us/music-video/ho-hey/id516035614?uo=4", "previewUrl":"http://a404.v.phobos.apple.com/us/r30/Video/fd/81/e1/mzi.gxodlwda..640x256.h264lc.u.p.m4v", "artworkUrl30":"http://a1838.phobos.apple.com/us/r30/Video/v4/41/64/37/416437c2-c02e-4706-3f13-a47f50ec2ccc/Cover.40x30-75.jpg", "artworkUrl60":"http://a621.phobos.apple.com/us/r30/Video/v4/41/64/37/416437c2-c02e-4706-3f13-a47f50ec2ccc/Cover.80x60-75.jpg", "artworkUrl100":"http://a1629.phobos.apple.com/us/r30/Video/v4/41/64/37/416437c2-c02e-4706-3f13-a47f50ec2ccc/Cover.100x100-75.jpg", "collectionPrice":1.99, "trackPrice":1.99, "releaseDate":"2012-04-03T07:00:00Z", "collectionExplicitness":"notExplicit", "trackExplicitness":"notExplicit", "trackTimeMillis":160952.0, "country":"USA", "currency":"USD", "primaryGenreName":"Singer/Songwriter"}] 
    } 

उत्तर

2

इस काम को करने के लिए दो चीजें।

पहले एक तुम मिल गया:

operation.HTTPRequestOperation.acceptableContentTypes = [NSSet setWithObject:@"text/javascript"]; 

दूसरा एक इस प्रकार के लिए json serializer रजिस्टर करने के लिए है।

[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"text/javascript"]; 

फिर यह सब काम करता है!

संबंधित मुद्दे

 संबंधित मुद्दे