Android腾讯微博开放平台(六)发布一条图文微博

  和之前一样,成功发布一条文字信息搞了N久;现在为了实现发布带图片的微博,又搞了我两个星期(抱歉,低效率,源于一天不过1小时搞这个),今天终于成功了。主要还是自己对HttpClient不太熟悉的缘故导致,这次是参考开放平台的SDK源代码写成的。不过,个人还是用自己写的basestring、签名函数,重要的参考在于HttpPost如何带上文件参数。见代码。


要点1:参数"pic"不加入签名

要点2:由于上传的实体除了文本信息外,还有附件,所以选用MultipartEntity,此处需要

import org.apache.http.entity.mime

由于Andriod本身lib不带这个,所以得自己添加mime库,可以从腾讯开放平台提供的Android SDK里面找到,或者自己百度搜索下载去。


/**发布一张图片*/
	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";
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值