当前位置:操作系统 > 安卓/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); 
           &

补充:移动开发 , Android ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,