微博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
时间: 2024-12-17 15:50:07

微博API调用的相关文章

Python调用微博API

上头叫通过微博ID获取用户发布过的历史微博内容,于是研究了下新浪微博提供的API 1 首先在微博开放中心下"创建应用"创建一个应用,应用信息那些随便填,填写完毕后,不需要提交审核,需要的只是那个app-key和app-secret 2 在"微博开放平台"的"管理中心"找到刚才创建的应用,点开这个应用,点开左边"应用信息"栏,会看见"App key"和"App Secret"的字样,这两个

腾讯微博java(android)sdk新增微博api详细介绍

本文主要介绍腾讯微博android sdk中新增微博有关的8个接口,以及使用的示例代码 注意:以下所有的api示例代码都需要先新建QqTSdkService类对象qqTSdkService并初始化,见sdk使用总介绍 1.8个接口介绍 这8个接口包含了腾讯微博两部分api 1.1.微博相关中的发表一条微博.转播一条微博.回复一条微博.发表一条带图片微博.点评一条微博.发表音乐微博.发表视频微博.发表心情帖子.在api中发表一条微博和发表一条带图片微博合二为一. 1.2.私信相关中的发私信api

Facebook Oauth2.0 API调用方法

这些天搞了下Facebook API的东东,在官方网站下弄了一些接口,下面简单的把facebook的调用流程以及常用接口书序一下 :-)  当然在使用facebook api之前要有facebook账号以及在facebook上注册一个自己的应用  1.登录鉴权 https://graph.facebook.com/oauth/authorize?client_id=8888888888888&redirect_uri=http://www.mywebsite.com&scope=user_

PHP实现人人OAuth登录和API调用

人人开放平台给出的PHP SDK,个人感觉写的不怎么样,而且在我的电脑上运行不出来,总是113错误,查文档竟然还没有这个错误码,于是只好自己按照官方给出的文档,用PHP自己实现了一下.代码如下文,没有作封装,只是走了一下流程.如果是仅仅用于人人连接这样的登录验证和简单的API调用,也不是很有必要封装.作为使用人人API的一个PHP示范吧.自己写代码的过程中也参考了官网的SDK代码和DEMO代码. 说明: 1.使用了HttpClient类发起Get和Post请求,文件下载地址http://scri

翻译api调用

<?php function language($value,$from="auto",$to="auto") { $value_code=urlencode($value); #首先对要翻译的文字进行 urlencode 处理 $appid="YourApiKey"; #您注册的API Key $languageurl = "http://openapi.baidu.com/public/2.0/bmt/translate?cl

(转)Sphinx中文分词安装配置及API调用

这几天项目中需要重新做一个关于商品的全文搜索功能,于是想到了用Sphinx,因为需要中文分词,所以选择了Sphinx for chinese,当然你也可以选择coreseek,建议这两个中选择一个,暂时不要选择原版Sphinx(对中文的支持不是很好).又因为服务器所用 MySQL在当时编译时并没有编译Sphinx扩展,而重新编译MySQL并加入Sphinx暂时又无法实现(项目用到了多台服务器,在不影响现有业务的 情况下不可能去重新编译MySQL的),所以采用的是程序通过API来外部调用Sphin

Hbase java API 调用详解

Hbase java API 调用 一. hbase的安装 参考:http://blog.csdn.net/mapengbo521521/article/details/41777721 二.hbase访问方式 Native java api:最常规最高效的访问方式. Hbase shell:hbase的命令行工具,最简单的接口,适合管理员使用 Thrift gateway:利用thrift序列化结束支持各种语言,适合异构系统在线访问 Rest gateway:支持rest风格的http api

spark2.x由浅入深深到底系列六之RDD java api调用scala api的原理

RDD java api其实底层是调用了scala的api来实现的,所以我们有必要对java api是怎么样去调用scala api,我们先自己简单的实现一个scala版本和java版本的RDD和SparkContext 一.简单实现scala版本的RDD和SparkContext class RDD[T](value: Seq[T]) {   //RDD的map操作   def map[U](f: T => U): RDD[U] = {     new RDD(value.map(f))   

VC++中用API调用对话框资源

关键技术: 对于资源的载入须要几个API函数,以下分别介绍这几个API函数. a) FindResource 用来在一个指定的模块中定位所指的资源,语法例如以下: HRSRC FindResource(HMODULE hModule, LPCRSTR lpName, LPCTSTR lpType); 參数说明: (1)hModule: 包括所须要的资料的模块句柄.假设是程序本身,则能够设置为NULL; (2)lpName: 能够使资源名称或者资源ID. (3)lpType:资源类型.在这里也就是