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

下一篇: Arrays returning undefined for API calls (spotify app)