使用新浪微博开放平台api同步微博内容至自己网站(微博开放平台开发记录方便查用(图)名词介绍)
优采云 发布时间: 2021-09-28 19:30使用新浪微博开放平台api同步微博内容至自己网站(微博开放平台开发记录方便查用(图)名词介绍)
因为工作需要,接触了微博开放平台的开发。本记录是为方便查阅和使用而特制的。
一、准备。
1. 微博账号。注册很容易。
2.微博账号成为开发者。
登录微博开放平台登录您的注册账号,然后进入管理中心完成开发者基本信息和身份认证。
这时候还需要浏览微博开放平台的文档,了解这个开放平台的一些规范术语。
单击每个链接进行查看。顺便看一下微博API文档,里面有介绍,有些接口调用需要获取access_token。这篇文章就是为了达到这个目的。
二、创建一个应用程序。
比如我们要开发一个网站,然后在这个网站中连接微博开放平台,调用开放平台的接口。然后我们需要在登录微博开放平台后创建一个应用。
创建应用程序后,您将获得应用程序的 App key 和 AppSecret。然后我们就是利用这个信息调用新浪微博的auth2.0认证获取access_token。
拿到access_token后,我们就可以调用我们需要的接口了,比如发微博等。
1. 创建引用的地方。开放平台--》点击上方导航菜单中的“微链接”,这里的微链接的概念也是这个开放平台的一个术语,具体含义可以查看相关文档。
2.创建什么类型的应用程序?
随意看看你的情况。测试时,您可以创建任何东西,尝试并充满信心地去做。我创建的是一个网页引用,所以我发现它很容易输入,不需要填写太多信息。
如下所示:
创建完成后,可以在我的应用中看到:
单击以查看与应用程序相关的信息。一会儿我们需要用到这里的app key和app secret,还需要配置应用授权回调地址。
三、下载微博开发SDK。
开发SDK中有一些示例,可以直接作为参考。下载链接。我下载了Java版的weibo4j。下载后,我导入了开发工具。如下所示:
代码很多,不要慌,先在examples包下的oauth2包下找到OAuth4Code类。我们需要运行这个类。
这个类完成oauth操作,这一步包括两个请求
第一次:
https://api.weibo.com/oauth2/authorize?client_id=1234567890&redirect_uri=https://api.weibo.com/oauth2/default.html&response_type=code
第二次:
https://api.weibo.com/oauth2/access_token
请注意,第一个请求中有一个 client_id。这个参数需要在config.properties中配置,对应我们上面创建的应用的app key。
同样,这个配置文件中有一个client_SERCRET,对应我们上面创建的应用的app sercret,复制进去。
还有一个参数redirect_uri,比较关键。当我们运行OAuth4Code类时,第一次请求完成后,会回调这个地址,同时带入一个code参数。
我们需要复制这个参数,在控制台中输入,然后回车。发起第二个请求,这个请求会返回我们需要的access_token。那么问题来了,如何配置这个地址呢?
1. 在上面创建的参考中,找到接口管理--》授权机制也没有配置回调地址的地方,填写即可。
2. 上面的链接应该在config.properties中配置,如下:
client_ID = 1234567890
client_SERCRET = 890a2ab550cf8d7a0090ff2f19850f3a
redirect_URI = https\://api.weibo.com/oauth2/default.html
baseURL=https://api.weibo.com/2/
accessTokenURL=https://api.weibo.com/oauth2/access_token
authorizeURL=https://api.weibo.com/oauth2/authorize
rmURL=https\://rm.api.weibo.com/2/
三、 运行程序获取access_token。
上面第二步完成后,配置就完成了。运行以下类:
public class OAuth4Code {
public static void main(String [] args) throws WeiboException, IOException{
Oauth oauth = new Oauth();
BareBonesBrowserLaunch.openURL(oauth.authorize("code"));
System.out.println(oauth.authorize("code"));
System.out.print("Hit enter when it's done.[Enter]:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String code = br.readLine();
Log.logInfo("code: " + code);
try{
System.out.println(oauth.getAccessTokenByCode(code));
} catch (WeiboException e) {
if(401 == e.getStatusCode()){
Log.logInfo("Unable to get the access token.");
}else{
e.printStackTrace();
}
}
}
}
程序运行后,在控制台输入一行log后,进入等待控制台输入的状态,浏览器立即打开了一个页面,跳转后页面变成了如下:
复制浏览器地址栏中的code参数值。回到myeclipse,粘贴这个值,然后回车。程序继续执行,使用这个code参数,再次发起请求,终于成功后就可以拿到access_token了
整个过程的效果日志:
四、本例中oauth授权流程总结。
两次请求
第一次:
https://api.weibo.com/oauth2/authorize?client_id=123050457758183&redirect_uri=http://www.example.com/response&response_type=code
同意授权后,会重定向:
//同意授权后会重定向
http://www.example.com/response&code=CODE
第二次:
按照上面的代码再次发起请求。获取 access_token
会有一些问题,主要原因是授权地址配置不正确。根据本文中的示例配置,您可以成功运行程序。获取 access_token。
错误代码如下:
错误代码(error) 错误代码(error_code) 错误描述(error_description)
redirect_uri_mismatch
21322
重定向地址不匹配
无效请求
21323
请求是非法的
invalid_client
21324
client_id 或 client_secret 参数无效
invalid_grant
21325
提供的访问授权无效、已过期或已撤销
未经授权的客户端
21326
客户端没有权限
expired_token
21327
令牌过期
unsupported_grant_type
21328
不支持的 GrantType
unsupported_response_type
21329
不支持的响应类型
拒绝访问
21330
用户或授权服务器拒绝授予数据访问权限
暂时不可用
21331
该服务暂时不可用
a*敏*感*词*ey权限被拒绝
21337
应用权限不足
全文参考: