网站调用新浪微博内容(新浪微博的开发api,公示如下公示)
优采云 发布时间: 2021-12-19 06:15网站调用新浪微博内容(新浪微博的开发api,公示如下公示)
注:本文代码无效,请勿模仿,其他方法请参考scribe方法
最近在研究新浪微博的开发api,尝试在一些客户端应用中调用相应的api来发送新浪微博。经过一番尝试,终于成功了。几个关键点和相应的demo发布如下,供大家理解。
在本文中,我主要演示如何通过用户名/密码连接到新浪微博,然后读取最新的微博信息,最后演示如何发送一个简单的微博,其他可以通过相应的微博api进行处理,有这里没有仔细深入。
首先要申请开发者授权,也就是要在新浪上申请。直接通过地址:用微博登录后,创建一个应用程序即可。创建应用的目的是获取对应的app Key和app Secret。app key会用到后面的主要API中,方便新浪追踪请求的来源。具体流程请自行google。
应用完成后,我们将开始我们的api之旅。在本文中,我们没有使用官方的java sdk,因为主要目的是一个简单的演示。如果是应用开发,还是可以下载对应的java sdk应用。查看示例以了解如何拨打电话。
本文使用httpclient。如果使用maven,可以使用groupId作为commons-httpclient,使用artifactId作为commons-httpclient,将其导入到项目中。其次,为了方便对返回数据的分析,使用了一个JSON组件(fastjson)来解析json字符串。
获取应用授权,即允许应用访问用户的相应信息(用户名、密码除外)
由于新浪使用的是auth2.0,所以整个登录过程分为两部分。一部分是登录授权,它允许我们的应用访问指定用户的相应信息。这里的信息不包括用户名和密码。. 在类网页应用中,即通过弹出新浪登录框,用户输入用户名和密码,授权应用使用。新浪通过验证后,会返回到我们的应用所在的主界面。第二部分是获取对应的token,相当于用户会话,以便在后续操作中可以使用这个token进行数据访问。
申请授权地址为:,完整代码如下:
PostMethod postMethod = new PostMethod("https://api.weibo.com/oauth2/authorize");
postMethod.addParameter("client_id", props.getProperty("client_ID")); //a*敏*感*词*ey
postMethod.addParameter("redirect_uri", props.getProperty("redirect_URI")); //oauth2 回调地址
postMethod.addParameter("response_type", "code");//请求code信息
postMethod.addParameter("action", "submit");//表示授权访问
postMethod.addParameter("userId", "xxxx"); //微博帐号
postMethod.addParameter("passwd", "xxxx"); //帐号密码
client.executeMethod(postMethod);
String url = postMethod.getResponseHeader("location").getValue();//取得重定向的地址信息
/** 以下为获取新浪返回的code信息 */
String params = url.substring(url.lastIndexOf("?") + 1);
Map p = parseQueryString(params);
String code = p.get("code")[0];
//取得code数据
System.out.println("code->" + code);
获取 access_token
API参考接口:
整个代码如下:
PostMethod tokenMethod = new PostMethod("https://api.weibo.com/oauth2/access_token");
tokenMethod.addParameter("client_id", props.getProperty("client_ID")); //a*敏*感*词*ey
tokenMethod.addParameter("client_secret", props.getProperty("client_SERCRET")); //appsecret
tokenMethod.addParameter("grant_type", "authorization_code");
tokenMethod.addParameter("code", code); //上一步骤拿到的code
tokenMethod.addParameter("redirect_uri", props.getProperty("redirect_URI")); //回调地址
client.executeMethod(tokenMethod);
String result = tokenMethod.getResponseBodyAsString();
JSONObject jsonObject = JSON.parseObject(result);
String access_token = jsonObject.getString("access_token");//获取到的access_token
System.out.println("access_token-->" + access_token);
获取最新微博信息列表
API参考接口:
代码显示如下:
发送微博消息
api参考:
代码显示如下:
PostMethod newMethod = new PostMethod("https://api.weibo.com/2/statuses/update.json");
newMethod.addParameter("access_token", access_token);
newMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "utf-8");//解决乱码问题,避免传输中文时微博上显示乱码
newMethod.addParameter("status", "使用java发新浪weibo test234563");
client.executeMethod(newMethod);
result = newMethod.getResponseBodyAsString();
jsonObject = JSON.parseObject(result);
System.out.println("newM->" + jsonObject);
综上所述
其实整个过程还是很简单的。最重要的是前两步登录和获取授权。这两步就完成了,后面都是json请求,然后传参数,拿到结果,再处理结果的问题。.
值得注意的是,在获取access_token的第二步中,官方文档中写到可以通过grant_type=password获取token信息,即输入用户名和密码。但是这种方式需要特殊的申请,具体的申请步骤比较复杂,必须经过官方审核,非一般开发者也能做好。所以这里就不用这个了(当然,如果你用这个方法,可以将第一步和第二步合并成一)。