[iOS微博項目 - 2.6] - 獲取微博數據

 
A.新浪獲取微博API
1.讀取微博API
 
6FD02D2E-454A-4E0D-BF67-469328E0858A
 
2.「statuses/home_timeline」接口
Image(105)
 
Image(106)
 
Image(107)
 
B.在app中獲取微博數據
1.在「首頁」控制器發送請求,獲取json數據
 1 /** 加載微博數據 */
 2 - (void) loadWeiboData {
 3     // 建立AFNetworking的http操做中管理器
 4     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 5    
 6     // 設置參數
 7     NSMutableDictionary *param = [NSMutableDictionary dictionary];
 8     param[@"access_token"] = [HVWAccountInfoTool accountInfo].access_token;
 9    
10     // 發送請求
11     [manager GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:param success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
12         HVWLog(@"獲取微博數據成功-------%@", responseObject);
13     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
14         HVWLog(@"獲取微博數據失敗------%@", error);
15     }];
16 }
 
Output:
獲取微博數據成功 -------{
statuses = [
{
rid = 0_0_2669621413509583897,
visible = {
type = 0,
list_id = 0
},
original_pic = http://ww1.sinaimg.cn/large/c3ad47bejw1eoygflrel2g201w034q34.gif,
mid = 3806890389487492,
source = <a href="http://app.weibo.com/t/feed/3j6BDx" rel="nofollow">
孔明社交管理 </a>,
truncated = 0,
reposts_count = 2,
bmiddle_pic = http://ww1.sinaimg.cn/bmiddle/c3ad47bejw1eoygflrel2g201w034q34.gif,
darwin_tags = [
],
....
 
2.封裝「用戶」、「微博」類,用來裝載每條微博信息
Image(108)
 
(1)用戶類(包括登錄用戶和關注的人)
Image(109)
 
暫時簡單封裝幾個屬性,之後再擴展
 1 //
 2 //  HVWUser.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface HVWUser : NSObject
12 
13 /** 友好顯示名稱 */
14 @property(nonatomic, copy) NSString *name;
15 
16 /** 用戶頭像地址(中圖),50×50像素 */
17 @property(nonatomic, copy) NSString *profile_image_url;
18 
19 
20 +(instancetype) userWithDict:(NSDictionary *) dict;
21 
22 @end
 
 1 //
 2 //  HVWUser.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWUser.h"
10 
11 @implementation HVWUser
12 
13 +(instancetype) userWithDict:(NSDictionary *) dict {
14     HVWUser *user = [[self alloc] init];
15    
16     user.name = dict[@"name"];
17     user.profile_image_url = dict[@"profile_image_url"];
18    
19     return user;
20 }
21 
22 @end
 
「微博」類
 1 //
 2 //  HVWStatus.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 #import "HVWUser.h"
11 
12 @interface HVWStatus : NSObject
13 
14 /** 微博信息內容 */
15 @property(nonatomic, copy) NSString *text;
16 
17 /** 微博做者的用戶信息字段 詳細 */
18 @property(nonatomic, strong) HVWUser *user;
19 
20 /** 微博配圖地址數組,裏面裝載的時HVWPic模型 */
21 @property(nonatomic, strong) NSArray *pic_urls;
22 
23 + (instancetype) statusWithDict:(NSDictionary *) dict;
24 
25 @end
 
 1 //
 2 //  HVWStatus.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWStatus.h"
10 #import "HVWUser.h"
11 
12 @implementation HVWStatus
13 
14 + (instancetype) statusWithDict:(NSDictionary *) dict {
15     HVWStatus *status = [[HVWStatus alloc] init];
16    
17     status.text = dict[@"text"];
18     status.user = [HVWUser userWithDict:dict[@"user"]];
19    
20     return status;
21 }
22 
23 @end
 
3.在「首頁」中顯示簡單的微博信息
使用SDWebImage加載網絡圖片
 
 1 //  HVWHomeViewController.m
 2 /** 加載微博數據 */
 3 - (void) loadWeiboData {
 4     // 建立AFNetworking的http操做中管理器
 5     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 6    
 7     // 設置參數
 8     NSMutableDictionary *param = [NSMutableDictionary dictionary];
 9     param[@"access_token"] = [HVWAccountInfoTool accountInfo].access_token;
10    
11     // 發送請求
12     [manager GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:param success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
13 //        HVWLog(@"獲取微博數據成功-------%@", responseObject);
14        
15         // 保存數據到內存
16         NSArray *dataArray = responseObject[@"statuses"];
17        
18         for (NSDictionary *dict in dataArray) {
19             HVWStatus *status = [HVWStatus statusWithDict:dict];
20             [self.statuses addObject:status];
21         }
22        
23         // 刷新數據
24         [self.tableView reloadData];
25        
26     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
27         HVWLog(@"獲取微博數據失敗------%@", error);
28     }];
29 }
30  
31 - (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
32    
33     static NSString *ID = @"HomeCell";
34     UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
35     if (nil == cell) {
36         cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:ID];
37     }
38    
39     HVWStatus *status = self.statuses[indexPath.row];
40     HVWUser *user = status.user;
41    
42     // 加載內容
43     cell.textLabel.text = status.text;
44     // 做者
45     cell.detailTextLabel.text = user.name;
46     // 做者頭像
47     NSString *imageUrlStr = user.profile_image_url;
48     [cell.imageView setImageWithURL:[NSURL URLWithString:imageUrlStr] placeholderImage:[UIImage imageWithNamed:@"avatar_default_small"]];
49    
50     return cell;
51 }
 
Image(110)
 
 
B.使用第三方框架轉換json字典數據到模型
     由於返回的json字典數據量大層多,本身編寫的代碼運行效率可能比較低下,這裏使用李明傑老師的MJExtension框架來進行轉換
 
1.使用此框架,只須要相應的類和成員屬性,不用本身編寫初始化方法
 1 //
 2 //  HVWUser.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface HVWUser : NSObject
12 
13 /** 友好顯示名稱 */
14 @property(nonatomic, copy) NSString *name;
15 
16 /** 用戶頭像地址(中圖),50×50像素 */
17 @property(nonatomic, copy) NSString *profile_image_url;
18 
19 @end
 
 1 //
 2 //  HVWStatus.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 #import "HVWUser.h"
11 
12 @interface HVWStatus : NSObject
13 
14 /** 微博信息內容 */
15 @property(nonatomic, copy) NSString *text;
16 
17 /** 微博做者的用戶信息字段 詳細 */
18 @property(nonatomic, strong) HVWUser *user;
19 
20 /** 微博配圖地址數組,裏面裝載的時HVWPic模型 */
21 @property(nonatomic, strong) NSArray *pic_urls;
22 
23 @end
 
 1 //  HVWHomeViewController.m
 2 /** 加載微博數據 */
 3 - (void) loadWeiboData {
 4     // 建立AFNetworking的http操做中管理器
 5     AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
 6    
 7     // 設置參數
 8     NSMutableDictionary *param = [NSMutableDictionary dictionary];
 9     param[@"access_token"] = [HVWAccountInfoTool accountInfo].access_token;
10    
11     // 發送請求
12     [manager GET:@"https://api.weibo.com/2/statuses/home_timeline.json" parameters:param success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
13 //        HVWLog(@"獲取微博數據成功-------%@", responseObject);
14        
15         // 保存數據到內存
16         NSArray *dataArray = responseObject[@"statuses"];
17        
18         // 使用MJExtension直接進行字典-模型轉換
19         self.statuses = [HVWStatus objectArrayWithKeyValuesArray:dataArray];
20        
21         // 刷新數據
22         [self.tableView reloadData];
23        
24     } failure:^(AFHTTPRequestOperation *operation, NSError *error) {
25         HVWLog(@"獲取微博數據失敗------%@", error);
26     }];
27 }
 
