/*
准备:
举例 API点击打开链接
1.通过API测试工具
2.调用借口
3.用JOSN解释,调用接口的返回值
*/
//在Main.storyboard添加 Button、 Text View、Image View
//点击如下下图的第二个图标,然后点击button,按住右键拖向代码中
/*
创建一个Cocoa Touch Class
*/
#import <Foundation/Foundation.h>
@interface WeiBoModel : NSObject
@property (nonatomic,strong)NSArray *statuses;
@property (nonatomic,strong)NSNumber *hasvisible;
@property (nonatomic,strong)NSNumber *previous_cursor;
@property (nonatomic,strong)NSNumber *next_cursor;
@property (nonatomic,strong)NSNumber *total_number;
@property (nonatomic,strong)NSNumber *interval;
-(id)initWithDictionary:(NSDictionary *)dictionary;
@end
#import "WeiBoModel.h"
@implementation WeiBoModel
-(id)initWithDictionary:(NSDictionary *)dictionary{
if (self=[super init]) {
[self setValuesForKeysWithDictionary:dictionary];
}
return self;
}
@end
#import "ViewController.h"
#import "WeiBoModel.h"
@interface ViewController ()<NSURLConnectionDataDelegate>
{
NSMutableData *_mDataGet;
NSURLConnection *_connectionGet;
NSURLConnection *_connectionPost;
NSMutableData *_mDataPost;
}
@property (weak, nonatomic) IBOutlet UIImageView *imgView;
@property (weak, nonatomic) IBOutlet UITextView *textView;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
}
//同步get
- (IBAction)synchronizedGet:(UIButton *)sender {
NSLog(@"同步get");
NSString *urlString =@"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00_cme_C1a9suDcc0658a67fbHiNZC";
//编码
urlString =[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url =[NSURL URLWithString:urlString];
//创建一个url请求
NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//创建一个url响应
NSURLResponse *httpURLResponse;
NSError *error;
//使用NSURLConnection类,和服务器连接,这个是同步过程
NSData *data=[NSURLConnection sendSynchronousRequest:request returningResponse:&httpURLResponse error:&error];
//JSON数据格式解析,利用系统提供的API进行JSON数据解析
NSDictionary *dictionary =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
//NSLog(@"dictionary =%@",dictionary);
WeiBoModel *model =[[WeiBoModel alloc] initWithDictionary:dictionary];
NSString *text = [model.statuses[0]objectForKey:@"text"];
// NSDictionary *dic =[dictionary[@"statuses"]objectAtIndex:0];
// NSString *text =dic[@"text"];
// NSLog(@"%@",text);
self.textView.text = text;
NSLog(@"%@",text);
}
//同步图片get
- (IBAction)imgView:(UIButton *)sender {
NSString *urlString =@"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00_cme_C1a9suDcc0658a67fbHiNZC";
//编码
urlString =[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url =[NSURL URLWithString:urlString];
//创建一个url请求
NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//[NSURLConnection connectionWithRequest:request delegate:self];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSDictionary *dicionary =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
WeiBoModel *modle =[[WeiBoModel alloc]initWithDictionary:dicionary];
NSArray *array =[modle.statuses[0]objectForKey:@"pic_urls"];
if (array.count>0) {
NSArray *urlString =[array[0]objectForKey:@"thumbnail_pic"];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
self.imgView.image =[UIImage imageWithData:data];
NSLog(@"image");
}else{
NSLog(@"404");
}
}];
}
//异步get
- (IBAction)AsynchronizedGet:(UIButton *)sender {
NSString *urlString =@"https://api.weibo.com/2/statuses/public_timeline.json?access_token=2.00_cme_C1a9suDcc0658a67fbHiNZC";
//编码
urlString =[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url =[NSURL URLWithString:urlString];
//创建一个url请求
NSURLRequest *request =[NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
//[NSURLConnection connectionWithRequest:request delegate:self];
[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
NSDictionary *dicionary =[NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
WeiBoModel *modle =[[WeiBoModel alloc]initWithDictionary:dicionary];
NSString *text =[modle.statuses[0]objectForKey:@"text"];
NSArray *array =[modle.statuses[0]objectForKey:@"pic_urls"];
dispatch_async(dispatch_get_main_queue(), ^{
self.textView.text=text;
//异步get图片
if (array.count>0) {
NSArray *urlString =[array[0]objectForKey:@"thumbnail_pic"];
NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:urlString]];
self.imgView.image =[UIImage imageWithData:data];
NSLog(@"image");
}else{
NSLog(@"404");
}
});
}];
}
//同步post
- (IBAction)synchronizedPost:(UIButton *)sender {
NSString *urlString =@"https://api.weibo.com/2/statuses/update.json";
//编码
urlString =[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url =[NSURL URLWithString:urlString];
NSMutableURLRequest *mRequest =[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
NSString *bodyString= @"%E5%98%BF%E5%98%BF&access_token=2.00_cme_C1a9suDcc0658a67fbHiNZC";
NSData *data =[bodyString dataUsingEncoding:NSUTF8StringEncoding];
//post 设置他的方法体
[mRequest setHTTPMethod:@"POST"];
[mRequest setHTTPBody:data];
NSData *requestData=[NSURLConnection sendSynchronousRequest:mRequest returningResponse:nil error:nil];
NSDictionary *dictonray =[NSJSONSerialization JSONObjectWithData:requestData options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dictonray);
}
//异步post
- (IBAction)AsynchronizedPost:(UIButton *)sender {
NSString *urlString =@"https://api.weibo.com/2/statuses/update.json";
//字符串编码
urlString =[urlString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSURL *url =[NSURL URLWithString:urlString];
NSMutableURLRequest *mRequest =[NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60];
NSString *bodyString= @"%E5%98%BF%E5%98%BF&access_token=2.00_cme_C1a9suDcc0658a67fbHiNZC";
NSData *data =[bodyString dataUsingEncoding:NSUTF8StringEncoding];
[mRequest setHTTPMethod:@"POST"];
[mRequest setHTTPBody:data];
_connectionPost=[NSURLConnection connectionWithRequest:mRequest delegate:self];
}
#pragma mark --NSURLConnectionDataDelegate--
//服务器开始响应,准备向客户发送数据
-(void)connection:(NSURLConnection*) connection
didReceiveResponse:( NSURLResponse *)response{
NSLog(@"服务器开始响应,准备向客户发送数据");
_mDataGet =[NSMutableData data];
if (connection== _connectionGet) {
_mDataGet=[NSMutableData data];
}
if (connection ==_connectionPost) {
_mDataPost =[NSMutableData data];
}
}
//从服务器接收数据,并且此方法会执行多次
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{
NSLog(@"从服务器接收数据,并且此方法会执行多次");
if (connection== _connectionGet) {
[_mDataGet appendData:data ];
}
if (connection ==_connectionPost) {
[_mDataPost appendData:data];
}
}
//接收数据完成
- (void)connectionDidFinishLoading:(NSURLConnection *)connection{
NSLog(@"接收数据完成");
if (connection ==_connectionGet) {
NSDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:_mDataGet options:NSJSONReadingAllowFragments error:nil];
WeiBoModel *model= [[WeiBoModel alloc]initWithDictionary:dictionary];
NSString *text =[model.statuses[0]objectForKey:@"text"];
//更新UI需要回到主线程
//self.textView.text =text;
[self.textView performSelectorOnMainThread:@selector(setText:) withObject:text waitUntilDone:NO];
// dispatch_async(dispatch_get_main_queue(), ^{
// self.textView.text =text;
// })
//
}
if (connection ==_connectionPost) {
NSDictionary *dictionary =[NSJSONSerialization JSONObjectWithData:_mDataPost options:NSJSONReadingAllowFragments error:nil];
NSLog(@"%@",dictionary);
}
}