• 微博API调用


    #import "ViewController.h"
    #define kAppKey @"706003107"
    #define kAppSecret @"53b3f1774f9a050e1d4931bab3b55633"
    #define kRedirect_url @"www.baidu.com"
    #define kAccessTokenKey @"kAccessTokenKey"
    #define kExpiresTimeKey @"kExpiresTimeKey"
    #define kUserIDKey @"kUserIDKey"
    @interface ViewController ()<UIWebViewDelegate>
    @property (nonatomic,strong) UIWebView *webView;
    @end
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
        }
    - (IBAction)loginDidClicked:(id)sender {
        //使用oAuth的oauth2发起请求,拼接网址,,参数开始用?,&连接不同的参数,
        NSString *urlString = [NSString stringWithFormat:@"https://api.weibo.com/oauth2/authorize?client_id=%@&redirect_uri=%@",kAppKey,kRedirect_url];
        
        NSURL *url = [NSURL URLWithString:urlString];
        //发送请求-创建session
    //    NSURLSession *session = [NSURLSession sharedSession];
        //创建请求,网页
        NSURLRequest *request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalAndRemoteCacheData timeoutInterval:60];
        
        //使用UIWebView加载页面
        self.webView = [[UIWebView alloc]initWithFrame:self.view.bounds];
        
        _webView.delegate = self;
        [self.view addSubview:_webView];
        [_webView loadRequest:request];
    }
    
    - (IBAction)logout:(id)sender {
        NSUserDefaults *useDefaults = [NSUserDefaults standardUserDefaults];
        [useDefaults setObject:nil forKey:kAccessTokenKey];
        [useDefaults setObject:nil forKey:kExpiresTimeKey];
        [useDefaults setObject:nil forKey:kUserIDKey];
        [useDefaults synchronize];
    
    }
    
    #pragma mark ---------------
    -(BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType{
        //目标获取code的状态码 解决方案,对即将加载的request对应的URL进行解析,一旦URL里面包含code=,那么就停止
        NSRange range = [[request.URL relativeString]rangeOfString:@"code="];
        if (range.length!=0) {
            //说明此刻即将请求的request里面包含了code,解析code后面的内容,
            NSString *code = [[request.URL relativeString]substringFromIndex:range.location+range.length];
            //将界面webView 删掉
            [self.webView removeFromSuperview];
            //使用code去换取一个accessToken,解决方案,想服务器发送一个post请求
            NSURL *url = [NSURL URLWithString:@"https://api.weibo.com/oauth2/access_token"];
            //创建一个可变的请求
            NSMutableURLRequest *upRequest = [NSMutableURLRequest requestWithURL:url];
            //设置请求的方式为post
            [upRequest setHTTPMethod:@"POST"];
            //创建session
            NSURLSession *session = [NSURLSession sharedSession];
            //准备上传的数据,将上传的参数拼接成一个字符串
            NSString *dataString = [NSString stringWithFormat:@"client_id=%@&client_secret=%@&grant_type=authorization_code&code=%@&redirect_uri=%@",kAppKey,kAppSecret,code,kRedirect_url];
            //将字符串转化为NSdata
            NSData *upData = [dataString dataUsingEncoding:NSUTF8StringEncoding];
            //创建一个uploadTask
            NSURLSessionUploadTask *upLoadTask = [session uploadTaskWithRequest:upRequest fromData:upData completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
                //NSDATA    转化为NSDictionary
                NSDictionary *resultDic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
                NSLog(@"%@",resultDic);
                //保存access_token,expires_in uid
                NSString *accessToken = [resultDic objectForKey:@"access_token"];
                NSString *expiresIn = [resultDic objectForKey:@"expires_in"];
                NSString *uid = [resultDic objectForKey:@"uid"];
                NSUserDefaults *useDefaults = [NSUserDefaults standardUserDefaults];
                [useDefaults setObject:accessToken forKey:kAccessTokenKey];
                [useDefaults setObject:expiresIn forKey:kExpiresTimeKey];
                [useDefaults setObject:uid forKey:kUserIDKey];
                [useDefaults synchronize];
            }];
            [upLoadTask resume];
            return NO;
        }else{
         return YES;
        }
    }
    
    @end
  • 相关阅读:
    java操作Redis
    Redis安装和基本操作
    IDEA使用教程+JRebel破解
    java环境配置
    qtp10安装步骤(比较完整)
    c++第一章1.6
    软件测试第二章作业
    c++作业22题
    c++第二周阶段小测2
    oracle12c数据库第一周小测验
  • 原文地址:https://www.cnblogs.com/yangqinglong/p/5375212.html
Copyright © 2020-2023  润新知