鉴于很多网友都说发表腾讯微博的时候出现鉴权的情况,整理了一下已经开发过的微博代码,奉献出来,希望可以帮助到有需要的网友。至于需要认证和鉴权的代码我已经打包jar包了,大家可以直接使用。原理就是根据腾讯微博平台的开发api写成的,网上搜索一下应该很多。
发表带文字的微博方法如下,首先声明要鉴权类:
- Java 代码复制内容到剪贴板
- private OAuth oauth = new OAuth();
其中OAuth提供了两个主要方法,主要是httpGet(String url, String params),和httpPost(String url, String params),其中params参数是经过拼接而得到的,可以直接调用OAuth中
调用发微博的方法:
- Java 代码复制内容到剪贴板
- /**
- * 发送一条文字微博
- * @param userToken
- * @param userTokenScret
- * @param consmerKey
- * @param consmerScret
- * @param status
- * @return
- */
- public boolean updateStatus(String userToken, String userTokenScret,
- String consmerKey, String consmerScret, String status) {
- String url = "http://open.t...i/t/add";
- List<Parameter> params = new ArrayList<Parameter>();
- try {
- params.add(new Parameter("format", "json"));
- params.add(new Parameter("content", URLEncoder.encode(status,
- "UTF-8")));
- params.add(new Parameter("clientip", "127.0.0.1"));
- String parameter = oauth.getPostParameter("POST", url, userToken,
- userTokenScret, consmerKey, consmerScret, params);
- url += "?" + parameter;
- String response = oauth.httpPost(url, parameter);
- JSONObject data = new JSONObject(response);
- if (data.getString("msg").equals("ok")
- || data.getJSONObject("data").getString("id") != null) {
- return true;
- } else {
- return false;
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
发表带图片的文字微博方法如下:
- Java 代码复制内容到剪贴板
- /**
- * 发表带图片的微博
- * @param userToken
- * @param userTokenScret
- * @param consmerKey
- * @param consmerScret
- * @param status
- * @param file
- * @return
- */
- public boolean uploadStatus(String userToken, String userTokenScret,
- String consmerKey, String consmerScret, String status, File file) {
- String url = "http://open.t...add_pic";
- List<Parameter> params = new ArrayList<Parameter>();
- try {
- params.add(new Parameter("format", "json"));
- params.add(new Parameter("content", URLEncoder.encode(status, "UTF-8")));
- params.add(new Parameter("clientip", "127.0.0.1"));
- String parameter = oauth.getPostParameter("POST", url, userToken, userTokenScret, consmerKey, consmerScret, params);
- url += "?" + parameter;
- HttpClient httpClient = new HttpClient();
- PostMethod httpPost = new PostMethod(url);
- List<Parameter> listParams = SignatureUtil.getQueryParameters(parameter);
- int length = listParams.size() + 1;
- Part[] parts = new Part[length];
- int i = 0;
- for(Parameter p : listParams) {
- parts[i++] = new StringPart(p.getName(), SignatureUtil.decode(p.getValue()), "UTF-8");
- }
- parts[i++] = new FilePart("pic", file.getName(), file, null, "UTF-8");
- httpPost.setRequestEntity(new MultipartRequestEntity(parts, httpPost.getParams()));
- int statusCode = httpClient.executeMethod(httpPost);
- if (statusCode == HttpStatus.SC_OK) {
- String response = httpPost.getResponseBodyAsString();
- JSONObject data = new JSONObject(response);
- if (data.getString("msg").equals("ok") || data.getJSONObject("data").getString("id") != null) {
- return true;
- } else {
- return false;
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return false;
- }
使用方法只要导入下面的jar包即可。
顺便说以一下,OAuth中的httpGet(String url, String params)主要用来获取相关微博的信息,比如 获取当前登录用户及其所关注用户的最新微博消息,其他地方方法类似。
- Java 代码复制内容到剪贴板
- /**
- * 获取当前登录用户及其所关注用户的最新微博消息。
- * @param url
- * @param page
- * @param count
- * @param userToken
- * @param userTokenScret
- * @param consmerKey
- * @param consmerScret
- */
- public void getFriendTimeLines(String url, int page, int count, String userToken, String userTokenScret,
- String consmerKey, String consmerScret) {
- List<Parameter> params = new ArrayList<Parameter>();
- params.add(new Parameter("Reqnum", String.valueOf(count)));
- params.add(new Parameter("type", String.valueOf(0)));
- params.add(new Parameter("Pageflag", String.valueOf(page - 1)));
- params.add(new Parameter("format", "json"));
- String parameter;
- try {
- parameter = oauth.getPostParameter("GET", url, userToken,
- userTokenScret, consmerKey, consmerScret, params);
- String content = oauth.httpGet(url, parameter);
- //把返回的内容转会成JSON格式
- JSONObject data = new JSONObject(content);
- //....
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
下载文件 (已下载 162 次)
本文转自06peng 51CTO博客,原文链接:http://blog.51cto.com/06peng/962557,如需转载请自行联系原作者