Spotify Api: How to add Spotify "Preview Track” to last fm App in Objective C
I'm creating music app. The application needs to retrieve information on track, album and artist. It currently Displays that atm. I am using the Last FM. However, I want to add Spotify, so it can retrieve track for play.
I'm looking to add a preview of the track so when the user clicks the track on the app, they click play and it plays the song(preview). I want to open another xib which will have a preview of the song. I have provided the code for my application. screenshot to show how it flows.
This is my first application, please help. I have no idea on how to incorporating Spotify. Much appreciated anyone who can help.
Last Fm Album, Track, and Artist Info Search.
#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
Detail Service
#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];
}
}
}
These are the screenshots.
Screenshot when search finds the artist's track Screenshot when user clicks searched item
Use the CocoaLibSpotify library for integrating Spotify with iOS or macOS.
Check out the "Guess The Intro" sample project in the CocoaLibSpotify project on GitHub. This project plays 15-second samples from a list of songs. You should be able to adapt it to your needs.
链接地址: http://www.djcxy.com/p/55588.html上一篇: 在播放列表中获取歌曲的流派
下一篇: Spotify Api:如何将Spotify“Preview Track”添加到目标C中的最后一个fm应用程序