package com.qq.open.qzone.topic;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.StringBody;
import org.apache.log4j.Logger;
import com.qq.open.common.OpenQqConstants;
import com.qq.open.common.OpenQqUtils;
import com.qq.open.common.json.JSONException;
import com.qq.open.common.json.JSONObject;
import com.qq.open.qzone.bean.param.QqAddTopicParamBean;
import com.qq.open.qzone.bean.result.QqAddTopicResultBean;
/**
* 登录用户发布心情
* 发布以后,将在QQ空间的说说下添加一条动态,以分享给好友。
* @author HaoLiang
*
*/
public class QqAddTopic {
/** QQ互联工具类 */
private OpenQqUtils oqu = new OpenQqUtils();
/** 日志 */
private Logger log = Logger.getLogger(QqAddTopic.class);
/**
* 发布心情
*
* @param addTopicBean 参数
* @return 接口返回Bean
* @throws IOException
* @throws JSONException
*/
public QqAddTopicResultBean addTopic(QqAddTopicParamBean addTopicBean) throws IOException, JSONException {
// 日志
log.info("发布心情 开始...");
// 请求接口,获取发布心情结果
String jsonData = oqu.doPost(OpenQqConstants.QQ_ADD_TOPIC_URL,this.getAddTopicParam(addTopicBean));
// 接口数据
QqAddTopicResultBean resultBean = this.jsonToBean(jsonData);
// 日志
log.info("发布心情 开始...");
return resultBean;
}
/**
* 封装Post请求参数
*
* @param addTopicBean 参数
* @return Post请求参数
* @throws UnsupportedEncodingException
*/
private MultipartEntity getAddTopicParam(QqAddTopicParamBean addTopicBean) throws UnsupportedEncodingException {
MultipartEntity reqEntity = new MultipartEntity();
// AccessToken
reqEntity.addPart("access_token", new StringBody(addTopicBean
.getAccessToken()));
// AppId
reqEntity.addPart("oauth_consumer_key", new StringBody(oqu.getConfigValue("qq.appid")));
// OpenId
reqEntity.addPart("openid", new StringBody(addTopicBean.getOpenId()));
// 定义API返回的数据格式
reqEntity.addPart("format", new StringBody("json"));
// 发布的心情的内容
reqEntity.addPart("con", new StringBody(addTopicBean.getCon(), Charset.forName("UTF-8")));
// 发布心情时引用的信息的类型
if (addTopicBean.getRichtype() > 0) {
// 1表示图片; 2表示网页; 3表示视频
reqEntity.addPart("richtype", new StringBody(String.valueOf(addTopicBean.getRichtype())));
}
// 发布心情时引用的信息的值
if (oqu.isNotNull(addTopicBean.getRichval())) {
reqEntity.addPart("richval", new StringBody(addTopicBean.getRichval()));
}
// 发布心情时引用的地址
if (oqu.isNotNull(addTopicBean.getLbsNm())) {
reqEntity.addPart("lbs_nm", new StringBody(addTopicBean.getLbsNm()));
}
// 发布心情时引用的经度
if (oqu.isNotNull(addTopicBean.getLbsX())) {
reqEntity.addPart("lbs_x", new StringBody(addTopicBean.getLbsX()));
}
// 发布心情时引用的纬度
if (oqu.isNotNull(addTopicBean.getLbsY())) {
reqEntity.addPart("lbs_y", new StringBody(addTopicBean.getLbsY()));
}
// 第三方应用的平台类型
if (oqu.isNotNull(addTopicBean.getLbsY())) {
// 1表示QQ空间; 2表示腾讯朋友; 3表示腾讯微博平台; 4表示腾讯Q+平台
reqEntity.addPart("third_source", new StringBody(addTopicBean.getThirdSource()));
}
return reqEntity;
}
/**
* json数据转换成javaBean
*
* @param jsonData 接口返回的数据
* @return javaBean
* @throws JSONException
*/
private QqAddTopicResultBean jsonToBean(String jsonData) throws JSONException {
QqAddTopicResultBean resultBean = new QqAddTopicResultBean();
JSONObject jsonObjRoot;
try {
jsonObjRoot = new JSONObject(jsonData);
// 接口返回错误的场合
if (jsonObjRoot.getInt("ret") != 0) {
// 设置错误标识为真
resultBean.setErrorFlg(true);
// 设置错误编号
resultBean.setErrorCode(jsonObjRoot.get("errcode").toString());
// 设置错误内容
resultBean.setErrorMes(jsonObjRoot.getString("msg"));
}
} catch (JSONException e) {
e.printStackTrace();
// 日志
log.error("addTopic 异常,json数据是:" + jsonData);
throw e;
}
return resultBean;
}
}