package org.aisen.weibo.sina.sinasdk;
import android.content.Context;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.text.Html;
import android.text.TextUtils;
import android.webkit.WebView;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.aisen.android.common.context.GlobalContext;
import org.aisen.android.common.setting.Setting;
import org.aisen.android.common.setting.SettingUtil;
import org.aisen.android.common.setting.SettingUtility;
import org.aisen.android.common.utils.Logger;
import org.aisen.android.network.biz.ABizLogic;
import org.aisen.android.network.http.HttpConfig;
import org.aisen.android.network.http.IHttpUtility;
import org.aisen.android.network.http.Params;
import org.aisen.android.network.task.TaskException;
import org.aisen.weibo.sina.sinasdk.bean.AccessToken;
import org.aisen.weibo.sina.sinasdk.bean.DirectMessages;
import org.aisen.weibo.sina.sinasdk.bean.DmMessages;
import org.aisen.weibo.sina.sinasdk.bean.Favorities;
import org.aisen.weibo.sina.sinasdk.bean.Favority;
import org.aisen.weibo.sina.sinasdk.bean.Friendship;
import org.aisen.weibo.sina.sinasdk.bean.FriendshipShow;
import org.aisen.weibo.sina.sinasdk.bean.Group;
import org.aisen.weibo.sina.sinasdk.bean.GroupMemberListed;
import org.aisen.weibo.sina.sinasdk.bean.GroupSortResult;
import org.aisen.weibo.sina.sinasdk.bean.Groups;
import org.aisen.weibo.sina.sinasdk.bean.PicUrls;
import org.aisen.weibo.sina.sinasdk.bean.SearchsResultUser;
import org.aisen.weibo.sina.sinasdk.bean.SetCount;
import org.aisen.weibo.sina.sinasdk.bean.SinaLocationMap;
import org.aisen.weibo.sina.sinasdk.bean.StatusComment;
import org.aisen.weibo.sina.sinasdk.bean.StatusComments;
import org.aisen.weibo.sina.sinasdk.bean.StatusContent;
import org.aisen.weibo.sina.sinasdk.bean.StatusContents;
import org.aisen.weibo.sina.sinasdk.bean.StatusRepost;
import org.aisen.weibo.sina.sinasdk.bean.StatusesIds;
import org.aisen.weibo.sina.sinasdk.bean.SuggestionAtUser;
import org.aisen.weibo.sina.sinasdk.bean.SuggestionsUser;
import org.aisen.weibo.sina.sinasdk.bean.Token;
import org.aisen.weibo.sina.sinasdk.bean.TokenInfo;
import org.aisen.weibo.sina.sinasdk.bean.TrendsBean;
import org.aisen.weibo.sina.sinasdk.bean.UnreadCount;
import org.aisen.weibo.sina.sinasdk.bean.UploadPictureResultBean;
import org.aisen.weibo.sina.sinasdk.bean.WeiBoUser;
import org.aisen.weibo.sina.sinasdk.http.HttpsUtility;
import org.aisen.weibo.sina.support.utils.AisenUtils;
import java.io.File;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 新浪微博SDK
*
* @author wangdan
*
*/
public class SinaSDK extends ABizLogic {
private Token token;
@Override
protected IHttpUtility configHttpUtility() {
return new HttpsUtility();
}
@Override
protected HttpConfig configHttpConfig() {
HttpConfig httpConfig = new HttpConfig();
httpConfig.baseUrl = getSetting(BASE_URL).getValue();
if (token != null) {
httpConfig.addHeader("Authorization", "OAuth2 " + token.getToken());
}
return httpConfig;
}
private SinaSDK(Token token) {
super();
this.token = token;
}
private SinaSDK(Token token, CacheMode cacheMode) {
super(cacheMode);
this.token = token;
}
public static SinaSDK getInstance(Token token) {
return new SinaSDK(token);
}
public static SinaSDK getInstance(Token token, CacheMode cacheMode) {
return new SinaSDK(token, cacheMode);
}
public static String getAppKey() {
return getSetting("app_key").getValue();
}
public String getAppSecret() {
return getSetting("app_secret").getValue();
}
public String getAppCallback() {
return getSetting("callback_url").getValue();
}
private Params configParams(Params params) {
if (params == null) {
params = new Params();
}
if (!params.containsKey("source"))
params.addParameter("source", getAppKey());
if (token != null)
params.addParameter("access_token", token.getToken());
return params;
}
/**
* 通过验证码获得access token
*
* @param verifier
* @return
* @throws TaskException
*/
public AccessToken getAccessToken(String verifier) throws TaskException {
Params params = new Params();
params.addParameter("code", verifier);
params.addParameter("client_id", getAppKey());
params.addParameter("client_secret", getAppSecret());
params.addParameter("grant_type", "authorization_code");
params.addParameter("redirect_uri", getAppCallback());
return doPost(getHttpConfig(), getSetting("access_token"), null, configParams(params), null, AccessToken.class);
}
public AccessToken getWeicoAccessToken(String verifier) throws TaskException {
Params params = new Params();
params.addParameter("code", verifier);
params.addParameter("client_id", SettingUtility.getStringSetting("weico_key"));
params.addParameter("client_secret", SettingUtility.getStringSetting("weico_screet"));
params.addParameter("grant_type", "authorization_code");
params.addParameter("redirect_uri", SettingUtility.getStringSetting("weico_callback"));
return doPost(getHttpConfig(), getSetting("access_token"), null, configParams(params), null, AccessToken.class);
}
/**
* 查询用户access_token的授权相关信息,包括授权时间,过期时间和scope权限
*
* @param token
* @return
* @throws TaskException
*/
public TokenInfo getTokenInfo(String token) throws TaskException {
Params params = new Params();
params.addParameter("access_token", token);
return doPost(getHttpConfig(), getSetting("token_info"), null, configParams(params), null, TokenInfo.class);
}
// https://api.weibo.com/oauth2/default.html
public void doWebRequest(WebView webView) {
String url = String
.format("https://api.weibo.com/oauth2/authorize?client_id=%s&scope=friendships_groups_read,friendships_groups_write,statuses_to_me_read,follow_app_official_microblog&redirect_uri=%s&display=mobile&forcelogin=true",
getAppKey(), getAppCallback());
webView.loadUrl(url);
}
/**
* 用户名账号密码登录
*
* @param username
* @param pwd
* @param appId
* @param appSecret
* @return
* @throws Exception
*/
public AccessToken accountLogin(String username, String pwd, String appId, String appSecret) throws TaskException {
Params params = new Params();
params.addParameter("username", username);
params.addParameter("password", pwd);
params.addParameter("client_id", appId);
params.addParameter("client_secret", appSecret);
params.addParameter("grant_type", "password");
return doPost(getHttpConfig(), getSetting("accountLogin"), null, params, null, AccessToken.class);
}
/**
* 按用户ID或昵称返回用户资料以及用户的最新发布的一条微博消息。<br>
* <br>
*
*
* @param uid
* (true):必须设置
* @param screenName
* (false):微博昵称,主要是用来区分用户UID跟微博昵称,当二者一样而产生歧义的时候,建议使用该参数
* @return
*/
public WeiBoUser userShow(String uid, String screenName) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(uid))
params.addParameter("uid", uid);
if (!TextUtils.isEmpty(screenName))
params.addParameter("screen_name", screenName);
params.setEncodeAble(false);
WeiBoUser user = doGet(getSetting("usershow"), configParams(params), WeiBoUser.class);
if (user != null) {
// Sina真的是有毛病啊
if (!TextUtils.isEmpty(user.getDescription()) &&
user.getDescription().toLowerCase().endsWith("-weibo")) {
user.setDescription(user.getDescription().substring(0, user.getDescription().length() - 6));
}
if (!TextUtils.isEmpty(user.getVerified_reason()) &&
user.getVerified_reason().toLowerCase().endsWith("-weibo")) {
user.setVerified_reason(user.getVerified_reason().substring(0, user.getVerified_reason().length() - 6));
}
}
return user;
}
/**
*
* @param list_id
* 需要查询的好友分组ID,建议使用返回值里的idstr,当查询的为私有分组时,则当前登录用户必须为其所有者
* @param since_id
* 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
* @param max_id
* 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
* @param count
* 单页返回的记录条数,最大不超过200,默认为50
* @param page
* 返回结果的页码,默认为1
* @param token
* @return
*/
public StatusContents friendshipGroupsTimeline(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("friendshipGroupsTimeline")));
return doGet(getSetting("friendshipGroupsTimeline"), configParams(params), StatusContents.class);
}
public StatusContents offlineFriendshipGroupsTimeline(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("offlineFriendshipGroupsTimeline")));
return doGet(getSetting("offlineFriendshipGroupsTimeline"), configParams(params), StatusContents.class);
}
/**
* 返回最新的20条公共微博。<br>
* 返回结果非完全实时,最长会缓存60秒<br>
* <br>
*
* @param count
* (false):单页返回的记录条数。(默认值20,最大200)
* @param base_app
* (false):是否基于当前应用来获取数据。1为限制本应用微博,0为不做限制
* @return
*/
public StatusContents statusesPublicTimeLine(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesPublicTimeLine")));
return doGet(getSetting("statusesPublicTimeLine"), configParams(params), StatusContents.class);
}
/**
* 获取当前登录用户及其所关注用户的最新微博消息。<br>
* 和用户登录 http://t.sina.com.cn 后在“我的首页”中看到的内容相同。<br>
* 别名statuses/home_timeline<br>
* <br>
* 如果:id、user_id、screen_name三个参数均未指定,则返回当前登录用户最近发表的微博消息列表。<br>
* <br>
*
* @param since_id
* (false):若指定此参数,则只返回ID比since_id大的评论(比since_id发表时间晚)
* @param max_id
* (false):若指定此参数,则返回ID小于或等于max_id的评论
* @param count
* (false):单页返回的记录条数。(默认值20,最大200)
* @param page
* (false):返回结果的页码。注意:有分页限制。
* @param base_app
* (false):是否基于当前应用来获取数据。1为限制本应用微博,0为不做限制
* @param feature
* (false):微博类型,0全部,1原创,2图片,3视频,4音乐. 返回指定类型的微博信息内容
* @return
*/
public StatusContents statusesFriendsTimeLine(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesFriendsTimeLine")));
return doGet(getSetting("statusesFriendsTimeLine"), configParams(params), StatusContents.class);
}
public StatusContents statusesHomeTimeLine(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesHomeTimeLine")));
return doGet(getSetting("statusesHomeTimeLine"), configParams(params), StatusContents.class);
}
/**
* 返回用户最新发表的微博消息列表<br>
* 建议使用该参数<br>
* <br>
* 如果:id、user_id、screen_name三个参数均未指定,则返回当前登录用户最近发表的微博消息列表。<br>
* <br>
*
* @param user_id
* (false):用户ID,主要是用来区分用户ID跟微博昵称。当微博昵称为数字导致和用户ID产生歧义,
* 特别是当微博昵称和用户ID一样的时候
* @param since_id
* (false):若指定此参数,则只返回ID比since_id大的评论(比since_id发表时间晚)
* @param max_id
* (false):若指定此参数,则返回ID小于或等于max_id的评论
* @param count
* (false):单页返回的记录条数。(默认值20,最大200)
* @param page
* (false):返回结果的页码。注意:有分页限制。
* @param base_app
* (false):是否基于当前应用来获取数据。1为限制本应用微博,0为不做限制
* @param feature
* (false):微博类型,0全部,1原创,2图片,3视频,4音乐. 返回指定类型的微博信息内容
* @return
*/
public StatusContents statusesUserTimeLine(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesUserTimeLine")));
params.setEncodeAble(false);
return doGet(getSetting("statusesUserTimeLine"), configParams(params), StatusContents.class);
}
/**
* 获取双向关注用户的最新微博
*
* @param since_id
* (false):若指定此参数,则只返回ID比since_id大的评论(比since_id发表时间晚)
* @param max_id
* (false):若指定此参数,则返回ID小于或等于max_id的评论
* @param count
* (false):单页返回的记录条数。(默认值20,最大200)
* @param page
* (false):返回结果的页码。注意:有分页限制。
* @param base_app
* (false):是否基于当前应用来获取数据。1为限制本应用微博,0为不做限制
* @param feature
* (false):微博类型,0全部,1原创,2图片,3视频,4音乐. 返回指定类型的微博信息内容
* @param trim_user
* (false):返回值中user字段开关,0:返回完整user字段、1:user字段仅返回user_id,默认为0
* @return
*/
public StatusContents statusesBilateralTimeLine(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesBilateralTimeLine")));
return doGet(getSetting("statusesBilateralTimeLine"), configParams(params), StatusContents.class);
}
/**
* 获取某条原创微博的最新转发微博
*
* @param params
* @param token
* @return
* @throws WeiboException
*/
public StatusRepost statusRepostTimeline(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusRepostTimeline")));
return doGet(getSetting("statusRepostTimeline"), configParams(params), StatusRepost.class);
}
/**
* 转发一条微博消息。请求必须用POST方式提交。
*
* @param id
* (true)要转发的微博ID
* @param status
* (false)添加的转发文本。必须做URLEncode,信息内容不超过140个汉字。如不填则默认为“转发微博”
* @param is_comment
* (false)是否在转发的同时发表评论。0表示不发表评论,1表示发表评论给当前微博,2表示发表评论给原微博,3是1、2都发表
* 。默认为0
* @return
*/
public StatusContent statusesReport(Params params) throws TaskException {
return doPost(getHttpConfig(), getSetting("statusesReport"), null, params, null, StatusContent.class);
}
/**
* 获取最新的提到登录用户的微博列表,即@我的微博
*
* @param since_id
* 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
* @param max_id
* 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param filter_by_author
* 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
* @param filter_by_source
* 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
* @param filter_by_type
* 原创筛选类型,0:全部微博、1:原创的微博,默认为0
* @return
*/
public StatusContents statusesMentions(Params params) throws TaskException {
return doGet(getSetting("statusesMentions"), configParams(params), StatusContents.class);
}
/**
* 获取当前登录用户关注的人发给其的定向微博
*
* @param params
* @param token
* @return
*/
public StatusContents statusesToMe(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("statusesToMe")));
return doGet(getSetting("statusesToMe"), configParams(params), StatusContents.class);
}
/**
* 屏蔽某条微博
*
* @param id
* @return
* @throws TaskException
*/
public GroupSortResult statusFilterCreate(String id) throws TaskException {
Params params = new Params();
params.addParameter("id", id);
return doPost(configHttpConfig(), getSetting("statusFilterCreate"), null, configParams(params), null, GroupSortResult.class);
}
/**
* 屏蔽某个@到我的微博以及后续由对其转发引起的@提及
*
* @param id 需要屏蔽的@提到我的微博ID。此ID必须在statuses/mentions列表中
* @return
* @throws TaskException
*/
public GroupSortResult statusMentionsShield(String id) throws TaskException {
Params params = new Params();
params.addParameter("id", id);
return doPost(configHttpConfig(), getSetting("statusMentionsShield"), null, configParams(params), null, GroupSortResult.class);
}
/**
* 获取好友的分组信息
*
* @return
*/
public Groups friendshipGroups() throws TaskException {
Groups groups = doGet(getSetting("friendshipGroups"), configParams(null), Groups.class);
Map<String, String> groupMap = new HashMap<String, String>();
List<Group> groupList = new ArrayList<Group>();
// fuck 有两个特别关注
for (Group group : groups.getLists()) {
if (!groupMap.containsKey(group.getIdstr())) {
groupList.add(group);
groupMap.put(group.getIdstr(), group.getIdstr());
}
}
groups.setLists(groupList);
return groups;
}
/**
*
* @param id
* (true) 需要查询的微博ID
* @param since_id
* (false) 若指定此参数,则返回ID比since_id大的评论(即比since_id时间晚的评论),默认为0
* @param max_id
* (false) 若指定此参数,则返回ID小于或等于max_id的评论,默认为0
* @param count
* (false) 单页返回的记录条数,默认为50
* @param page
* (false) 返回结果的页码,默认为1
* @param filter_by_author
* (false) 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
* @return
*/
public StatusComments commentsShow(Params params) throws TaskException {
if (!params.containsKey("count"))
params.addParameter("count", getPageCount(getSetting("commentsShow")));
return doGet(getSetting("commentsShow"), configParams(params), StatusComments.class);
}
/**
* 对一条微博信息进行评论。请求必须用POST方式提交。
*
* @param id
* (true) 要评论的微博消息ID
* @param comment
* (true) 评论内容。必须做URLEncode,信息内容不超过140个汉字。
* @param comment_ori
* (false) 当评论一条转发微博时,是否评论给原微博。0:不评论给原微博。1:评论给原微博。默认0
* @return
*/
public StatusComment commentCreate(Params params) throws TaskException {
return doPost(getHttpConfig(), getSetting("commentCreate"), null, params, null, StatusComment.class);
}
/**
* 获取两个用户之间的详细关注关系情况
*
* @param params
* source_id 源用户的UID following true 代表source关注了target
* @param params
* target_id 目标用户的UID following true 代表target关注了source
* @return
*/
public FriendshipShow friendshipsShow(String source_id, String target_id) throws TaskException {
Params params = new Params();
params.addParameter("source_id", source_id);
params.addParameter("target_id", target_id);
return doGet(getSetting("friendshipsShow"), configParams(params), FriendshipShow.class);
}
/**
* 取消关注一个用户
*
* @param uid
* (true) 需要取消关注的用户ID
* @return
*/
public WeiBoUser friendshipsDestroy(String uid) throws TaskException {
Params params = new Params("uid", uid);
return doPost(getHttpConfig(), getSetting("friendshipsDestroy"), null, configParams(params), null, WeiBoUser.class);
}
/**
* 关注一个用户
*
* @param uid
* (true) 需要关注的用户ID
* @return
*/
public WeiBoUser friendshipsCreate(String uid) throws TaskException {
Params params = new Params("uid", uid);
return doPost(getHttpConfig(), getSetting("friendshipsCreate"), null, configParams(params), null, WeiBoUser.class);
}
/**
* 更新当前登录用户所关注的某个好友的备注信息
*
* @param uid
* @param remark
* @param token
* @return
*/
public WeiBoUser friendshipsRemarkUpdate(String uid, String remark) throws TaskException {
Params params = new Params("uid", uid);
params.addParameter("remark", remark);
return doPost(getHttpConfig(), getSetting("friendshipsRemarkUpdate"), null, configParams(params), null, WeiBoUser.class);
}
/**
* 获取用户的关注列表
*
* @param uid
* (true) 需要查询的用户UID
* @param count
* (false) 单页返回的记录条数,默认为50,最大不超过200
* @param cursor
* (false) 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
* @return
*/
public Friendship friendshipsFriends(String uid, String screenName, String cursor, int count) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(uid))
params.addParameter("uid", uid);
if (!TextUtils.isEmpty(screenName))
params.addParameter("screen_name", screenName);
params.addParameter("cursor", cursor);
if (count == 0)
params.addParameter("count", getPageCount(getSetting("friendshipsFriends")));
else
params.addParameter("count", String.valueOf(count));
params.setEncodeAble(false);
return doGet(getSetting("friendshipsFriends"), configParams(params), Friendship.class);
}
/**
* 获取用户的粉丝列表
*
* @param uid
* (true) 需要查询的用户UID
* @param count
* (false) 单页返回的记录条数,默认为50,最大不超过200
* @param cursor
* (false) 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
* @return
*/
public Friendship friendshipsFollowers(String uid, String screenName, String cursor) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(uid))
params.addParameter("uid", uid);
if (!TextUtils.isEmpty(screenName))
params.addParameter("screen_name", screenName);
params.addParameter("cursor", cursor);
params.addParameter("count", getPageCount(getSetting("friendshipsFollowers")));
params.setEncodeAble(false);
return doGet(getSetting("friendshipsFollowers"), configParams(params), Friendship.class);
}
/**
* 获取用户的互粉列表
*
* @param params
* (true) 需要查询的用户UID
* @param params
* (false) 单页返回的记录条数,默认为50,最大不超过200
* @param params
* (false) 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
* @return
*/
public Friendship friendshipsIncommon(String uid, String cursor) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("cursor", cursor);
params.addParameter("count", getPageCount(getSetting("friendshipsIncommon")));
return doGet(getSetting("friendshipsIncommon"), configParams(params), Friendship.class);
}
/**
* 获取用户的彼此关注列表
*
* @param params
* (true) 需要查询的用户UID
* @param params
* (false) 单页返回的记录条数,默认为50,最大不超过200
* @param params
* (false) 返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
* @return
*/
public Friendship friendshipsBilateral(String uid, String cursor) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("cursor", cursor);
params.addParameter("count", getPageCount(getSetting("friendshipsBilateral")));
return doGet(getSetting("friendshipsBilateral"), configParams(params), Friendship.class);
}
/**
* 移除当前登录用户的粉丝
*
* @param uid
* @param token
* @return
*/
public WeiBoUser friendshipsFollowersDestory(String uid) throws TaskException {
Params params = new Params("uid", uid);
return doPost(getHttpConfig(), getSetting("friendshipsFollowersDestory"), null, configParams(params), null, WeiBoUser.class);
}
/**
* 获取当前登录用户所发出的评论列表
*
* @param since_id
* 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
* @param max_id
* 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param filter_by_source
* 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
* @return
*/
public StatusComments commentsByMe(String sinceId, String maxId, String count) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(sinceId))
params.addParameter("since_id", sinceId);
if (!TextUtils.isEmpty(maxId))
params.addParameter("max_id", maxId);
if (!TextUtils.isEmpty(count))
params.addParameter("count", count);
else
params.addParameter("count", getPageCount(getSetting("commentsByMe")));
return doGet(getSetting("commentsByMe"), configParams(params), StatusComments.class);
}
/**
* 获取当前登录用户所接收到的评论列表
*
* @param since_id
* 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
* @param max_id
* 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param filter_by_author
* 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
* @param filter_by_source
* 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
* @return
*/
public StatusComments commentsToMe(String sinceId, String maxId, String filterByAuthor, String count) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(sinceId))
params.addParameter("since_id", sinceId);
if (!TextUtils.isEmpty(maxId))
params.addParameter("max_id", maxId);
if (!TextUtils.isEmpty(filterByAuthor))
params.addParameter("filter_by_author", filterByAuthor);
if (!TextUtils.isEmpty(count))
params.addParameter("count", count);
else
params.addParameter("count", getPageCount(getSetting("commentsToMe")));
return doGet(getSetting("commentsToMe"), configParams(params), StatusComments.class);
}
/**
* 获取最新的提到当前登录用户的评论,即@我的评论
*
* @param since_id
* 若指定此参数,则返回ID比since_id大的微博(即比since_id时间晚的微博),默认为0
* @param max_id
* 若指定此参数,则返回ID小于或等于max_id的微博,默认为0
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param filter_by_author
* 作者筛选类型,0:全部、1:我关注的人、2:陌生人,默认为0
* @param filter_by_source
* 来源筛选类型,0:全部、1:来自微博的评论、2:来自微群的评论,默认为0
* @return
*/
public StatusComments commentsMentions(String sinceId, String maxId, String filterByAuthor, String count) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(sinceId))
params.addParameter("since_id", sinceId);
if (!TextUtils.isEmpty(maxId))
params.addParameter("max_id", maxId);
if (!TextUtils.isEmpty(filterByAuthor))
params.addParameter("filter_by_author", filterByAuthor);
if (!TextUtils.isEmpty(count))
params.addParameter("count", count);
else
params.addParameter("count", getPageCount(getSetting("commentsMentions")));
return doGet(getSetting("commentsMentions"), configParams(params), StatusComments.class);
}
/**
* 获取当前登录用户的收藏列表
*
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param token
* @return
*/
public Favorities favorites(String page, String count) throws TaskException {
Params params = new Params();
params.addParameter("page", page);
if (!TextUtils.isEmpty(count))
params.addParameter("count", count);
else
params.addParameter("count", getPageCount(getSetting("favorites")));
return doGet(getSetting("favorites"), configParams(params), Favorities.class);
}
/**
* 添加一条微博到收藏里
*
* @param id
* (true) 要收藏的微博ID
* @return
*/
public Favority favoritesCreate(String id) throws TaskException {
Params params = new Params("id", id);
return doPost(getHttpConfig(), getSetting("favoritesCreate"), null, params, null, Favority.class);
}
/**
* 取消收藏一条微博
*
* @param id
* @param token
* @return
*/
public Favority favoritesDestory(String id) throws TaskException {
Params params = new Params("id", id);
return doPost(getHttpConfig(), getSetting("favoritesDestory"), null, params, null, Favority.class);
}
/**
* 删除一条微博
*
* @param id
* @param token
* @return
*/
public StatusContent statusDestroy(String id) throws TaskException {
Params params = new Params("id", id);
return doPost(getHttpConfig(), getSetting("statusDestroy"), null, params, null, StatusContent.class);
}
/**
* 搜索某一话题下的微博
*
* @param count
* 单页返回的记录条数,默认为50
* @param page
* 返回结果的页码,默认为1
* @param token
* @return
*/
public StatusContents searchTopics(String page, String topics, String count) throws TaskException {
Params params = new Params();
params.addParameter("page", page);
if (!TextUtils.isEmpty(count))
params.addParameter("count", count);
else
params.addParameter("count", getPageCount(getSetting("searchTopics")));
params.addParameter("q", topics);
params.setEncodeAble(false);
return doGet(getSetting("searchTopics"), configParams(params), StatusContents.class);
}
/**
* 发表带图片的微博。必须用POST方式提交pic参数,且Content-Type必须设置为multipart/form-data。图片大小<5M。
* <p>
* 图片格式定义为png<br>
*
* @param status
* (true)要发布的微博文本内容。
* @param pic
* (true)要上传的图片数据。仅支持JPEG、GIF、PNG格式,为空返回400错误。图片大小<5M。
* @param lat
* (false)纬度。有效范围:-90.0到+90.0,+表示北纬。
* @param long (false)经度。有效范围:-180.0到+180.0,+表示东经。
* @return
*/
public StatusContent statusesUpload(Params params, File file) throws TaskException {
MultipartFile[] files = file == null ? null : new MultipartFile[] { new MultipartFile("image/jpge", "pic", file) };
StatusContent s = doPostFiles(getHttpConfig(), getSetting("statusesUpload"), null, params, files, StatusContent.class);
// tempFile.delete();
return s;
}
/**
* 指定一个图片URL地址抓取后上传并同时发布一条新微博
*
* @return
*/
public StatusContent statusesUploadUrlText(Params params) throws TaskException {
StatusContent s = doPost(getHttpConfig(), getSetting("statusesUploadUrlText"), null, params, null, StatusContent.class);
return s;
}
/**
* 发布一条微博信息。也可以同时转发某条微博。请求必须用POST方式提交。 <br>
* <br>
* 注意:lat和long参数需配合使用,用于标记发表微博消息时所在的地理位置,只有用户设置中geo_enabled=true时候地理位置信息才有效。<br>
*
* @param status
* (true) 要发布的微博消息文本内容
* @param in_reply_to_status_id
* (false) 要转发的微博消息ID
* @param lat
* (false) 纬度。有效范围:-90.0到+90.0,+表示北纬。
* @param long (false) 经度。有效范围:-180.0到+180.0,+表示东经。
* @param annotations
* (false)
* @return
*/
public StatusContent statusesUpdate(Params params) throws TaskException {
return doPost(getHttpConfig(), getSetting("statusesUpdate"), null, configParams(params), null, StatusContent.class);
}
/**
* 回复一条评论
*
* @param cid
* 需要回复的评论ID
* @param id
* 需要评论的微博ID
* @param comment
* 回复评论内容,必须做URLencode,内容不超过140个汉字
* @param without_mention
* 回复中是否自动加入“回复@用户名”,0:是、1:否,默认为0
* @param comment_ori
* 当评论转发微博时,是否评论给原微博,0:否、1:是,默认为0
* @return
*/
public StatusComment commentsReply(Params params) throws TaskException {
return doPost(getHttpConfig(), getSetting("commentsReply"), null, params, null, StatusComment.class);
}
/**
* 删除一条评论
*
* @param commentId
* 要删除的评论ID,只能删除登录用户自己发布的评论
* @param token
* @return
*/
public StatusComment commentsDestory(String commentId) throws TaskException {
Params params = new Params();
params.addParameter("cid", commentId);
return doPost(getHttpConfig(), getSetting("commentsDestory"), null, params, null, StatusComment.class);
}
/**
* at用户时的联想建议
*
* @param q
* 搜索的关键字,必须做URLencoding
* @param count
* 返回的记录条数,默认为10,粉丝最多1000,关注最多2000
* @param type
* 联想类型,0:关注、1:粉丝
* @param range
* 联想范围,0:只联想关注人、1:只联想关注人的备注、2:全部,默认为2
* @param token
* @return
*/
public SuggestionAtUser[] searchSuggestionsAtUsers(String q) throws TaskException {
Params params = new Params();
params.addParameter("q", q);
params.addParameter("count", "25");
params.addParameter("type", "0");
params.addParameter("range", "2");
params.setEncodeAble(false);
return doGet(getSetting("searchSuggestionsAtUsers"), params, SuggestionAtUser[].class);
}
/**
* 获取当前用户Web主站未读消息数,包括:<br>
* 新提及我的评论数<br>
* 最新提到我的微博数<br>
* 新评论数<br>
* 新粉丝数。<br>
*
* @param uid
* 当前登录用户
* @return
*/
public UnreadCount remindUnread(String uid) throws TaskException {
Params params = new Params("uid", uid);
return doGet(getSetting("remindUnread"), params, UnreadCount.class);
}
/**
* 对当前登录用户某一种消息未读数清零<br/>
*
* @param type
* follower:新粉丝数、cmt:新评论数、mention_status:新提及微博、mention_cmt:新提及评论
*
* @return
*/
public SetCount remindSetCount(String type) throws TaskException {
return doGet(getSetting("remindSetCount"), new Params("type", type), SetCount.class);
}
/**
* 批量获取某些用户在当前登录用户指定好友分组中的收录信息
*
* @param uids
* 需要获取好友分组信息的用户UID列表,多个之间用逗号分隔,每次不超过50个
* @param token
* @return
*/
public GroupMemberListed[] friendshipGroupsListed(String uids) throws TaskException {
Params params = new Params("uids", uids);
params.setEncodeAble(false);
return doGet(getSetting("friendshipGroupsListed"), params, GroupMemberListed[].class);
}
/**
* 创建好友分组
*
* @param name
* 要创建的好友分组的名称,不超过10个汉字,20个半角字符
* @param description
* 要创建的好友分组的描述,不超过70个汉字,140个半角字符
* @param tags
* 要创建的好友分组的标签,多个之间用逗号分隔,最多不超过10个,每个不超过7个汉字,14个半角字符
* @param token
* @return
*/
public Group friendshipsGroupsCreate(String name, String description, String tags) throws TaskException {
Params params = new Params();
params.addParameter("name", name);
if (!TextUtils.isEmpty(description))
params.addParameter("description", description);
if (!TextUtils.isEmpty(tags))
params.addParameter("tags", tags);
return doPost(getHttpConfig(), getSetting("friendshipsGroupsCreate"), null, params, null, Group.class);
}
/**
* 删除好友分组
*
* @param list_id
* 要删除的好友分组ID,建议使用返回值里的idstr
* @return
*/
public Group friendshipGroupsDestory(String list_id) throws TaskException {
Params params = new Params();
params.addParameter("list_id", list_id);
return doPost(getHttpConfig(), getSetting("friendshipGroupsDestory"), null, params, null, Group.class);
}
/**
* 添加关注用户到好友分组
*
* @param uid
* @param list_id
* @param token
* @return
*/
public Group friendshipsGroupdMembersAdd(String uid, String list_id) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("list_id", list_id);
return doPost(getHttpConfig(), getSetting("friendshipsGroupdMembersAdd"), null, params, null, Group.class);
}
/**
* 删除好友分组内的关注用户
*
* @param uid
* @param list_id
* @param token
* @return
*/
public Group friendshipsGroupdMembersDestory(String uid, String list_id) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("list_id", list_id);
return doPost(getHttpConfig(), getSetting("friendshipsGroupdMembersDestory"), null, params, null, Group.class);
}
/**
* 更新好友分组
*
* @param list_id
* 需要更新的好友分组ID,建议使用返回值里的idstr,只能更新当前登录用户自己创建的分组
* @param name
* 好友分组更新后的名称,不超过8个汉字,16个半角字符
* @param description
* 好友分组更新后的描述,不超过70个汉字,140个半角字符
* @param tags
* 好友分组更新后的标签,多个之间用逗号分隔,最多不超过10个,每个不超过7个汉字,14个半角字符
* @param token
* @return
*/
public Group friendshipGroupsUpdate(String list_id, String name, String description, String tags) throws TaskException {
Params params = new Params("list_id", list_id);
params.addParameter("name", name);
if (description != null)
params.addParameter("description", description);
if (tags != null)
params.addParameter("tags", tags);
return doPost(getHttpConfig(), getSetting("friendshipGroupsUpdate"), null, params, null, Group.class);
}
/**
* 获取某一好友分组下的成员列表
*
* @param list_id
* 好友分组ID,建议使用返回值里的idstr
* @param count
* 单页返回的记录条数,默认为50,最大不超过200
* @param cursor
* 分页返回结果的游标,下一页用返回值里的next_cursor,上一页用previous_cursor,默认为0
* @param token
* @return
*/
public Friendship friendshipGroupsMembers(String list_id, String cursor) throws TaskException {
Params params = new Params("list_id", list_id);
params.addParameter("count", getPageCount(getSetting("friendshipGroupsMembers")));
params.addParameter("cursor", cursor);
return doGet(getSetting("friendshipGroupsMembers"), params, Friendship.class);
}
/**
* 调整当前登录用户的好友分组顺序
*
* @param groupList
* @return
* @throws TaskException
*/
public GroupSortResult friendshipGroupsOrder(List<Group> groupList) throws TaskException {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < groupList.size(); i++) {
sb.append(groupList.get(i).getIdstr());
if (i != groupList.size() - 1)
sb.append(",");
}
Params params = new Params();
params.addParameter("count", String.valueOf(groupList.size()));
params.addParameter("list_ids", sb.toString());
HttpConfig config = getHttpConfig();
return doPost(config, getSetting("friendshipGroupsOrder"), null, params, null, GroupSortResult.class);
}
/**
* 根据移动基站WIFI等数据获取当前位置信息
*
* @return
* @throws TaskException
*/
public SinaLocationMap locationMobileGetLocation() throws TaskException {
Map<String, Object> requestMap = new HashMap<String, Object>();
// 请求版本信息
requestMap.put("version", "2.0");
// 请求地址信息
requestMap.put("host", "api.weibo.com");
// 请求类型
requestMap.put("radio_type", "gsm");
// 是否需要返回详细地址,可选,默认:false
requestMap.put("request_address", "true");
// 返回坐标是否偏移处理,偏移后坐标适合在新浪地图上使用(http://map.sina.com.cn),
// 不适用于百度地图(各地图偏移量不同,请谨慎处理);可选,默认:false
requestMap.put("decode_pos", "true");
TelephonyManager mTelNet = (TelephonyManager) GlobalContext.getInstance().getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation location = null;
if (mTelNet != null)
location = (GsmCellLocation) mTelNet.getCellLocation();
if (location != null) {
String operator = mTelNet.getNetworkOperator();
int mcc = Integer.parseInt(operator.substring(0, 3));
int mnc = Integer.parseInt(operator.substring(3));
List<NeighboringCellInfo> cellInfoList = mTelNet.getNeighboringCellInfo();
ArrayList<Map<String, Object>> cellMapList = new ArrayList<Map<String,Object>>();
for (NeighboringCellInfo cellInfo : cellInfoList) {
// 基站信息
Map<String, Object> cellMap = new HashMap<String, Object>();
// 基站号
cellMap.put("cell_id", location.getCid());
// 小区号
cellMap.put("location_area_code", cellInfo.getLac());
// 地区代码
cellMap.put("mobile_country_code", mcc);
// 运营商号
cellMap.put("mobile_network_code", mnc);
// 信号强度
cellMap.put("signal_strength", cellInfo.getRssi());
cellMapList.add(cellMap);
}
if (cellMapList.size() > 0)
requestMap.put("cell_towers", cellMapList);
}
WifiManager wm = (WifiManager) GlobalContext.getInstance().getSystemService(Context.WIFI_SERVICE);
List<ScanResult> scanResultList = wm.getScanResults();
if (scanResultList != null && scanResultList.size() > 0) {
ArrayList<Map<String, Object>> wifiMapList = new ArrayList<Map<String,Object>>();
for (ScanResult scanResult : scanResultList) {
// WIFI信息
Map<String, Object> wifiMap = new HashMap<String, Object>();
wifiMapList.add(wifiMap);
wifiMap.put("mac_address", scanResult.BSSID);
wifiMap.put("mac_name", scanResult.SSID);
// 信号强度
wifiMap.put("signal_strength", scanResult.level);
}
if (wifiMapList.size() > 0)
requestMap.put("wifi_towers", wifiMapList);
}
HttpConfig config = getHttpConfig();
Params params = new Params();
params.addParameter("json", JSON.toJSONString(requestMap));
return doPost(config, getSetting("locationMobileGetLocation"), null, params, null, SinaLocationMap.class);
}
/**
* 搜索用户时的联想搜索建议
*
* @param q
* @param count
* @return
* @throws TaskException
*/
public SuggestionsUser[] searchSuggestionsUsers(String q, int count) throws TaskException {
Params params = new Params();
params.addParameter("q", q);
if (count > 0)
params.addParameter("count", String.valueOf(count));
params.setEncodeAble(false);
return doGet(getSetting("searchSuggestionsUsers"), params, SuggestionsUser[].class);
}
/**
* 返回最近一小时内的热门话题
*
* @return
* @throws TaskException
*/
public TrendsBean trendsHourly() throws TaskException {
return doGet(getSetting("trendsHourly"), configParams(null), TrendsBean.class);
}
/**
* 返回最近一天内的热门话题
*
* @return
* @throws TaskException
*/
public TrendsBean trendsDaily() throws TaskException {
return doGet(getSetting("trendsDaily"), configParams(null), TrendsBean.class);
}
/**
* 返回最近一周内的热门话题
*
* @return
* @throws TaskException
*/
public TrendsBean trendsWeekly() throws TaskException {
return doGet(getSetting("trendsWeekly"), configParams(null), TrendsBean.class);
}
/**
* 获取私信列表
*
* @return
* @throws TaskException
*/
public DmMessages getDmMessage(String cursor, String source) throws TaskException {
Params params = new Params();
params.addParameter("count", "20");
params.addParameter("cursor", cursor);
params.addParameter("source", source);
DmMessages dms = doGet(getSetting("getDmMessage"), params, DmMessages.class);
return dms;
}
/**
* 获取私信对话
*
* @param cursor
* @param source
* @return
* @throws TaskException
*/
public DirectMessages getDmConversation(String uid, int page, String source) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("count", "30");
params.addParameter("source", source);
params.addParameter("page", String.valueOf(page));
DirectMessages dms = doGet(getSetting("getDmConversation"), params, DirectMessages.class);
return dms;
}
/**
* 发送私信
*
* @param uid
* @param text
* @return
* @throws TaskException
*/
public Boolean sendDmMessage(String uid, String text) throws TaskException {
Params params = new Params();
params.addParameter("uid", uid);
params.addParameter("text", text);
return doPost(getHttpConfig(), getSetting("sendDmMessage"), null, params, null, Boolean.class);
}
/**
* 根据id获取某条微博
*
* @param id
* @return
* @throws TaskException
*/
public StatusContent statusesShow(String id) throws TaskException {
Params params = new Params();
params.addParameter("id", id);
return doGet(getSetting("statusesShow"), params, StatusContent.class);
}
/**
* 获取当前登录用户及其所关注用户的最新微博的ID
*
* @return
* @throws TaskException
*/
public StatusesIds getFriendsTimelineIds(String sinceId) throws TaskException {
Params params = new Params();
if (!TextUtils.isEmpty(sinceId))
params.addParameter("since_id", sinceId);
params.addParameter("count", "100");
return doGet(getSetting("getFriendsTimelineIds"), params, StatusesIds.class);
}
/**
* 获取当前登录用户及其所关注用户的最新微博的ID
*
* @return
* @throws TaskException
*/
public StatusesIds getGroupsTimelineIds(String sinceId, String listId) throws TaskException {
Params params = new Params();
params.addParameter("since_id", sinceId);
params.addParameter("list_id", listId);
params.addParameter("count", "101");
return doGet(getSetting("getGroupsTimelineIds"), params, StatusesIds.class);
}
// {"bmiddle_pic":"http://ww1.sinaimg.cn/bmiddle/94389574jw1etl94fy67qj21kw0w0qjd.jpg","original_pic":"http://ww1.sinaimg.cn/large/94389574jw1etl94fy67qj21kw0w0qjd.jpg","pic_id":"94389574jw1etl94fy67qj21kw0w0qjd","thumbnail_pic":"http://ww1.sinaimg.cn/thumbnail/94389574jw1etl94fy67qj21kw0w0qjd.jpg"}
/**
* 上传一张图片<br/>
* 只支持高级权限
*
* @param file
* @return
* @throws TaskException
*/
public UploadPictureResultBean uploadPicture(File file) throws TaskException {
Params params = new Params();
MultipartFile[] files = file == null ? null : new MultipartFile[] { new MultipartFile("image/jpge", "pic", file) };
return doPostFiles(configHttpConfig(), getSetting("publishUploadPicture"), null, configParams(params), files, UploadPictureResultBean.class);
}
/**
* 使用H5页面的接口拉取数据
*
* @param q
* @param cookies
* @return
* @throws TaskException
*/
public String[] searchsSuggest(String q, String cookies) throws TaskException {
// http://m.weibo.cn/searchs/suggest?count=10&q=ann
Setting action = newSetting("searchsSuggest", "searchs/suggest", "获取搜索建议");
action.getExtras().put(BASE_URL, newSettingExtra(BASE_URL, "http://m.weibo.cn/", ""));
Params params = new Params();
params.addParameter("q", q);
params.addParameter("count", "5");
HttpConfig config = configHttpConfig();
config.cookie = cookies;
config.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
config.addHeader("Referer", "http://m.weibo.cn/searchs");
try {
// ["ana",["anastasia","T-ANA小芹","anastasia 修容","广安门医院官方微博","anastasia 高光"]]
String response = doPost(config, action, null, params, null, String.class);
response = AisenUtils.convertUnicode(response);
Logger.d("SinaSDK", response);
if (response.toLowerCase().indexOf("<html>") != -1) {
throw new TaskException("cookieinvalid", "网页版登录失效了");
}
// {"request":"/search/suggestions/all.php","error_code":"21405","error":"Operation timed out after 300 milliseconds with 0 bytes received url:http://i.api.weibo.com/users/show_batch.json"}
if (response.indexOf("error_code") != -1 && response.indexOf("error") != -1) {
JSONObject jsonRespone = JSONObject.parseObject(response);
throw new TaskException(jsonRespone.getString("error_code"), jsonRespone.getString("error"));
}
// {"ok":-100,"msg":"请先登录","url":"https://passport.weibo.cn/signin/welcome?entry=mweibo&r=http%3A%2F%2Fm.weibo.cn%2Fsearchs%2Fsuggest"}
else if (response.indexOf("ok") != -1 && response.indexOf("msg") != -1) {
JSONObject jsonRespone = JSONObject.parseObject(response);
throw new TaskException(jsonRespone.getString("ok"), jsonRespone.getString("msg"));
}
JSONArray jsonArray = JSON.parseArray(response);
JSONArray resultArray = jsonArray.getJSONArray(1);
String[] result = new String[resultArray.size()];
for (int i = 0; i < resultArray.size(); i++) {
result[i] = resultArray.getString(i);
}
return result;
} catch (Exception e) {
e.printStackTrace();
if (e instanceof TaskException) {
throw e;
}
}
return new String[0];
}
/**
* 使用H5页面查询用户
*
* @param q
* @param cookies
* @return
* @throws TaskException
*/
public ArrayList<SearchsResultUser> searchsResultUsers(String q, String cookies) throws TaskException {
ArrayList<SearchsResultUser> resultUsers = new ArrayList<>();
Setting action = newSetting("searchsResultUsers", "page/pageJson", "获取用户");
action.getExtras().put(BASE_URL, newSettingExtra(BASE_URL, "http://m.weibo.cn/", ""));
Params params = new Params();
// params.addParameter("containerid", "100103");
// params.addParameter("type", "3");
// params.addParameter("page", "1");
// params.addParameter("q", q);
// 我也搞不懂这个脑残接口到底怎么玩的
// http://m.weibo.cn/page/pageJson?containerid=100103type%3D3%26q%3Dwang&page=1
params.addParameter("containerid", "100103type%3D3%26q%3D" + q + "&page=1");
try {
HttpConfig config = getHttpConfig();
// config.cookie = cookies;
// config.addHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
// config.addHeader("Referer", "http://m.weibo.cn/searchs");
String response = doGet(config, action, params, String.class);
JSONObject responseJSON = JSONObject.parseObject(response);
int ok = responseJSON.getInteger("ok");
if (ok == 1) {
JSONArray cardsArray = responseJSON.getJSONArray("cards");
if (cardsArray.size() > 0) {
JSONObject cardGroupsObject = cardsArray.getJSONObject(1);
JSONArray cardGroupArray = cardGroupsObject.getJSONArray("card_group");
for (int i = 0; i < cardGroupArray.size(); i++) {
JSONObject cardGroup = cardGroupArray.getJSONObject(i);
SearchsResultUser user = new SearchsResultUser();
user.setDesc1(cardGroup.getString("desc1"));
user.setDesc2(cardGroup.getString("desc2"));
JSONObject userJSON = cardGroup.getJSONObject("user");
user.setId(userJSON.getString("id"));
user.setFollowing(userJSON.getBoolean("following"));
user.setFollow_me(userJSON.getBoolean("follow_me"));
user.setFansNum(userJSON.getString("fansNum"));
user.setScreen_name(userJSON.getString("screen_name"));
user.setDescription(userJSON.getString("description"));
user.setProfile_image_url(userJSON.getString("profile_image_url"));
user.setStatuses_count(userJSON.getInteger("statuses_count"));
user.setGender(userJSON.getString("gender"));
user.setRemark(userJSON.getString("remark"));
resultUsers.add(user);
}
}
}
} catch (Exception e) {
e.printStackTrace();
if (e instanceof TaskException) {
throw e;
}
}
return resultUsers;
}
/**
* H5接口搜索微博
*
* @param q
* @param page
* @param cookies
* @return
* @throws TaskException
*/
public ArrayList<StatusContent> searchsResultStatuss(String q, int page, String cookies) throws TaskException {
ArrayList<StatusContent> resultUsers = new ArrayList<>();
Setting action = newSetting("searchsResultUsers", "page/pageJson", "获取用户");
action.getExtras().put(BASE_URL, newSettingExtra(BASE_URL, "http://m.weibo.cn/", ""));
Params params = new Params();
params.addParameter("containerid", "100103type%3D2%26q%3D" + q + "&page=" + page);
try {
String response = doGet(getHttpConfig(), action, params, String.class);
JSONObject responseJSON = JSONObject.parseObject(response);
int ok = responseJSON.getInteger("ok");
if (ok == 1) {
JSONArray cardsArray = responseJSON.getJSONArray("cards");
for (int i = 0; i < cardsArray.size(); i++) {
JSONObject cardGroupsObject = cardsArray.getJSONObject(i);
JSONArray cardGroupArray = cardGroupsObject.getJSONArray("card_group");
for (int j = 0; j < cardGroupArray.size(); j++) {
JSONObject cardGroup = cardGroupArray.getJSONObject(j);
JSONObject mblogObject = cardGroup.getJSONObject("mblog");
StatusContent content = JSON.parseObject(mblogObject.toJSONString(), StatusContent.class);
// 图片
if (mblogObject.containsKey("pics")) {
JSONArray picsArray = mblogObject.getJSONArray("pics");
if (picsArray != null && picsArray.size() > 0) {
PicUrls picUrls = new PicUrls();
picUrls.setThumbnail_pic(picsArray.getJSONObject(0).getString("url"));
content.setPic_urls(new PicUrls[]{ picUrls });
}
}
// 把Html5文本转换一下
content.setText(Html.fromHtml(content.getText()).toString());
if (content.getRetweeted_status() != null) {
content.getRetweeted_status().setText(Html.fromHtml(content.getRetweeted_status().getText()).toString());
}
// 把时间转换一下
try {
Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
SimpleDateFormat format = new SimpleDateFormat("MM-dd HH:mm");
calendar.setTimeInMillis(format.parse(content.getCreated_at()).getTime());
calendar.set(Calendar.YEAR, year);
content.setCreated_at(calendar.getTimeInMillis() + "");
} catch (ParseException e) {
try {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm");
content.setCreated_at(format.parse(content.getCreated_at()).getTime() + "");
} catch (ParseException ewe) {
}
}
resultUsers.add(content);
}
}
}
} catch (Exception e) {
e.printStackTrace();
if (e instanceof TaskException) {
throw (TaskException) e;
}
}
return resultUsers;
}
protected String getPageCount(Setting setting) {
return SettingUtil.getSettingValue(setting, "page_count");
}
}