package com.qq.open.weibo;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
import com.qq.open.common.OpenQqConstants;
import com.qq.open.common.OpenQqUtils;
import com.qq.open.common.json.JSONArray;
import com.qq.open.common.json.JSONException;
import com.qq.open.common.json.JSONObject;
import com.qq.open.weibo.bean.param.WeiBoGetInfoParamBean;
import com.qq.open.weibo.bean.result.WeiBoEduResultBean;
import com.qq.open.weibo.bean.result.WeiBoGetInfoResultBean;
import com.qq.open.weibo.bean.result.WeiBoTagResultBean;
/**
* 获取腾讯微博登录用户的用户资料
*
* @author HaoLiang
*
*/
public class WeiBoGetInfo {
/** QQ互联工具类 */
private OpenQqUtils oqu = new OpenQqUtils();
/** 日志 */
private Logger log = Logger.getLogger(WeiBoGetInfo.class);
/**
* 获取登陆用户资料
*
* @param paramBean 参数
* @return 接口返回数据
* @throws JSONException
* @throws IOException
*/
public WeiBoGetInfoResultBean getInfo(WeiBoGetInfoParamBean paramBean) throws IOException, JSONException {
// 日志
log.info("获取登陆用户的微博资料 开始...");
// 获取接口URL
String interfaceUrl = this.getIngerfaceUrl(paramBean);
// 请求接口,接收接口返回的json数据
String jsonData = oqu.doGet(interfaceUrl);
// 微博资料
WeiBoGetInfoResultBean resultBean = null;
try {
resultBean = this.jsonToBean(jsonData);
} catch (JSONException e) {
e.printStackTrace();
// 日志
log.error("getInfo 异常,json数据是:" + jsonData);
throw e;
}
// 日志
log.info("获取登陆用户的微博资料 结束...");
return resultBean;
}
/**
* 获取登陆用接口地址
*
* @param paramBean 参数
* @return 接口地址
*/
private String getIngerfaceUrl(WeiBoGetInfoParamBean paramBean) {
// 接口URL
StringBuilder interfaceUrl = new StringBuilder();
// 获取登录用户收听的人的列表 接口URL
interfaceUrl.append(OpenQqConstants.WEIBO_GET_INFO_URL);
// AccessToken
interfaceUrl.append("?access_token=" + paramBean.getAccessToken());
// AppId
interfaceUrl.append("&oauth_consumer_key=" + oqu.getConfigValue("qq.appid"));
// OpenId
interfaceUrl.append("&openid=" + paramBean.getOpenId());
// 定义API返回的数据格式。
interfaceUrl.append("&format=json");
return interfaceUrl.toString();
}
/**
* 把接口返回的json数据转换成JavaBean
*
* @param jsonData 接口返回的数据
* @return JavaBean数据
* @throws JSONException
*/
private WeiBoGetInfoResultBean jsonToBean(String jsonData) throws JSONException {
WeiBoGetInfoResultBean resultBean = new WeiBoGetInfoResultBean();
// 格式化json数据
JSONObject jsonObjRoot = new JSONObject(jsonData);
// 接口返回出错的场合
if (jsonObjRoot.getInt("ret") != 0) {
// 设置错误标识
resultBean.setErrorFlg(true);
// 错误编号
resultBean.setErrorCode(jsonObjRoot.get("errcode").toString());
// 错误信息
resultBean.setErrorMes(jsonObjRoot.getString("msg"));
} else {
// 他用户详细信息
JSONObject jsonDataObj = new JSONObject(jsonObjRoot.getJSONObject("data").toString());
// 其他用户的帐号名
resultBean.setName(jsonDataObj.getString("name"));
// 其他用户的唯一ID
resultBean.setOpenId(jsonDataObj.getString("openid"));
// 其他用户昵称
resultBean.setNick(jsonDataObj.getString("nick"));
// 其他用户头像url
resultBean.setHead(jsonDataObj.getString("head"));
// 其他用户所在地
resultBean.setLocation(jsonDataObj.getString("location"));
// 其他用户是否为微博认证用户
resultBean.setIsvip(jsonDataObj.get("isvip").toString());
// 其他用户是否为企业机构
resultBean.setIsent(jsonDataObj.get("isent").toString());
// 其他用户的个人介绍
resultBean.setIntroduction(jsonDataObj.getString("introduction"));
// 认证信息
resultBean.setVerifyInfo(jsonDataObj.getString("verifyinfo"));
// 其他用户出生年
resultBean.setBirthYear(jsonDataObj.get("birth_year").toString());
// 其他用户出生月份
resultBean.setBirthMonth(jsonDataObj.get("birth_month").toString());
// 其他用户出生日
resultBean.setBirthDay(jsonDataObj.get("birth_day").toString());
// 其他用户所在的国家代码
resultBean.setCountryCode(jsonDataObj.get("country_code").toString());
// 其他用户所在的省代码
resultBean.setProvinceCode(jsonDataObj.get("province_code").toString());
// 其他用户所在的城市代码
resultBean.setCityCode(jsonDataObj.get("city_code").toString());
// 其他用户性别
resultBean.setSex(jsonDataObj.get("sex").toString());
// 其他用户听众数
resultBean.setFansNum(jsonDataObj.get("fansnum").toString());
// 其他用户收听的人数
resultBean.setIdolNum(jsonDataObj.get("idolnum").toString());
// 其他用户发表的微博数
resultBean.setTweetNum(jsonDataObj.get("tweetnum").toString());
// 用户注册的邮箱
resultBean.setEmail(jsonDataObj.getString("email"));
if (!"null".equals(jsonDataObj.get("tag").toString())) {
// 听众标签集合
List<WeiBoTagResultBean> tagsList = new ArrayList<WeiBoTagResultBean>();
// 听众标签
JSONArray tagsArray = jsonDataObj.getJSONArray("tag");
for (int j = 0; j < tagsArray.length(); j++) {
WeiBoTagResultBean tagsBean = new WeiBoTagResultBean();
// 听众标签
JSONObject tagsObject = new JSONObject(tagsArray.get(j).toString());
// 标签ID
tagsBean.setId(tagsObject.getString("id"));
// 标签名
tagsBean.setName(tagsObject.getString("name"));
tagsList.add(tagsBean);
}
resultBean.setTagsList(tagsList);
}
if (!"null".equals(jsonDataObj.get("edu").toString())) {
List<WeiBoEduResultBean> edusList = new ArrayList<WeiBoEduResultBean>();
// 听众标签
JSONArray edusArray = jsonDataObj.getJSONArray("edu");
for (int j = 0; j < edusArray.length(); j++) {
WeiBoEduResultBean edusBean = new WeiBoEduResultBean();
// 听众标签
JSONObject edusObject = new JSONObject(edusArray.get(j).toString());
// 教育信息记录ID
edusBean.setId(edusObject.get("id").toString());
// 入学年
edusBean.setYear(edusObject.get("year").toString());
// 学校ID
edusBean.setSchoolId(edusObject.get("schoolid").toString());
// 院系ID
edusBean.setDepartmentId(edusObject.get("departmentid").toString());
// 学历级别
edusBean.setLevel(edusObject.get("level").toString());
edusList.add(edusBean);
}
resultBean.setEdusList(edusList);
}
}
return resultBean;
}
}