/** * http://auzll.iteye.com/ */ package com.gengweibo.weibo; import static com.gengweibo.weibo.Weibo.Method.GET; import static com.gengweibo.weibo.Weibo.Method.POST; import java.util.Collection; import java.util.List; import java.util.Map; import net.oauth.OAuth; import net.oauth.OAuth.Parameter; import net.oauth.OAuthConsumer; import net.oauth.OAuthMessage; import net.oauth.ParameterStyle; import net.oauth.client.OAuthClient; import net.oauth.client.URLConnectionClient; import net.oauth.http.HttpMessage; import org.json.JSONException; import org.json.JSONObject; import com.google.inject.internal.Lists; /** * @author auzll@msn.com * @since 2011-3-16 */ public class WeiboQQ extends Weibo implements IWeibo { /** */ private static final long serialVersionUID = 5345772573791707652L; public WeiboQQ() { super("https://open.t.qq.com/cgi-bin/request_token", "https://open.t.qq.com/cgi-bin/authorize", "https://open.t.qq.com/cgi-bin/access_token", "http://open.t.qq.com/api/", OAuthProperty.getCallbackUrl(), OAuthProperty.CONSUMER_KEY_QQ, OAuthProperty.CONSUMER_SECRET_QQ, WeiboType.T_QQ); } public Response favoritesCreate(IParam param) { String id = param.getParamValue("statusId"); return sendRequest(toRequestParam("format", "json").add("id", id), urlResource + "fav/addt", POST); } public Response friendshipsCreate(IParam param) { String name = param.getParamValue("userId"); return sendRequest(toRequestParam("format", "json").add("name", name), urlResource + "friends/add", POST); } public Response friendshipsDestroy(IParam param) { String name = param.getParamValue("userId"); return sendRequest(toRequestParam("format", "json").add("name", name), urlResource + "friends/del", POST); } public Response homeTimeline(IParam param) { RequestParam reqParam = toRequestParam("reqnum", parseLegalPageCount(param.getParamValue("count"))).add( "format", "json"); if (null != param.getParamValue("pagetime")) { reqParam.add("pagetime", param.getParamValue("pagetime")); } if (null != param.getParamValue("pageflag")) { reqParam.add("pageflag", param.getParamValue("pageflag")); } /* * pageflag 分页标识(0:第一页,1:向下翻页,2向上翻页) pagetime 本页起始时间(第一页 * 0,继续:根据返回记录时间决定) */ return sendRequest(reqParam, urlResource + "statuses/home_timeline", GET); } public String makeClickUrl() throws WeiException { OAuthClient client = new OAuthClient(new URLConnectionClient()); try { List<Map.Entry<?, ?>> parameters = Lists.newArrayList(); String callback = accessor.consumer.callbackURL; if (null == callback) { callback = "null"; } parameters.add(new OAuth.Parameter("oauth_callback", callback)); client.getRequestToken(accessor, null, parameters); } catch (Exception e) { throw new WeiException(e); } Collection<Parameter> parameters = Lists.newArrayList(); parameters.add(new Parameter("oauth_token", accessor.requestToken)); try { OAuthMessage request = accessor.newRequestMessage(GET.toString(), accessor.consumer.serviceProvider.userAuthorizationURL, parameters); Object accepted = accessor.consumer .getProperty(OAuthConsumer.ACCEPT_ENCODING); if (accepted != null) { request.getHeaders().add( new OAuth.Parameter(HttpMessage.ACCEPT_ENCODING, accepted.toString())); } Object ps = accessor.consumer .getProperty(OAuthClient.PARAMETER_STYLE); ParameterStyle style = (ps == null) ? ParameterStyle.BODY : Enum .valueOf(ParameterStyle.class, ps.toString()); HttpMessage httpRequest = HttpMessage.newRequest(request, style); return httpRequest.url.toString(); } catch (Exception e) { throw new WeiException(e); } } public Response statusesComments(IParam param) { RequestParam reqParam = toRequestParam("reqnum", PAGE_MAX).add( "format", "json") .add("rootid", param.getParamValue("statusId")); // TODO /** * rootid 转发或者回复根结点id pageflag (根据dwtime),0:第一页,1:向下翻页,2向上翻页; pagetime * 起始时间戳,上下翻页时才有用,取第一页时忽略; */ if (null != param.getParamValue("pagetime")) { reqParam.add("pagetime", param.getParamValue("pagetime")); } if (null != param.getParamValue("pageflag")) { reqParam.add("pageflag", param.getParamValue("pageflag")); } return sendRequest(reqParam, urlResource + "t/re_list", GET); } public Response statusesDestroy(IParam param) { String id = param.getParamValue("statusId"); return sendRequest(toRequestParam("format", "json").add("id", id), urlResource + "t/del", POST); } public Response statusesReply(IParam param) { String id = param.getParamValue("statusId"); String status = param.getParamValue("status"); return sendRequest( toRequestParam("format", "json").add("reid", id) .add("content", status) .add("clientip", param.getParamValue("clientip")), urlResource + "t/re_add", POST); } public Response statusesRetweet(IParam param) { String id = param.getParamValue("statusId"); RequestParam reqParam = toRequestParam("format", "json") .add("reid", id).add("clientip", param.getParamValue("clientip")); if (null != param.getParamValue("status")) { reqParam.add("content", param.getParamValue("status")); } return sendRequest(reqParam, urlResource + "t/re_add", POST); } public Response statusesUpdate(IParam param) { return sendRequest( toRequestParam("format", "json").add("content", param.getParamValue("status")).add("clientip", param.getParamValue("clientip")), urlResource + "t/add", POST); } public Response verifyCredentials() { return sendRequest(toRequestParam("format", "json"), urlResource + "user/info", GET); } public void bindWeiboAccountContext() { if (null == weiboId && null == weiboAccountName) { Response response = verifyCredentials(); try { JSONObject jsonObject = new JSONObject( response.readBodyAsString()); weiboId = type.getEnName() + "_" + jsonObject.getJSONObject("data").getString("name"); weiboAccountName = jsonObject.getJSONObject("data").getString( "nick"); } catch (JSONException e) { throw new WeiException(e); } } } public Response statusesMentions(IParam param) { RequestParam reqParam = toRequestParam("reqnum", parseLegalPageCount(param.getParamValue("count"))).add( "format", "json"); if (null != param.getParamValue("pagetime")) { reqParam.add("pagetime", param.getParamValue("pagetime")); } if (null != param.getParamValue("pageflag")) { reqParam.add("pageflag", param.getParamValue("pageflag")); } return sendRequest(reqParam, urlResource + "statuses/mentions_timeline", GET); } public Response statusesCommentsToMe(IParam param) { // 腾讯无此api return null; } }