批量删除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); }
水平有限,大牛勿喷~~~
留言评论(旧系统):