鉴于很多网友都说发表腾讯微博的时候出现鉴权的情况,整理了一下已经开发过的微博代码,奉献出来,希望可以帮助到有需要的网友。至于需要认证和鉴权的代码我已经打包jar包了,大家可以直接使用。原理就是根据腾讯微博平台的开发api写成的,网上搜索一下应该很多。

发表带文字的微博方法如下,首先声明要鉴权类:

  1. Java 代码复制内容到剪贴板  
  2.       
  3. private OAuth oauth = new OAuth();    

其中OAuth提供了两个主要方法,主要是httpGet(String url, String params),和httpPost(String url, String params),其中params参数是经过拼接而得到的,可以直接调用OAuth中

调用发微博的方法:

 

  1. Java 代码复制内容到剪贴板  
  2.       
  3. /**       
  4.      * 发送一条文字微博       
  5.      * @param userToken       
  6.      * @param userTokenScret       
  7.      * @param consmerKey       
  8.      * @param consmerScret       
  9.      * @param status       
  10.      * @return       
  11.      */        
  12.     public boolean updateStatus(String userToken, String userTokenScret,        
  13.             String consmerKey, String consmerScret, String status) {        
  14.         String url = "http://open.t...i/t/add";        
  15.         List<Parameter> params = new ArrayList<Parameter>();        
  16.         try {        
  17.             params.add(new Parameter("format""json"));        
  18.             params.add(new Parameter("content", URLEncoder.encode(status,        
  19.                     "UTF-8")));        
  20.             params.add(new Parameter("clientip""127.0.0.1"));        
  21.             String parameter = oauth.getPostParameter("POST", url, userToken,        
  22.                     userTokenScret, consmerKey, consmerScret, params);        
  23.             url += "?" + parameter;        
  24.             String response = oauth.httpPost(url, parameter);        
  25.             JSONObject data = new JSONObject(response);        
  26.             if (data.getString("msg").equals("ok")        
  27.                     || data.getJSONObject("data").getString("id") != null) {        
  28.                 return true;        
  29.             } else {        
  30.                 return false;        
  31.             }        
  32.         } catch (Exception e) {        
  33.             e.printStackTrace();        
  34.         }        
  35.         return false;        
  36.     }    

发表带图片的文字微博方法如下:

 

  1. Java 代码复制内容到剪贴板  
  2.       
  3. /**       
  4.      * 发表带图片的微博       
  5.      * @param userToken       
  6.      * @param userTokenScret       
  7.      * @param consmerKey       
  8.      * @param consmerScret       
  9.      * @param status       
  10.      * @param file       
  11.      * @return       
  12.      */        
  13.     public boolean uploadStatus(String userToken, String userTokenScret,        
  14.             String consmerKey, String consmerScret, String status, File file) {        
  15.         String url = "http://open.t...add_pic";        
  16.         List<Parameter> params = new ArrayList<Parameter>();        
  17.         try {        
  18.             params.add(new Parameter("format""json"));        
  19.             params.add(new Parameter("content", URLEncoder.encode(status, "UTF-8")));        
  20.             params.add(new Parameter("clientip""127.0.0.1"));        
  21.             String parameter = oauth.getPostParameter("POST", url, userToken, userTokenScret, consmerKey, consmerScret, params);        
  22.             url += "?" + parameter;        
  23.             HttpClient httpClient = new HttpClient();        
  24.             PostMethod httpPost = new PostMethod(url);        
  25.             List<Parameter> listParams = SignatureUtil.getQueryParameters(parameter);        
  26.             int length = listParams.size() + 1;        
  27.             Part[] parts = new Part[length];        
  28.             int i = 0;        
  29.             for(Parameter p : listParams) {        
  30.                 parts[i++] = new StringPart(p.getName(), SignatureUtil.decode(p.getValue()), "UTF-8");        
  31.             }        
  32.             parts[i++] = new FilePart("pic", file.getName(), file, null"UTF-8");        
  33.             httpPost.setRequestEntity(new MultipartRequestEntity(parts, httpPost.getParams()));        
  34.             int statusCode = httpClient.executeMethod(httpPost);        
  35.             if (statusCode == HttpStatus.SC_OK) {        
  36.                 String response = httpPost.getResponseBodyAsString();        
  37.                 JSONObject data = new JSONObject(response);        
  38.                 if (data.getString("msg").equals("ok") || data.getJSONObject("data").getString("id") != null) {        
  39.                     return true;        
  40.                 } else {        
  41.                     return false;        
  42.                 }        
  43.             }         
  44.         } catch (Exception e) {        
  45.             e.printStackTrace();        
  46.         }        
  47.         return false;        
  48.     }    

使用方法只要导入下面的jar包即可。

顺便说以一下,OAuth中的httpGet(String url, String params)主要用来获取相关微博的信息,比如 获取当前登录用户及其所关注用户的最新微博消息,其他地方方法类似。

 

  1. Java 代码复制内容到剪贴板  
  2.       
  3. /**       
  4.      * 获取当前登录用户及其所关注用户的最新微博消息。       
  5.      * @param url       
  6.      * @param page       
  7.      * @param count       
  8.      * @param userToken       
  9.      * @param userTokenScret       
  10.      * @param consmerKey       
  11.      * @param consmerScret       
  12.      */        
  13.     public void getFriendTimeLines(String url, int page, int count, String userToken, String userTokenScret,        
  14.             String consmerKey, String consmerScret) {        
  15.         List<Parameter> params = new ArrayList<Parameter>();        
  16.         params.add(new Parameter("Reqnum", String.valueOf(count)));        
  17.         params.add(new Parameter("type", String.valueOf(0)));        
  18.         params.add(new Parameter("Pageflag", String.valueOf(page - 1)));        
  19.         params.add(new Parameter("format""json"));        
  20.         String parameter;        
  21.         try {        
  22.             parameter = oauth.getPostParameter("GET", url, userToken,        
  23.                     userTokenScret, consmerKey, consmerScret, params);        
  24.             String content = oauth.httpGet(url, parameter);        
  25.             //把返回的内容转会成JSON格式        
  26.             JSONObject data = new JSONObject(content);        
  27.             //....        
  28.         } catch (Exception e) {        
  29.             e.printStackTrace();        
  30.         }        
  31.     }    

下载文件 (已下载 162 次)