新浪微博API现在运用比较广泛,做一个完整的开发流程Demo
1、第一步注册,就不多说了,注册帐号以及成为开发者帐号,这步操作不会的话请你马上砸掉电脑拔掉网线回家种田。
2、第二步创建应用,开发者帐号创建好了,打开新浪微博开发平台: http://open.weibo.com
上面菜单栏点击最后一个 管理中心
如果是web的应用的话选择创建网站接入的应用,然后根据新浪微博的要求balabalabala自己去搞定
应用创建完毕。点击应用跳转页面,点击查看应用参数,可以看到应用的相关参数,这些参数将会在第四步用到。
3、第三步下载sdk,回到顶部的菜单栏,点击 文档 ,再点击左边菜单栏sdk,选择java sdk,然后balabala下载,这步操作有问题也请回家种田。
所谓的sdk并非是sdk(个人觉得名称有点误导),而是一个可运行的工程,下载完毕之后解压 ,并导入到eclipse,可以看到两个目录 src和example
src是新浪微博的部分
example是实例,接口的demo
4、第四步配置参数,找到src目录下的config.properties
前三个参数需要自己配置 为第二步里说过的应用参数里的参数
后面的都是默认的不需要改
前三个参数配置如下
client_ID为App Key
client_SERCRET为App Secret
redirect_URI为 OAuth2.0授权的回调URL 应用信息>高级信息>OAuth2.0 授权设置下面的授权回调页 这是一个你自己填写的URL 指向的是你自己服务器 当然在开发阶段我们可以使用任何URL 只要能够让我们了解OAuth授权的流程就好了 这里我们就输入一个http://www.baidu.com 取消授权回调页也是如此 注意这里的URL的字符串必须是一致
5、第五步获取AccessToken,正常情况下AccessToken的获取是需要通过OAuth2.0认证的,但是为了更简单我先说一种简单的方法。后面再讲OAuth2.0
还是选择最上面的菜单栏 文档>API>API测试工具
选择创建的应用 点击获取AccessToken 下面的文本框里就是我们要的AccessToken
6、第六步先做一个接口实例
去微博API里随便找一个已有权限的接口,
我随便找了一个 获取用户发布的微博 statuses/user_timeline 做测试用的
点击这个接口查看这个接口详情,可以查看到接口的每个传入参数以及返回参数 这个无需多说。
不使用任何SDK实现Oauth授权并实现简单的发布微博功能:
创建一个Java项目,编写如下代码,具体过程代码中已写的很清楚,这里不再做解释:
注意先修改应用ID、应用密码和回调页面成你自己的!访问授权页面:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
package com;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import java.util.Scanner;
import javax.net.ssl.X509TrustManager;
/**
* @author 刘显安
* 不使用任何SDK实现新浪微博Oauth授权并实现发微薄小Demo
* 日期:2012年11月11日
*/
public class Test
{
static String clientId= "2355065950" ; //你的应用ID
static String clientSecret= "72037e76bee00315691d9c30dd8a386a" ; //你的应用密码
static String redirectUri= "https://api.weibo.com/oauth2/default.html" ;//你在应用管理中心设置的回调页面
public static void main(String[] args) throws Exception
{
testHttps(); //测试
//第一步:访问授权页面获取授权
System.out.println( "请打开你的浏览器,访问以下页面,登录你的微博账号并授权:" );
System.out.println( "https://api.weibo.com/oauth2/authorize?client_id=" +clientId+ "&response_type=code&redirect_uri=" +redirectUri+ "&forcelogin=true" );
//第二步:获取AccessToken
System.out.println( "请将授权成功后的页面地址栏中的参数code:" );
String code= new Scanner(System.in).next();
getAccessToken(code);
//第三步:发布一条微博
System.out.println( "请输入上面返回的值中accessToken的值:" );
String accessToken= new Scanner(System.in).next();
updateStatus( "发布微博测试!来自WeiboDemo!" , accessToken);
}
/**
* 测试能否正常访问HTTPS打头的网站,
*/
public static void testHttps()
{
try
{
trustAllHttpsCertificates(); //设置信任所有的http证书
URL url= new URL( "https://api.weibo.com/oauth2/default.html" );
URLConnection con=url.openConnection();
con.getInputStream();
System.out.println( "恭喜,访问HTTPS打头的网站正常!" );
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 以Post方式访问一个URL
* @param url 要访问的URL
* @param parameters URL后面“?”后面跟着的参数
*/
public static void postUrl(String url,String parameters)
{
try
{
trustAllHttpsCertificates(); //设置信任所有的http证书
URLConnection conn = new URL(url).openConnection();
conn.setDoOutput( true ); // 这里是关键,表示我们要向链接里注入的参数
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); // 获得连接输出流
out.write(parameters);
out.flush();
out.close();
// 到这里已经完成了,开始打印返回的HTML代码
BufferedReader reader = new BufferedReader( new InputStreamReader(conn.getInputStream()));
String line = null ;
while ((line = reader.readLine()) != null )
{
System.out.println(line);
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
/**
* 获取AccessToken
* @param code 在授权页面返回的Code
*/
public static void getAccessToken(String code)
{
String url= "https://api.weibo.com/oauth2/access_token" ;
String parameters= "client_id=" +clientId+ "&client_secret=" +clientSecret+
"&grant_type=authorization_code" + "&redirect_uri=" +redirectUri+ "&code=" +code;
postUrl(url, parameters);
}
/**
* 利用刚获取的AccessToken发布一条微博
* @param text 要发布的微博内容
* @param accessToken 刚获取的AccessToken
*/
public static void updateStatus(String text,String accessToken)
{
String url= "https://api.weibo.com/2/statuses/update.json" ;
String parameters= "status=" +text+ "&access_token=" +accessToken;
postUrl(url, parameters);
System.out.println( "发布微博成功!" );
}
/**
* 设置信任所有的http证书(正常情况下访问https打头的网站会出现证书不信任相关错误,所以必须在访问前调用此方法)
* @throws Exception
*/
private static void trustAllHttpsCertificates() throws Exception
{
javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[ 1 ];
trustAllCerts[ 0 ] = new X509TrustManager()
{
@Override
public X509Certificate[] getAcceptedIssuers()
{
return null ;
}
@Override
public void checkServerTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException
{}
@Override
public void checkClientTrusted(X509Certificate[] arg0, String arg1)
throws CertificateException
{}
};
javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext.getInstance( "SSL" );
sc.init( null , trustAllCerts, null );
javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
}
}
|
访问授权页面:
授权成功:
发布微博成功:
控制台输出结果: