Android腾讯微博开放平台入门(一)开题与BaseString

21 篇文章 0 订阅
4 篇文章 0 订阅

        2011年,开放元年,各大平台竞相开放,开发者们乐此不彼。但是作为进入开发平台的第一步,授权,却把很多开发者搞得晕头转向。个人学习开放平台从新浪微博入手,因频频不能得手,中途转战腾讯微博,遇到问题就在技术讨论群里发问,奈何大都是新手,且开发语言不一,能帮忙者甚少。功夫不负有心人,就在那仅有的几个的帮助下,加上自己的努力,终于打通了各个环节,成功发布了第一条微博,并且完成了一个简单应用,参与光棍节主题大赛。

        现在个人想把应用移植到新浪微博、网易微博等其他开发平台,于是开始又回到新浪。虽然都是Oauth(此处Oauth表示Oauth1.0,下文及该系列后续文章所述Oauth亦均表示Oauth1.0)授权,但细节上却依然有很多不同。新浪Oauth授权http请求方式为post,个人成功获取了reqeust_token,在以同样的方法获取access_token却未能成功;网易微博开放平台文档提示其Oauth授权http请求方式为get,但个人在实际调试中,却发现用post和get均可获取request_token,但是同样以获取request_token的方法去获取access_token却都不行,至今没弄懂起起其中,所以在此分享腾讯的代码,也是希望其他朋友能够提供新浪和网易等其他平台授权代码,以供大家相互学习。

 

在腾讯微博开放平台,遇到大小问题如下:

1、urlencode:由于对http并不是熟悉,所以一开始并不知道urlencode是什么,后来稍微看懂了一点,就想自己写函数,却不知系统都有现成的函数,晕死。

解:UrlEncode,即将字符串以URL编码。Android中实际采用java.net.URLEncoder类,使用方法如 URLEncoder.encode(<A href="http://www.csdn.net,"UTF-8">http://www.csdn.net,"UTF-8")。

2、baseString:这一点,新浪、网易、腾讯给出的文档还是可以帮助开发者理解的,本身实现也不难,主要即使参数排序和encode处理。但是有时候,开发者们都对此简单的东西不太感兴趣,有时候都懒得去敲键盘,总想找开源代码。个人有点执着就是自己懂的东西都不去用别人的,就硬着头皮写下了。

3、oauth_nonce:应该说一开始也是自己知识的限制,都不知道oauth_nonce的作用,而且还针对其长度新浪和腾讯不一发问,呵呵。其实,oauth_nonce就是一个随机字符串,用于防止重复攻击,长度没有明确的规定,常取32位。

4、signature:签名还是第一次接触,只能看别人的代码了,不过看了也看不出所以然来,就那几句,直接copy了。

5、base64encode:和签名相关的,也没时间去弄,此处均参考网上公开代码。

6、以上基本的东西都准备好了,就开始联网了。使用httpurlconnecton还是httpclient,就看个人习惯了。腾讯给出的sdk采用httpclient,但是版本与andorid本身的httpclient版本不一致,所以需要导入httpclient包,本人嫌包太大(本来主程序代码总共就那么几十K,还要导入个上百K的外部包,感觉就不爽),就没有用。自己搞弄了一些时间,弄出了现在的代码。

7、中文乱码:中途测试可以发送英文字母,中文却乱码。后经高人指点,是因为我的项目是GBK而不是UTF-8,且代码编码有点乱。这只能是我自己的错了。

8、手机联网:WIFI可以直接连接互联网,手机的(E)GPRS必须经过代理。

 

项目源代码:http://download.csdn.net/detail/mrlixirong/3804385

 

BaseString类代码

import java.net.URLEncoder;
import java.util.ArrayList;

/**
 * 
 * @author mrlixirong
 *
 * 2011-11-16
 */
public class BaseString {
	
	String url;//请求网址
	String httpMethod;//请求方式
	ArrayList<String> paramNameList;//参数名列表
	ArrayList<String> paramValueList;//参数值列表
	int[] order;//参数名排序
	
	public BaseString(){
		paramNameList=new ArrayList<String>();
		paramValueList=new ArrayList<String>();
		url=null;
		httpMethod=null;
	}
	
	//设置请求网址
	public void setURL(String url){
		this.url=url;
	}
	
	//设置请求方式
	public void setHttpMethod(String httpMethod){
		this.httpMethod=httpMethod;
	}
	
	//添加参数
	public void addParams(String name,String value){
		paramNameList.add(name);
		paramValueList.add(value);
	}
	
	//获取baseString
	public String getBaseString(){
		StringBuffer sb=new StringBuffer();
		try {
			sb.append(httpMethod);
			sb.append("&");
			sb.append(URLEncoder.encode(url, "UTF-8"));
			sb.append("&");
			order();
			int size=paramNameList.size();
			for(int i=0;i<size;i++){
				sb.append(paramNameList.get(order[i]));
				sb.append("%3D");
				sb.append(URLEncoder.encode(paramValueList.get(order[i]),"UTF-8"));
				if(i<size-1){
					sb.append("%26");
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		return sb.toString();
	}
	
	//根据参数名排序
	void order(){
		int size=paramNameList.size();
		order=new int[size];
		String name1;
		String name2;
		for(int i=0;i<size;i++){
			name1=paramNameList.get(i);
			int k=0;
			for(int j=0;j<size;j++){
				name2=paramNameList.get(j);
				if(name1.compareTo(name2)>0){
					k++;
				}
			}
			order[k]=i;
		}
	}
	
}


 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值