批量删除QQ微博之简易Java版
浮萍 | 2015-02-06 16:59
写了半天,发表的时候竟然出错了,然后不得不重新写一次。。。。
PS:以后发表前要先备份呀。
先上代码吧。
/**
* 发表微博
* @param content 微博内容
*/
public static void publishWeiBo(String content){
Map<String, String> map = new HashMap<String, String>();
map.put("adRich", "0");
map.put("apiType", "14");
map.put("attips", "");
map.put("content",content);
map.put("countType", "");
map.put("endTime", System.currentTimeMillis()+"");
map.put("g_tk", "2029340091");
map.put("pgv_ref", "web.base.master.talkBox.btnMyHome");
map.put("pic", "");
map.put("startTime", System.currentTimeMillis()+"");
map.put("syncQQSign", "0");
map.put("syncQzone", "0");
map.put("viewModel", "");
try {
Document doc = Jsoup.connect("http://api.t.qq.com/old/publish.php").
timeout(5000).cookie("Cookie", "你的Cookie").
data(map).referrer("http://api.t.qq.com/proxy.html").post();
System.out.println(doc.text());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取微博ID集合
* @param pageUrl 页面的url
* @[link href=\"http://zone.wooyun.org/user/return\"]return[/link] 微博ID集合
* @throws IOException
*/
public static List<String> getId(String pageUrl) throws IOException{
List<String> lt = new ArrayList<String>();
Document doc = Jsoup.connect(pageUrl).
timeout(5000).cookie("Cookie", 你的Cookie").get();
Elements nickName = doc.select("a.time");
for (Element element : nickName) {
lt.add(element.attr("href").substring(("http://t.qq.com/p/t/").length()));
}
[link href=\"http://zone.wooyun.org/user/return\"]return[/link] lt;
}
/**
* 删除微博
* @param id 微博的ID
* @throws UnsupportedEncodingException
*/
public static void del(String id) throws UnsupportedEncodingException{
Map<String, String> map = new HashMap<String, String>();
map.put("apiHost", URLDecoder.decode("http://api.t.qq.com", "utf-8"));
map.put("apiType", "14");
map.put("g_tk", "567453375");
map.put("id", id);
try {
Document doc = Jsoup.connect("http://api.t.qq.com/old/delete.php").
timeout(5000).cookie("Cookie", "你的Cookie").
data(map).referrer("http://api.t.qq.com/proxy.html").post();
System.out.println(doc.text());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我采用的Java,使用了jsoup-1.7.3.jar包。
今天看到自己的微博,竟然一千多条,而且大多都是转载,就想着给删除了。通过一番搜索,感觉大多数工具不靠谱,于是就自己写了一个。
我没有写登录,直接使用了Cookie。
由于我的微博已经全部被删除了,于是就先写了几条,当然,采用了批处理。
采用了publishWeiBo(String content)
但是由于账号是小号的缘故,会提示{"result":-22,"msg":"请进行实名认证"}这样的错误,于是就不再写了。
几条足可。
然后打开http://t.qq.com/XXXX/mine页面
首先通过Jsoup.connect(String url).get()获取一个Document。
然后对Document进行操作。
根据class="time"的超链接来获取微博的URL
Elements nickName = doc.select("a.time");
然后对每条微博的URL进行截取,来获取微博的ID,即http://t.qq.com/p/t/XXXX中XXXX部分。
然后将获取的ID放入List集合中。
删除微博时需要四个参数。
apiHost http://api.t.qq.com apiType 14 g_tk 2029340091 id 微博ID
需要注意的是,删除时要带上referrer,不然会删除不成功。
在批量删除时,可以将调用删除的方法写在while或者for循环中。
当返回信息{result:0,msg:'删除成功',info:'1'}时表示删除成功。
有时候会出现频繁删除,提示输入验证码,只需在页面删除一条记录时输入验证码即可。
http://t.qq.com/XXXX/mine?filter=3 表示是评论别人微博的页面
http://t.qq.com/XXXX/mine 表示自己微博的页面,包括图片、视频等
这个URL在getId(String url)中使用
批量发表时,可以加上Thread.sleep(1000);不然会提示发表过快。
List<String> lt = QQWeiBo.getId("http://t.qq.com/XXXX/mine");
//List<String> lt = QQWeiBo.getId("http://t.qq.com/XXXX/mine?filter=3");
for (String string : lt) {
QQWeiBo.del(string);
}
水平有限,大牛勿喷~~~
留言评论(旧系统):
