package li.qq3g;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.jsoup.Jsoup;
public class QQ3G {
private static final String UTF8 = "UTF-8";
private static final HttpClient HTTP_CLIENT = new DefaultHttpClient();
/**
* 登陆
*/
public String login(String username, String password) {
String referer = "http://pt.3g.qq.com/s?aid=nLogin3gqq&auto=1&s_it=1&g_f=286&sid=AfSsoTvRoUqcOGuBitGc2anf";
String action = "http://pt.3g.qq.com/psw3gqqLogin?r=155089860&vdata=61EC3202AA4BB9CDB7D3068575C6DC30";
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("qq", username));
formParams.add(new BasicNameValuePair("pwd", password));
formParams.add(new BasicNameValuePair("toQQchat", "true"));
formParams.add(new BasicNameValuePair("login_url", "http://pt.3g.qq.com/s?aid=nLoginnew&q_from=3GQQ"));
formParams.add(new BasicNameValuePair("q_from", ""));
formParams.add(new BasicNameValuePair("modifySKey", "0"));
formParams.add(new BasicNameValuePair("loginType", "1"));
formParams.add(new BasicNameValuePair("aid", "nLoginHandle"));
HttpPost post = new HttpPost(action);
post.setHeader("Referer", referer);
post.setEntity(urlEncodedFormEntity(formParams, UTF8));
String redirect = content(execute(HTTP_CLIENT, post).getEntity());
return Jsoup.parse(redirect).select("a").attr("href");
}
/**
* 刷新消息列表页
*/
public String refreshChat(String sid, String qq) {
String url = "http://q32.3g.qq.com/g/s?sid=" + sid + "&aid=nqqChat&u=" + qq + "&on=1";
return content(execute(HTTP_CLIENT, new HttpGet(url)).getEntity());
}
/**
* 发送QQ消息
*/
public String send(String sid, String msg, String to) {
String referer = "http://q32.3g.qq.com/g/s?sid=" + sid + "&aid=nqqChat&u=" + to + "&on=1";
String action = "http://q32.3g.qq.com/g/s?sid=" + sid;
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("msg", msg));
formParams.add(new BasicNameValuePair("u", to));
formParams.add(new BasicNameValuePair("saveURL", "0"));
formParams.add(new BasicNameValuePair("do", "send"));
formParams.add(new BasicNameValuePair("on", "1"));
formParams.add(new BasicNameValuePair("saveURL", "0"));
formParams.add(new BasicNameValuePair("aid", "发送"));
formParams.add(new BasicNameValuePair("num", to));
formParams.add(new BasicNameValuePair("do", "sendsms"));
HttpPost post = new HttpPost(action);
post.setHeader("Referer", referer);
post.setEntity(urlEncodedFormEntity(formParams, UTF8));
return content(execute(HTTP_CLIENT, post).getEntity());
}
/**
* 在线好友列表,翻页
*/
public String online(String sid) {
String url = "http://q32.3g.qq.com/g/s?sid=" + sid + "&aid=nqqchatMain";
return content(execute(HTTP_CLIENT, new HttpGet(url)).getEntity());
}
/**
* 最近联系好友
*/
public String recent(String sid) {
String url = "http://q32.3g.qq.com/g/s?sid=" + sid + "&aid=nqqRecent";
return content(execute(HTTP_CLIENT, new HttpGet(url)).getEntity());
}
/**
* 好友分组
*/
public String groups(String sid) {
String url = "http://q32.3g.qq.com/g/s?sid=" + sid + "&aid=nqqGroup";
return content(execute(HTTP_CLIENT, new HttpGet(url)).getEntity());
}
/**
* 一个组的好友列表,翻页
*/
public String group(String sid, String groupName, String groupId, String groupIndex, String pid) {
String action = "http://q16.3g.qq.com/g/s?sid=" + sid;
List<NameValuePair> formParams = new ArrayList<NameValuePair>();
formParams.add(new BasicNameValuePair("aid", "nqqGrpF"));
formParams.add(new BasicNameValuePair("name", groupName));
formParams.add(new BasicNameValuePair("id", groupId));
formParams.add(new BasicNameValuePair("pid", pid));
formParams.add(new BasicNameValuePair("gindex", groupIndex));
HttpPost post = new HttpPost(action);
post.setEntity(urlEncodedFormEntity(formParams, UTF8));
return content(execute(HTTP_CLIENT, post).getEntity());
}
/**
* 组装http请求的form表单
*/
private static HttpEntity urlEncodedFormEntity(List<NameValuePair> formParams, String charset) {
try {
return new UrlEncodedFormEntity(formParams, charset);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 执行http请求
*/
private static HttpResponse execute(HttpClient client, HttpUriRequest request) {
try {
return client.execute(request);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
/**
* 提取页面内容文本
*/
private static String content(HttpEntity entity) {
try {
return EntityUtils.toString(entity);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}