• [iOS微博项目


     
    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)
     
     
     
  • 相关阅读:
    Flask中路由系统、Flask的参数及app的配置
    linux之master和minion
    linux之docker学习
    项目的发布(nginx、uwsgi、django、virtualenv、supervisor)
    Linux下安装和使用nginx
    linux下主从同步和redis的用法
    论图像识别的预处理技术
    图像技术分析 图像编辑器核心技术
    C++ Primer 第九章 顺序容器
    图像灰度化公式 颜色空间用途说明
  • 原文地址:https://www.cnblogs.com/hellovoidworld/p/4275237.html
Copyright © 2020-2023  润新知