是的,我正在回答自己的问题。
经过深入挖掘和与我认识的最好的程序员之一的交谈,我们找到了一个解决方案,所以我想在这里分享一下。该解决方案获取歌曲名称和艺术家,并实际调用Link Maker API,获取一个XML文档,并提取必要的信息来创建指向iTunes Store的链接,打开包含该歌曲的艺术家专辑中的歌曲的商店。
在视图控制器的接口中添加:
@property (strong, readonly, nonatomic) NSOperationQueue* operationQueue;
@property (nonatomic) BOOL searching;
在实现中:
@synthesize operationQueue = _operationQueue
@synthesize searching = _searching
以下是可以帮助您完成此操作的方法和代码:
-(NSOperationQueue*)operationQueue
{
if(_operationQueue == nil) {
_operationQueue = [NSOperationQueue new];
}
return _operationQueue;
}
- (void)setSearching:(BOOL)searching
{
_searching = searching;
dispatch_async(dispatch_get_main_queue(), ^{
if(searching) {
self.searchButton.enabled = NO;
[self.searchButton setTitle:@"" forState:UIControlStateNormal];
[self.activityIndicator startAnimating];
} else {
self.searchButton.enabled = YES;
[self.searchButton setTitle:@"Search" forState:UIControlStateNormal];
[self.activityIndicator stopAnimating];
}
});
}
- (IBAction)searchButtonTapped:(id)sender {
NSString* artistTerm = self.artistField.text;
NSString* songTerm = self.songField.text;
if(artistTerm.length > 0 && songTerm.length > 0) {
NSString* baseURLString = @"https://itunes.apple.com/search";
NSString* searchTerm = [NSString stringWithFormat:@"%@ %@", artistTerm, songTerm];
NSString* searchUrlString = [NSString stringWithFormat:@"%@?media=music&entity=song&term=%@&artistTerm=%@&songTerm=%@", baseURLString, searchTerm, artistTerm, songTerm];
searchUrlString = [searchUrlString stringByReplacingOccurrencesOfString:@" " withString:@"+"];
searchUrlString = [searchUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSURL* searchUrl = [NSURL URLWithString:searchUrlString];
NSLog(@"searchUrl: %@", searchUrl);
NSURLRequest* request = [NSURLRequest requestWithURL:searchUrl];
self.searching = YES;
[NSURLConnection sendAsynchronousRequest:request queue:self.operationQueue completionHandler:^(NSURLResponse* response, NSData* data, NSError* error) {
self.searching = NO;
if(error != nil) {
NSLog(@"Error: %@", error);
} else {
NSError* jsonError = nil;
NSDictionary* dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError];
if(jsonError != nil) {
NSLog(@"JSON Error: %@", jsonError);
} else {
NSArray* resultsArray = dict[@"results"];
if(resultsArray.count == 0) {
NSLog(@"No results returned.");
} else {
NSDictionary* trackDict = resultsArray[0];
NSString* trackViewUrlString = trackDict[@"trackViewUrl"];
if(trackViewUrlString.length == 0) {
NSLog(@"No trackViewUrl");
} else {
NSURL* trackViewUrl = [NSURL URLWithString:trackViewUrlString];
NSLog(@"trackViewURL:%@", trackViewUrl);
dispatch_async(dispatch_get_main_queue(), ^{
[[UIApplication sharedApplication] openURL:trackViewUrl];
});
}
}
}
}
}];
}
}
XML文件中还有很多其他有用的信息,可以提取出来,包括三种大小的专辑封面、专辑名称、价格等等。
希望这能帮助其他人。我被这个问题困扰了相当长时间,感谢我的好朋友让这个方法奏效。