Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android騰訊微博開放平台發布一條圖文微博

Android騰訊微博開放平台發布一條圖文微博

編輯:關於Android編程

 和之前一樣,成功發布一條文字信息搞了N久;現在為了實現發布帶圖片的微博,又搞了我兩個星期(抱歉,低效率,源於一天不過1小時搞這個),今天終於成功了。主要還是自己對HttpClient不太熟悉的緣故導致,這次是參考開放平台的SDK源代碼寫成的。不過,個人還是用自己寫的basestring、簽名函數,重要的參考在於HttpPost如何帶上文件參數。見代碼。

 

要點1:參數"pic"不加入簽名

要點2:由於上傳的實體除了文本信息外,還有附件,所以選用MultipartEntity,此處需要

import org.apache.http.entity.mime

由於Andriod本身lib不帶這個,所以得自己添加mime庫,可以從騰訊開放平台提供的Android SDK裡面找到,或者自己百度搜索下載去。

 


[java] 
/**發布一張圖片*/ 
    public static String SendMessage (Oauth oauth,String content,String clientip,String jing,String wei,String picpath){ 
         
        //System.out.println("sendMessage(圖片)"); 
 
        String url="http://open.t.qq.com/api/t/add_pic"; 
        oauth.oauth_nonce=Utils.getRandomString(32); 
        oauth.oauth_timestamp=String.valueOf(System.currentTimeMillis()/1000); 
         
        BaseString bs=new BaseString(); 
        bs.setHttpMethod("POST"); 
        bs.setURL(url); 
        bs.addParams("oauth_consumer_key", oauth.oauth_consumer_key); 
        bs.addParams("oauth_token", oauth.oauth_token); 
        bs.addParams("oauth_nonce", oauth.oauth_nonce); 
        bs.addParams("oauth_timestamp", oauth.oauth_timestamp); 
        bs.addParams("oauth_signature_method","HMAC-SHA1"); 
        bs.addParams("oauth_version","1.0"); 
         
        bs.addParams("format", "json"); 
        bs.addParams("content", URLEncoder.encode(content)); 
        bs.addParams("longitude", jing);//經緯度是可選參數 
        bs.addParams("latitude", wei); 
        bs.addParams("syncflag", "1"); 
        bs.addParams("clientip", clientip); 
        //bs.addParams("pic", picpath);//注意,pic不用於簽名,所以此處屏蔽掉 
         
        oauth.oauth_signature=Utils.getSignature(bs.getBaseString(),oauth.oauth_consumer_secret+"&"+oauth.oauth_token_secret); 
         
        System.out.println("signature="+oauth.oauth_signature); 
         
        //以上部分,各位朋友看了可能有點暈,這裡有關簽名的方法,可以參考我之前發布的騰訊微博開放平台入門1-5 
        //各位也可自己用其他方法獲取簽名 
         
        try{ 
            HttpPost post=new HttpPost(url); 
            post.getParams().setParameter("http.socket.timeout",new Integer(20000)); 
             
            List<NameValuePair> params = new ArrayList<NameValuePair>();   
            params.add(new BasicNameValuePair("oauth_consumer_key",oauth.oauth_consumer_key));  
            params.add(new BasicNameValuePair("oauth_token",oauth.oauth_token));  
            params.add(new BasicNameValuePair("oauth_version","1.0"));  
            params.add(new BasicNameValuePair("oauth_signature_method","HMAC-SHA1"));  
            params.add(new BasicNameValuePair("oauth_signature",oauth.oauth_signature)); 
            params.add(new BasicNameValuePair("oauth_nonce",oauth.oauth_nonce));  
            params.add(new BasicNameValuePair("oauth_timestamp",oauth.oauth_timestamp));  
             
            params.add(new BasicNameValuePair("format","json"));  
            params.add(new BasicNameValuePair("content",content));  
            params.add(new BasicNameValuePair("longitude",jing));  
            params.add(new BasicNameValuePair("latitude",wei));  
            params.add(new BasicNameValuePair("syncflag", "1"));  
            params.add(new BasicNameValuePair("clientip", clientip));  
            //此處params不添加pic 
 
            MultipartEntity  mEntity=new MultipartEntity();//此處用上了Multipartentity 
            StringBody stringBody; 
            FormBodyPart fbp; 
            //實話識貨,這個for沒看懂,懶得百度去,反正大概就是將params的每個參數轉換後添加到mEntity 
            for (NameValuePair queryParam : params) { 
                stringBody = new StringBody(queryParam.getValue(), Charset.forName("UTF-8")); 
                fbp = new FormBodyPart(queryParam.getName(), stringBody); 
                mEntity.addPart(fbp); 
            } 
             
            //圖片是文件,下面請看清楚了 
            File file=new File(picpath); 
            FileBody fb=new FileBody(file,"image/png", "UTF-8"); 
            fbp = new FormBodyPart("pic", fb); 
            mEntity.addPart(fbp); 
             
            //剩下都是一樣的了 
            post.setEntity(mEntity);     
             
            DefaultHttpClient httpClient=new DefaultHttpClient(); 
            HttpResponse response=httpClient.execute(post); 
            StatusLine sl=response.getStatusLine(); 
            int code = sl.getStatusCode(); 
             
            System.out.println("運行到code="+String.valueOf(code)); 
             
            if(code==200){ 
                String result = EntityUtils.toString(response.getEntity());   
                System.out.println("result="+result); 
                return result; 
            }else{ 
                return "false"; 
            } 
             
        }catch(Exception ex){ 
            return "false"; 
        } 
    } 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved