package com.qq.open.qzone.photo;
import java.io.File;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.entity.mime.MultipartEntity;
import org.apache.http.entity.mime.content.FileBody;
import org.apache.http.entity.mime.content.StringBody;
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.QqUpdatePicParamBean;
import com.qq.open.qzone.bean.result.QqUpdatePicResultBean;
/**
* 登录用户上传照片,支持单张上传和批量上传。
*
* @author HaoLiang
* @version 0.1.1
*/
public class QqUpdatePic {
/** QQ互联工具类 */
private OpenQqUtils oqu = new OpenQqUtils();
/**
* 登录用户上传照片 - 单张上传
*
* @param paramBean 参数
* @return 返回结果
* @throws IOException
* @throws JSONException
*/
public QqUpdatePicResultBean updateOnePic(QqUpdatePicParamBean paramBean) throws IOException, JSONException {
// 请求接口并接收返回的数据
String jsonData = oqu.doPost(OpenQqConstants.QQ_UPDATE_PIC_URL, this.getUpdatePicParam(paramBean));
return this.jsonToBean(jsonData);
}
/**
* 登录用户上传照片 - 批量上传
*
* @param paramBean
* @return
* @throws IOException
* @throws JSONException
*/
public List<QqUpdatePicResultBean> updateMorePic(List<QqUpdatePicParamBean> paramBeanList) throws UnsupportedEncodingException, IOException, JSONException {
List<QqUpdatePicResultBean> resultBeanList = new ArrayList<QqUpdatePicResultBean>();
for (int i = 0; i < paramBeanList.size(); i++) {
QqUpdatePicParamBean paramBean = paramBeanList.get(i);
paramBean.setSuccessNum(i);
paramBean.setPicNum(paramBeanList.size());
String jsonData = oqu.doPost(OpenQqConstants.QQ_UPDATE_PIC_URL, this.getUpdatePicParam(paramBean));
resultBeanList.add(this.jsonToBean(jsonData));
}
return resultBeanList;
}
/**
* 获取上传图片的参数
*
* @param paramBean 参数Bean
* @return 参数
* @throws UnsupportedEncodingException
* @throws Exception
*/
private MultipartEntity getUpdatePicParam(QqUpdatePicParamBean paramBean) throws UnsupportedEncodingException {
MultipartEntity reqEntity = new MultipartEntity();
// AccessToken
reqEntity.addPart("access_token", new StringBody(paramBean.getAccessToken()));
// AppId
reqEntity.addPart("oauth_consumer_key", new StringBody(oqu.getConfigValue("qq.appid")));
// OpenId
reqEntity.addPart("openid", new StringBody(paramBean.getOpenId()));
// 照片描述
if (oqu.isNotNull(paramBean.getPhotoDesc())) {
reqEntity.addPart("photodesc", new StringBody(paramBean.getPhotoDesc(),Charset.forName("UTF-8")));
}
// 照片的命名
if (oqu.isNotNull(paramBean.getTitle())) {
reqEntity.addPart("title", new StringBody(paramBean.getTitle(),Charset.forName("UTF-8")));
}
// 相册id
if (oqu.isNotNull(paramBean.getAlbumId())) {
reqEntity.addPart("albumid", new StringBody(paramBean.getAlbumId()));
}
// 照片拍摄时的地理位置的经度
if (oqu.isNotNull(paramBean.getLongitude())) {
reqEntity.addPart("x", new StringBody(paramBean.getLongitude()));
}
// 照片拍摄时的地理位置的纬度
if (oqu.isNotNull(paramBean.getLatitude())) {
reqEntity.addPart("y", new StringBody(paramBean.getLatitude()));
}
// 定义API返回的数据格式
reqEntity.addPart("format", new StringBody("json"));
// 标识上传照片时是否要发feed
reqEntity.addPart("needfeed", new StringBody(String.valueOf(paramBean.getNeedFeed())));
// 已成功上传的张数
if (paramBean.getSuccessNum() > 0) {
reqEntity.addPart("successnum", new StringBody(String.valueOf(paramBean.getSuccessNum())));
}
// 批量上传照片的总张数
if (paramBean.getPicNum() > 0) {
reqEntity.addPart("picnum", new StringBody(String.valueOf(paramBean.getPicNum())));
}
// 图片的内容
FileBody fileBody = new FileBody(new File(paramBean.getPicPath()));
reqEntity.addPart("picture", fileBody);
return reqEntity;
}
/**
* 获取上传照片后的接口返回的数据
* 把返回的数据封装到Bean
*
* @param jsonData 接口返回的数据
* @return 照片上传返回Bean
* @throws JSONException
*/
private QqUpdatePicResultBean jsonToBean(String jsonData) throws JSONException {
QqUpdatePicResultBean resultBean = new QqUpdatePicResultBean();
// 接口返回的数据json
JSONObject jsonObjRoot = new JSONObject(jsonData);
// 接口返回错误的场合
if (jsonObjRoot.getInt("ret") != 0) {
// 设置错误标识为真
resultBean.setErrorFlg(true);
// 设置错误编号
resultBean.setErrorCode(jsonObjRoot.get("ret").toString());
// 设置错误信息
resultBean.setErrorMes(jsonObjRoot.getString("msg"));
} else {
// 相册ID
resultBean.setAlbumId(jsonObjRoot.get("albumid").toString());
// 大图ID
resultBean.setLloc(jsonObjRoot.get("lloc").toString());
// 小图ID
resultBean.setSloc(jsonObjRoot.get("sloc").toString());
// 大图地址
resultBean.setLargeUrl(jsonObjRoot.getString("large_url"));
// 小图地址
resultBean.setSmallUrl(jsonObjRoot.getString("small_url"));
// 图片高(单位:像素)
resultBean.setHeight(jsonObjRoot.get("height").toString());
// 图片宽(单位:像素)
resultBean.setWidth(jsonObjRoot.get("width").toString());
}
return resultBean;
}
}