Spotify Api:如何将Spotify“Preview Track”添加到目标C中的最后一个fm应用程序
我正在创建音乐应用程序。 应用程序需要检索曲目,专辑和艺术家的信息。 它当前显示该atm。 我正在使用Last FM。 不过,我想添加Spotify,因此它可以检索曲目进行播放。
我希望添加曲目预览,以便当用户点击应用程序中的曲目时,他们点击播放并播放歌曲(预览)。 我想打开另一个将会预览歌曲的xib。 我为我的应用程序提供了代码。 截图显示它如何流动。
这是我的第一个应用程序,请帮助。 我不知道如何合并Spotify。 非常感谢任何人可以提供帮助。
Last Fm专辑,曲目和艺术家信息搜索。
#import "MusicSearchServices.h"
@implementation MusicSearchServices
@synthesize searchTerm;
@synthesize delegate;
@synthesize results;
- (void)main {
NSString *api_key = @"API HERE";
NSString *search_term = [searchTerm stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *url = [NSString stringWithFormat:@"http://ws.audioscrobbler.com/2.0/?method=album.search&album=%@&api_key=%@&format=json", search_term, api_key];
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
if (responseData !=nil) {
NSError *error = nil;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
if (error) {
[delegate serviceFinished:self withError:YES];
} else {
results = (NSArray *) [[[json valueForKey:@"results"] valueForKey:@"albummatches"] valueForKey:@"album"];
[delegate serviceFinished:self withError:NO];
}
} else {
[delegate serviceFinished:self withError:YES];
}
}
@end
细节服务
#import "DetailService.h"
@implementation DetailService
@synthesize musicname;
@synthesize artistname;
@synthesize delegate;
@synthesize details;
- (void)main {
NSString *api_key = @"Api";
NSString *music_Id= [musicname stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *artist_Id= [artistname stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
NSString *url = [NSString stringWithFormat:@"http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=%@&artist=%@&album=%@&format=json", api_key,artist_Id,music_Id];
NSLog(@"%@", url);
NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:url]
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSData *responseData = [NSURLConnection sendSynchronousRequest:theRequest returningResponse:nil error:nil];
if (responseData !=nil) {
NSError *error = nil;
NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:&error];
if (error) {
[delegate serviceFinished:self withError:YES];
} else {
details = [json valueForKey:@"album"];
[delegate serviceFinished:self withError:NO];
}
} else {
[delegate serviceFinished:self withError:YES];
}
}
@end
MusicDeatilsViewer
- (void)viewWillAppear:(BOOL)animated{
if ([self music] !=nil){
[self setTitle:[[self music]valueForKey:@"name"]];
[txtFilmText setText:[[self music] valueForKey:@"name"]];
[txtFilmYear setText:[[[self music] valueForKey:@"artist"]description]];
[txtReleaseDate setText:[[[self music] valueForKey:@"releasedate"]description]];
[txtlis setText:[[self music] valueForKey:@"listeners"]];
[count setText:[[self music] valueForKey:@"playcount"]];
[txtalbumurl setText:[[self music] valueForKey:@"url"]];
//Artist info web sevuces
[txtSummary setText:[[[[self music] valueForKey:@"bio"] valueForKey:@"summary"] description]];
[txtSummary setText:@""];
//Artist Details Animation
[_lbText setAlpha:0.0];
[_lbText setCenter:CGPointMake(95, 85)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[UIView setAnimationWillStartSelector:@selector(start)];
[_lbText setAlpha:1.0];
[_lbText setCenter:CGPointMake(180,85 )];
[UIView commitAnimations];
//Images Animation
//Track Image
[imgFilm setAlpha:0.0];
[imgFilm setCenter:CGPointMake(97, 200)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[imgFilm setAlpha:1.0];
[imgFilm setCenter:CGPointMake(97,200 )];
[UIView commitAnimations];
//Artist Image
[imgArtist setAlpha:0.0];
[imgArtist setCenter:CGPointMake(80, 390)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[imgArtist setAlpha:1.0];
[imgArtist setCenter:CGPointMake(80,410 )];
[UIView commitAnimations];
//Details Animation
[txtSummary setAlpha:0.0];
[txtSummary setCenter:CGPointMake(230, 410)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[txtSummary setAlpha:1.0];
[txtSummary setCenter:CGPointMake(230,410 )];
[UIView commitAnimations];
[txtFilmYear setAlpha:0.0];
[txtFilmYear setCenter:CGPointMake(240, 340)];
[UIView beginAnimations:nil context:nil];
[UIView setAnimationDelay:1];
[UIView setAnimationDuration:1];
[UIView setAnimationDelegate:self];
[txtFilmYear setAlpha:1.0];
[txtFilmYear setCenter:CGPointMake(240,340 )];
[UIView commitAnimations];
//imagefilm shadow effect
imgFilm.layer.shadowColor = [UIColor purpleColor].CGColor;
imgFilm.layer.shadowOffset = CGSizeMake(4, 4);
imgFilm.layer.shadowOpacity = 0.5;
imgFilm.layer.shadowRadius = 0.9;
imgFilm.clipsToBounds = NO;
//imageArtist shadow effect
imgArtist.layer.shadowColor = [UIColor purpleColor].CGColor;
imgArtist.layer.shadowOffset = CGSizeMake(4, 3);
imgArtist.layer.shadowOpacity = 0.9;
imgArtist.layer.shadowRadius = 1.0;
imgArtist.clipsToBounds = NO;
//ServiceQue
serviceQueue = [[NSOperationQueue alloc] init];
[serviceQueue setMaxConcurrentOperationCount:1];
ArtistInfo *aservice = [[ArtistInfo alloc] init];
[aservice setArtistinfo:[[[self music] valueForKey:@"artist"] description]];
[aservice setDelegate:self];
[serviceQueue addOperation:aservice];
DetailService *service = [[DetailService alloc]init];
[service setMusicname:[[self music] valueForKey:@"name"]];
[service setArtistname:[[[self music] valueForKey:@"artist"] description]];
[service setDelegate:self];
[serviceQueue addOperation:service];
//check if album image is downloaded
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@%@.png", docDir, [[self music] valueForKey:@"name"], [[self music] valueForKey:@"artist"]];
NSLog(@"Show url_Img_FULL2: %@", pngFilePath);
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:pngFilePath]){
UIImage *pic = [UIImage imageWithData:[NSData dataWithContentsOfFile:pngFilePath]];
[imgFilm setImage:pic];
} else {
DetailService *service = [[DetailService alloc]init];
[service setMusicname:[[self music] valueForKey:@"name"]];
[service setArtistname:[[[self music] valueForKey:@"artist"] description]];
[service setDelegate:self];
[serviceQueue addOperation:service];
// NSLog(@"Show error1: %@", artistservice);
}
//check if image is downloaded
NSString *docDir2 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *pngFilePath2 = [NSString stringWithFormat:@"%@/%@%@.png", docDir2, [[self music] valueForKey:@"name"], [[self music] valueForKey:@"artist"]];
NSLog(@"Show url_Img_FULL2: %@", pngFilePath2);
NSFileManager *fileManager2 = [NSFileManager defaultManager];
if ([fileManager2 fileExistsAtPath:pngFilePath]){
UIImage *pic = [UIImage imageWithData:[NSData dataWithContentsOfFile:pngFilePath]];
[imgFilm setImage:pic];
NSLog(@"Show url_Img_FULL: %@",pngFilePath);
}
//check if artist image shows
NSString *docDir1 = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pngFilePath1 = [NSString stringWithFormat:@"%@/%@.png", docDir1, [[self music] valueForKey:@"artist"] ];
NSLog(@"Show url_Img_FULL2: %@", pngFilePath);
NSFileManager *fileManager1 = [NSFileManager defaultManager];
if ([fileManager1 fileExistsAtPath:pngFilePath1]){
UIImage *pic = [UIImage imageWithData:[NSData dataWithContentsOfFile:pngFilePath1]];
[imgArtist setImage:pic];
}
}
if ([self music] != nil) {
[txtFilmText setText:[[self music] valueForKey:@"name"]];
[txtFilmYear setText:[[[self music] valueForKey:@"artist"] description]];
[txtReleaseDate setText:[[[self music] valueForKey:@"releasedate"] description]];
[txtlis setText:[[[self music] valueForKey:@"listeners"] description]];
[count setText:[[[self music] valueForKey:@"playcount"] description]];
[txtalbumurl setText:[[[self music] valueForKey:@"url"] description]];
[txtSummary setText:[[[self music] valueForKey:@"summary"] description]];
//check if image is downloaded
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@%@.png", docDir, [[self music] valueForKey:@"name"], [[self music] valueForKey:@"artist"]];
NSLog(@"Show url_Img_FULL2: %@", pngFilePath);
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:pngFilePath]){
UIImage *pic = [UIImage imageWithData:[NSData dataWithContentsOfFile:pngFilePath]];
[imgFilm setImage:pic];
NSLog(@"Show url_Img_FULL: %@",pngFilePath);
}
} else {
NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];
NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@.png", docDir, [[self music] valueForKey:@"artist"] ];
NSLog(@"Show url_Img_FULL2: %@", pngFilePath);
NSFileManager *fileManager = [NSFileManager defaultManager];
if ([fileManager fileExistsAtPath:pngFilePath]){
UIImage *pic = [UIImage imageWithData:[NSData dataWithContentsOfFile:pngFilePath]];
[imgArtist setImage:pic];
}
}
}
这些是截图。
搜索找到艺术家曲目时的屏幕截图用户单击搜索项目时的屏幕截图
使用CocoaLibSpotify库来集成Spotify与iOS或macOS。
查看GitHub上CocoaLibSpotify项目中的“Guess The Intro”示例项目。 该项目播放歌曲列表中的15秒样本。 你应该能够适应你的需求。
链接地址: http://www.djcxy.com/p/55587.html上一篇: Spotify Api: How to add Spotify "Preview Track” to last fm App in Objective C