運行成功!
 
 
2.指定數組元素包裝類,能夠在代碼中指定用什麼類來包裝一個數組中的數據
例如,返回的數據中,有"pic_urls"的數組,裏面存放的是全部的微博配圖
 
Image(111)
 
沒有配置包裝類的時候,返回的就是一個字典,不會被自動封裝
Image(112)
 
建立一個"配圖」類
 1 //
 2 //  HVWPic.h
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import <Foundation/Foundation.h>
10 
11 @interface HVWPic : NSObject
12 
13 /** 縮略圖片地址,沒有時不返回此字段 */
14 @property(nonatomic, copy) NSString *thumbnail_pic;
15 
16 @end
 
「微博」類中已經有了對這個數組的映射,可是不會自動把裏面的數據自動轉換成HVWPic
Image(113)
 
因此,須要實現一個方法來指定數組子元素的包裝類:
 1 //
 2 //  HVWStatus.m
 3 //  HVWWeibo
 4 //
 5 //  Created by hellovoidworld on 15/2/5.
 6 //  Copyright (c) 2015年 hellovoidworld. All rights reserved.
 7 //
 8 
 9 #import "HVWStatus.h"
10 #import "HVWPic.h"
11 
12 // 注意引入框架
13 #import "MJExtension.h"
14 
15 @implementation HVWStatus
16 
17 - (NSDictionary *)objectClassInArray {
18     // 返回一個字典,建立數組子元素和包裝類的映射關係
19     return @{@"pic_urls": [HVWPic class]};
20 }
21 
22 @end
 
運行,確認status內的pic_urls數組的元素類型是HVWPic:
Image(114)
相關文章
相關標籤/搜索