IOS菜鸟的所感所思(十)——专辑接口和专辑中歌曲数据的获得(上)

目标:根据接口提供的参数获得专辑的数据并在UITableViewCell中显示出来。


获取专辑的接口:

请求地址url:  http://music.163.com/api/search/get/web


需要设置的HTTP Haeder:
  "Accept-Encoding”: "deflate,gzip"


  "Content-Type”:  "application/x-www-form-urlencoded"
  
   "Referer”:   "http://music.163.com/"


    "User-Agent”:  "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"


需要设置的HTTP Body:
NSString *body = [NSString stringWithFormat:@"s=%@&limit=%d&offset=%d&type=10”,搜索的关键字,当前返回的搜索结果数量num(num<=100),当前偏移量offset(offset==当前搜索的页数page*每页返回的结果num)];

需要设置的HTTP Method:

    POST


这种接口我们现在写了几个了,因此它的套路就是

1.我们需要的东西放在callback中(比如这里面的我们需要的是:一个存放专辑的数组)

2.需要传入的参数:page,关键字key。

3.方法的实现

FetchDataFromNet.m文件中


#define kAlbumLimit 1


//方法的具体实现

+ (void)fetchAlbumData:(NSString *)key page:(NSInteger)page callback:(fetchTrackDataAndError)callback{

    //获得网络地址并发送网络请求,设置相应的http的头信息

    NSURL *albumUrl = [NSURLURLWithString:@"http://music.163.com/api/search/get/web"];

    NSMutableURLRequest *request = [NSMutableURLRequestrequestWithURL:albumUrl];

    

    [request setValue:@"deflate,gzip"forHTTPHeaderField:@"Accept-Encoding"];

    [request setValue:@"application/x-www-form-urlencoded"forHTTPHeaderField:@"Content-Type"];

    [request setValue:@"http://music.163.com/"forHTTPHeaderField:@"Referer"];

    [request setValue:@"Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)"forHTTPHeaderField:@"User-Agent"];

    //请求方法的类型

    [requestsetHTTPMethod:@"POST"];

    //定义内容的信息,需要定义kAlbumLimit(设置获得专辑的个数)(建议你测试的时候设置成一个)

   NSString *bodyString = [NSStringstringWithFormat:@"s=%@&limit=%d&offset=%ld&type=10",key,kAlbumLimit,page *kAlbumLimit];

    [request setHTTPBody:[bodyStringdataUsingEncoding:NSUTF8StringEncoding]];

    //发送URL的连接,发送异步的获取数据的请求

    [NSURLConnectionsendAsynchronousRequest:request queue:[NSOperationQueue currentQueue] completionHandler:^(NSURLResponse *response,NSData *data, NSError *connectionError) {

//异常的处理

       if (connectionError) {

            callback(nil, page, connectionError);

        }else{

           NSMutableArray *albumArray = [NSMutableArraynew];

            

           @try {

//用json格式解析获得到的数据(你可以打印出来看一下,因为我们需要解析里面的具体的数据)

               NSDictionary *albumDic = [NSJSONSerializationJSONObjectWithData:data options:kNilOptions error:nil];

               // NSLog(@"albumDic:%@",albumDic);

                

                //只有你知道albumDic字典的结构才能做下面的事,根据key去获得对应的专辑的数组(建议看一下这个数组)

               NSArray *albumItemArray = [[albumDic objectForKey:@"result"]objectForKey:@"albums"];

               // NSLog(@"%@",albumItemArray);

//下面的代码你需要搞清楚专辑的结构,还有你需要的数据,这样你需要建一个类albumData,所以得完成准备工作。

//for循环使得albumItemArray中的每一个对象都传入AlbumData接口中进行初始化,并且最后一个个添加到albumArray,并返回

                [albumItemArrayenumerateObjectsUsingBlock:^(id obj,NSUInteger idx, BOOL *stop) {

                   AlbumData *albumData = [AlbumDataalbumDataWithDic:obj];

                   if (albumData) {

                        [albumArray addObject:albumData];

                    }

                }];

            }

           @catch (NSException *exception) {

                

            }

           @finally {

                callback(albumArray, page,nil);

            }

        }

    }];

    

}

这个测试你需要在一个viewDidLoad中调用+ (void)fetchAlbumData:(NSString *)key page:(NSInteger)page callback:(fetchTrackDataAndError)callback

至于key可以设置成@“df”,随便设置的。page = 10;

我们需要看一下NSLog(@"albumDic:%@",albumDic);字典中的内容:

albumDic:{

    code = 200;

    result =     {

        albumCount = 9999;

        albums =         (

                        {

                alias =                 (

                );

                artist =                 {

                    albumSize = 44;

                    alias =                     (

                        "\U94f6\U68ee",

                        "\U30b7\U30eb\U30d5\U30a9\U30ec"

                    );

                    briefDesc = "";

                    id = 21354;

                    img1v1Id = 0;

                    img1v1Url = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

                    musicSize = 288;

                    name = "Silver Forest";

                    picId = 936783906918296;

                    picUrl = "http://p3.music.126.net/0-gzlqU6jGW8etl5i_dGAQ==/936783906918296.jpg";

                    trans = "";

                };

                artists =                 (

                                        {

                        albumSize = 0;

                        alias =                         (

                        );

                        briefDesc = "";

                        id = 21354;

                        img1v1Id = 0;

                        img1v1Url = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

                        musicSize = 0;

                        name = "Silver Forest";

                        picId = 0;

                        picUrl = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

                        trans = "";

                    }

                );

                blurPicUrl = "http://p4.music.126.net/IvcY_Sy0R1tP1BUZ2aLiog==/849922488271112.jpg";

                briefDesc = "";

                commentThreadId = "R_AL_3_81657";

                company = C76;

                companyId = 0;

                copyrightId = 0;

                description = "";

                id = 81657;

                name = "\U4e1c\U65b9\U30ce\U30b9\U30bf\U30eb\U30b8\U30a2";

                pic = 849922488271112;

                picId = 849922488271112;

                picUrl = "http://p3.music.126.net/IvcY_Sy0R1tP1BUZ2aLiog==/849922488271112.jpg";

                publishTime = 1250265600000;

                size = 10;

                songs =                 (

                );

                status = 1;

                tags = "";

                type = "\U4e13\U8f91";

            }

        );

    };

}

看了之后,我们需要知道album中数据因此才有后面的代码:

 NSArray *albumItemArray = [[albumDic objectForKey:@"result"]objectForKey:@"albums"];

接下来要做的就是:

NSLog(@"%@",albumItemArray);

(

        {

        alias =         (

        );

        artist =         {

            albumSize = 44;

            alias =             (

                "\U94f6\U68ee",

                "\U30b7\U30eb\U30d5\U30a9\U30ec"

            );

            briefDesc = "";

            id = 21354;

            img1v1Id = 0;

            img1v1Url = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

            musicSize = 288;

            name = "Silver Forest";

            picId = 936783906918296;

            picUrl = "http://p3.music.126.net/0-gzlqU6jGW8etl5i_dGAQ==/936783906918296.jpg";

            trans = "";

        };

        artists =         (

                        {

                albumSize = 0;

                alias =                 (

                );

                briefDesc = "";

                id = 21354;

                img1v1Id = 0;

                img1v1Url = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

                musicSize = 0;

                name = "Silver Forest";

                picId = 0;

                picUrl = "http://p4.music.126.net/6y-UleORITEDbvrOLV0Q8A==/5639395138885805.jpg";

                trans = "";

            }

        );

        blurPicUrl = "http://p4.music.126.net/IvcY_Sy0R1tP1BUZ2aLiog==/849922488271112.jpg";

        briefDesc = "";

        commentThreadId = "R_AL_3_81657";

        company = C76;

        companyId = 0;

        copyrightId = 0;

        description = "";

        id = 81657;

        name = "\U4e1c\U65b9\U30ce\U30b9\U30bf\U30eb\U30b8\U30a2";

        pic = 849922488271112;

        picId = 849922488271112;

        picUrl = "http://p3.music.126.net/IvcY_Sy0R1tP1BUZ2aLiog==/849922488271112.jpg";

        publishTime = 1250265600000;

        size = 10;

        songs =         (

        );

        status = 1;

        tags = "";

        type = "\U4e13\U8f91";

    }

)

现在我们知道album中需要哪些属性了, 可以有blurPicUrl(专辑的图片),name(专辑的名字),id(专辑的id,后面会用到),artistName(artists中的name)。

因此在albumData的接口中你可以这样写:

AlbumData.h文件中:

@interface AlbumData : NSObject

@property (nonatomic, strong) NSString *albumID;

@property (nonatomic, strong) NSString *albumName;

@property (nonatomic, strong) NSString *albumImage;

@property (nonatomic, strong) NSString *artist;



+ (id)albumDataWithDic:(NSDictionary *)dic;

AlbumData.m文件中:

@implementation AlbumData

+(id)albumDataWithDic:(NSDictionary *)dic{

    return [[self alloc] initWithDic:dic];

}


- (id)initWithDic:(NSDictionary *)dic{

    if (self = [super init]) {

        self.albumID = [dic objectForKey:@"id"];

        self.albumName = [dic objectForKey:@"name"];

        self.albumImage = [dic objectForKey:@"picUrl"];

        self.artist = [[dic objectForKey:@"artist"] objectForKey:@"name"];

    }

    return self;

}


这样你在 albumItemArray数组中的每一个对象都会对里面的值进行key的设置。

接下来就是创建一个视图控制器AlbumSearch,控制视图。至于视图中的cell我们还会使用自定义的,可以复用之前我们已经弄好的CollectViewCell

是继承UITableViewCell的

控制器中的代码我会放在下一篇中。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值