package com.mime.qweibo.examples; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.List; import java.util.Map; import android.content.Context; import android.content.Intent; import android.net.Uri; import com.mime.qweibo.OauthKey; import com.mime.qweibo.QAsyncHandler; import com.mime.qweibo.QParameter; import com.mime.qweibo.QWeiboRequest; import com.mime.qweibo.examples.QWeiboType.PageFlag; import com.mime.qweibo.examples.QWeiboType.ResultType; import com.mime.qweibo.utils.QHttpUtil; public class QWeiboAsyncApi implements QAsyncHandler { private MyWeiboASync weibo; private Context context; public QWeiboAsyncApi(MyWeiboASync weibo,Context context) { this.weibo = weibo; this.context = context; } public Context getContext() { return context; } public void setContext(Context context) { this.context = context; } public MyWeiboASync getWeibo() { return weibo; } public void setWeibo(MyWeiboASync weibo) { this.weibo = weibo; } @Override public void onThrowable(Throwable t, Object cookie) { System.err.println(cookie.toString() + ":" + t.getLocalizedMessage()); } @Override public void onCompleted(int statusCode, String content, Object cookie) { System.out.println("success:" + cookie.toString()); System.out.println("code:" + statusCode); System.out.println("content:" + content); Map<String, String> map = QHttpUtil.splitResponse(content); if(content.indexOf("oauth_token")!=-1){ if(content.indexOf("oauth_callback_confirmed")!=-1){//request token weibo.tokenKey = map.get("oauth_token"); weibo.tokenSecrect = map.get("oauth_token_secret"); weibo.authorizeUrl = "http://open.t.qq.com/cgi-bin/authorize?oauth_token=" + weibo.tokenKey; System.out.println(weibo.authorizeUrl); Uri uri = Uri.parse(weibo.authorizeUrl); context.startActivity(new Intent(Intent.ACTION_VIEW,uri)); }else{ //处理access token weibo.accessTokenKey = map.get("oauth_token"); weibo.accessTokenSecrect = map.get("oauth_token_secret"); } }else{ } } /** * Asynchronously get request token. * * @param customKey * Your AppKey. * @param customSecret * Your AppSecret. * @return Whether request has started. */ public boolean getRequestToken(String customKey, String customSecret) { String url = "https://open.t.qq.com/cgi-bin/request_token"; List<QParameter> parameters = new ArrayList<QParameter>(); OauthKey oauthKey = new OauthKey(); oauthKey.customKey = customKey; oauthKey.customSecrect = customSecret; //The OAuth Call back URL(You should encode this url if it //contains some unreserved characters). //oauthKey.callbackUrl = "http://www.qq.com"; //oauthKey.callbackUrl = "null"; oauthKey.callbackUrl = "testapp://authorizeActivity"; QWeiboRequest request = new QWeiboRequest(); return request.asyncRequest(url, "GET", oauthKey, parameters, null, this, "getRequestToken"); } /** * Asynchronously get access token. * * @param customKey * Your AppKey. * @param customSecret * Your AppSecret * @param requestToken * The request token. * @param requestTokenSecret * The request token Secret * @param verify * The verification code. * @return Whether request has started. */ public boolean getAccessToken(String customKey, String customSecret, String requestToken, String requestTokenSecret, String verify) { String url = "https://open.t.qq.com/cgi-bin/access_token"; List<QParameter> parameters = new ArrayList<QParameter>(); OauthKey oauthKey = new OauthKey(); oauthKey.customKey = customKey; oauthKey.customSecrect = customSecret; oauthKey.tokenKey = requestToken; oauthKey.tokenSecrect = requestTokenSecret; oauthKey.callbackUrl = "testapp://authorizeActivity"; oauthKey.verify = verify; QWeiboRequest request = new QWeiboRequest(); return request.asyncRequest(url, "GET", oauthKey, parameters, null, this, "getAccessToken"); } /** * Asynchronously get home page messages. * * @param customKey * Your AppKey * @param customSecret * Your AppSecret * @param requestToken * The access token * @param requestTokenSecret * The access token secret * @param format * Response format, xml or json * @param pageFlag * Page number. * @param nReqNum * Number of messages you want. * @return Whether request has started. */ public boolean getHomeMsg(String customKey, String customSecret, String requestToken, String requestTokenSecret, ResultType format, PageFlag pageFlag, int nReqNum) { String url = "http://open.t.qq.com/api/statuses/home_timeline"; List<QParameter> parameters = new ArrayList<QParameter>(); OauthKey oauthKey = new OauthKey(); oauthKey.customKey = customKey; oauthKey.customSecrect = customSecret; oauthKey.tokenKey = requestToken; oauthKey.tokenSecrect = requestTokenSecret; String strFormat = null; if (format == ResultType.ResultType_Xml) { strFormat = "xml"; } else if (format == ResultType.ResultType_Json) { strFormat = "json"; } else { strFormat = "json"; } parameters.add(new QParameter("format", strFormat)); parameters.add(new QParameter("pageflag", String.valueOf(pageFlag .ordinal()))); parameters.add(new QParameter("reqnum", String.valueOf(nReqNum))); QWeiboRequest request = new QWeiboRequest(); return request.asyncRequest(url, "GET", oauthKey, parameters, null, this, "getHomeMsg"); } /** * Asynchronously publish a Weibo message. * * @param customKey * Your AppKey * @param customSecret * Your AppSecret * @param requestToken * The access token * @param requestTokenSecrect * The access token secret * @param content * The content of your message * @param pic * The files of your images. * @param format * Response format, xml or json(Default). * @return Whether request has started. */ public boolean publishMsg(String customKey, String customSecret, String requestToken, String requestTokenSecrect, String content, String pic, ResultType format) { List<QParameter> files = new ArrayList<QParameter>(); String url = null; String httpMethod = "POST"; if (pic == null || pic.trim().equals("")) { url = "http://open.t.qq.com/api/t/add"; } else { url = "http://open.t.qq.com/api/t/add_pic"; files.add(new QParameter("pic", pic)); } OauthKey oauthKey = new OauthKey(); oauthKey.customKey = customKey; oauthKey.customSecrect = customSecret; oauthKey.tokenKey = requestToken; oauthKey.tokenSecrect = requestTokenSecrect; List<QParameter> parameters = new ArrayList<QParameter>(); String strFormat = null; if (format == ResultType.ResultType_Xml) { strFormat = "xml"; } else if (format == ResultType.ResultType_Json) { strFormat = "json"; } else { strFormat = "json"; } parameters.add(new QParameter("format", strFormat)); try { parameters.add(new QParameter("content", new String(content .getBytes("UTF-8")))); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); return false; } parameters.add(new QParameter("clientip", "10.0.2.2")); QWeiboRequest request = new QWeiboRequest(); return request.asyncRequest(url, httpMethod, oauthKey, parameters, files, this, "publishMsg"); } }