package com.cattong.weibo.impl.tencent; import static com.cattong.commons.util.ParseUtil.getRawString; import java.util.Date; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import com.cattong.commons.LibException; import com.cattong.commons.LibResultCode; import com.cattong.commons.PagableList; import com.cattong.commons.ServiceProvider; import com.cattong.commons.util.ParseUtil; import com.cattong.commons.util.StringUtil; import com.cattong.entity.User; import com.cattong.weibo.Emotions; import com.cattong.weibo.entity.DirectMessage; class TencentDirectMessageAdaptor { /** * 从JSON字符串创建DirectMessage对象列表 * * @param jsonString * JSON字符串 * @return JSON对象列表 * @throws LibException */ public static PagableList<DirectMessage> createPagableDirectMessageList(String jsonString, int type) throws LibException { try { if ("[]".equals(jsonString) || "{}".equals(jsonString)) { return new PagableList<DirectMessage>(0, -1, 0); } JSONObject json = new JSONObject(jsonString); if (!json.has("info")) { return new PagableList<DirectMessage>(0, -1, 0); } JSONArray jsonList = json.getJSONArray("info"); int hasNext = ParseUtil.getInt("hasnext", json); long nextCursor = 1L; // 下一页 long previousCursor = 2L; // 上一页 if (hasNext == 1) { //数据已拉取完毕 nextCursor = 0; } int size = jsonList.length(); PagableList<DirectMessage> msgs = new PagableList<DirectMessage>(size, previousCursor, nextCursor); if (type == 0) { for (int i = 0; i < size; i++) { msgs.add(createSentDirectMessage(jsonList.getJSONObject(i))); } } else if (type == 1) { for (int i = 0; i < size; i++) { msgs.add(createDirectMessage(jsonList.getJSONObject(i))); } } return msgs; } catch (JSONException e) { throw new LibException(LibResultCode.JSON_PARSE_ERROR, e); } } /** * 从JSON对象创建DirectMessage对象,包级别访问控制 * * @param json * JSON对象 * @return DirectMessage对象 * @throws LibException */ static DirectMessage createSentDirectMessage(JSONObject json) throws LibException { DirectMessage dmsg = new DirectMessage(); dmsg.setCreatedAt(new Date(ParseUtil.getLong("timestamp", json) * 1000)); dmsg.setId(ParseUtil.getRawString("id", json)); dmsg.setText(Emotions.normalizeEmotion( ServiceProvider.Tencent, ParseUtil.getUnescapedString("text", json))); User sender = new User(); sender.setServiceProvider(ServiceProvider.Tencent); sender.setName(getRawString("name", json)); sender.setUserId(sender.getName()); sender.setScreenName(getRawString("nick", json)); String head = getRawString("head", json); if (StringUtil.isNotEmpty(head)) { sender.setProfileImageUrl(head + "/50"); } dmsg.setSender(sender); dmsg.setSenderId(sender.getUserId()); dmsg.setSenderScreenName(sender.getScreenName()); User recipient = new User(); recipient.setServiceProvider(ServiceProvider.Tencent); recipient.setName(getRawString("toname", json)); recipient.setUserId(recipient.getName()); recipient.setScreenName(getRawString("tonick", json)); String recipientHead = getRawString("tohead", json); if (StringUtil.isNotEmpty(recipientHead)) { recipient.setProfileImageUrl(recipientHead + "/50"); } dmsg.setRecipient(recipient); dmsg.setRecipientId(recipient.getUserId()); dmsg.setRecipientScreenName(recipient.getScreenName()); dmsg.setServiceProvider(ServiceProvider.Tencent); return dmsg; } static DirectMessage createDirectMessage(JSONObject json) throws LibException { DirectMessage dmsg = new DirectMessage(); dmsg.setCreatedAt(new Date(ParseUtil.getLong("timestamp", json) * 1000)); dmsg.setId(ParseUtil.getRawString("id", json)); dmsg.setText(Emotions.normalizeEmotion( ServiceProvider.Tencent, ParseUtil.getUnescapedString("text", json))); User sender = new User(); sender.setServiceProvider(ServiceProvider.Tencent); sender.setName(getRawString("name", json)); sender.setUserId(sender.getName()); sender.setScreenName(getRawString("nick", json)); String head = getRawString("head", json); if (StringUtil.isNotEmpty(head)) { sender.setProfileImageUrl(head + "/50"); } dmsg.setSender(sender); dmsg.setSenderId(sender.getUserId()); dmsg.setSenderScreenName(sender.getScreenName()); dmsg.setServiceProvider(ServiceProvider.Tencent); return dmsg; } }