`
river418
  • 浏览: 26956 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

Android:SNS客户端开发二:获取授权账号资料

阅读更多

      在上一篇文章中,大致介绍了基于新浪微博开放平台的OAuth认证方法及相关实现。那么在用户成功授权,取到相应的AccessToken以及Access_secret后,我们就可以利用这两个值通过新浪提供的对应API,去获取用户资料了。

     这里我们需要用到Http请求相关的内容。获取用户资料是采用的Get方法,此处只放出Get方法的相应代码。使用HttpClient开源项目,该项目已经被Android包含无需单独引入jar包。

    在获取用户资料时。通过Get方法传递的单数都要统一经过UTF-8编码,并且与OAuth认证相关的参数一起签名后再发送到服务器。废话不多说,先看Get方法的代码。

public class WeiBoClient {
	private OAuthConsumer consumer;
	public WeiBoClient() {

	}
	public WeiBoClient(String consumerKey, String consumerSecret,
			String oauthToken, String oauthTokenSecret) {
		// 生成一个OAuthConsumer对象
		consumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret);
		// 设置OAuth_Token和OAuth_Token_Secret
		consumer.setTokenWithSecret(oauthToken, oauthTokenSecret);	
	}

	public String doGet(String url, List<NameValuePair> addtionalParams) throws ClientProtocolException, IOException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException {
		String result = null;
		url = buildUrlByQueryAndBaseUrl(url, addtionalParams);
		String signedUrl = null;
		
			System.out.println("签名之前的URL--->" + url);
			signedUrl = consumer.sign(url);
			System.out.println("签名之后的URL--->" + signedUrl);
		
		HttpGet getRequest = new HttpGet(signedUrl);
		HttpClient httpClient = new DefaultHttpClient();
		HttpResponse response = null;
		
			response = httpClient.execute(getRequest);
		
		result = parseStringFromEntity(response.getEntity());
		return result;
	}
public String buildUrlByQueryAndBaseUrl(String url,List<NameValuePair> pairs){
      String queryStr = URLEncodedUtils.format(pairs, "UTF-8");
      return url + "?" + queryStr;
}
public String parseStringFromEntity(HttpEntity entity){
String result = null;
		try {
			InputStream input = entity.getContent();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					input));
			String line = null;
			StringBuffer sb = new StringBuffer();
			while ((line = reader.readLine()) != null) {
				sb.append(line);
			}
			result = sb.toString();
		} catch (Exception e) {
			System.out.println(e);
		}
		return result;
}
}

 再在外部Activity中调用相应的方法就能获取到账号的资料了

public void getUser(String access_token, String access_secret,
			String user_id) throws ClientProtocolException, OAuthMessageSignerException, OAuthExpectationFailedException, OAuthCommunicationException, IOException {// 添加用户
				List<NameValuePair> params = new ArrayList<NameValuePair>();
		BasicNameValuePair user_id = new BasicNameValuePair("user_id", user_id);
		params.add(user_id);
		WeiBoClient weibo = new WeiBoClient(SinaConstant.CONSUMER_KEY,SinaConstant.CONSUMER_SECRET, access_token, access_secret);
		keyValues.put("user_id", user_id);
		String userInfo;
		
			userInfo = weibo.doGet(
					"http://api.t.sina.com.cn/users/show.json", params);
		
		System.out.println(userInfo);
		JSONObject user = null;
		try {//对获取到资料信息进行JSON解析
			user = new JSONObject(userInfo);
			String headUrl = user.getString("profile_image_url");
			System.out.println(headUrl);

			String screen_name = user.getString("screen_name");
			String name = user.getString("name");
			System.out.println(screen_name + "&&&" + name);

			
		} catch (Exception e) {
			e.printStackTrace();
		}
		// return null;
			}

 以上代码中的user_id为上一篇文章中我们获取到的对应的用户id。传入参数请参考新浪微博开放平台的API文档,地址如下:http://open.weibo.com/wiki/Users/show

 

注:我这里对所有方法的异常处理均为抛出,直到最顶层调用该方法时再捕捉

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics