加班结束~自动监控论坛新问题并跳转,适合互助团队

我是社区第55902位番薯,欢迎点我头像关注我哦~
本帖最后由 迈达斯之手 于 2017-2-27 18:25 编辑

刚刚逛了下论坛~看见你们这个答题都这么积极~写了一个小工具~热心答题的自己拿去编译运行吧~
功能蛮简单的~就是只要有人一提问~就会自动打开浏览器并跳转到新问题的界面~
1.jpg 顺便做了一个小工具~这个就不放出来了~很简单大家可以尝试一下~代码在21楼~自己写两个按钮控制一下就OK了~
新版代码在21楼:太久没用,发现旧代码不能用了
http://bbs.fanruan.com/forum.php?mod=redirect&goto=findpost&ptid=83301&pid=387646
  1. package com.hg.bbshelper;


  2. public class StartHelper {
  3.         
  4.         public static void main(String[]args){
  5.                 while(true){
  6.                         MutliThread m1= new MutliThread();
  7.                         m1.start();
  8.                         try {
  9.                                 Thread.currentThread().sleep(200000);
  10.                         } catch (InterruptedException e) {
  11.                                 
  12.                         }
  13.                 }
  14.         }
  15.         
  16. }
复制代码
上面是主类~没啥特别的就是弄个线程一直监视网络就行~下面是爬虫
  1. package com.hg.bbshelper;

  2. import org.jsoup.Jsoup;
  3. import org.jsoup.nodes.Document;
  4. import org.jsoup.nodes.Element;
  5. import org.jsoup.select.Elements;

  6. import com.hg.bbshelper.bean.Question;

  7. public class MutliThread extends Thread{
  8.         public void run(){
  9.                 try {
  10.                         while(true){
  11.                                 Document doc = Jsoup.connect("http://bbs.fanruan.com/forum-39-1.html").get();
  12.                             Element body = doc.body();
  13.                             Elements el = body.getElementsByClass("threadlist");
  14.                             Elements liList = el.get(0).getElementsByTag("li");
  15.                             for(Element li : liList){
  16.                                     new Question(li);
  17.                             }
  18.                 sleep(2000);
  19.             }
  20.         } catch (Exception e) {
  21.             System.out.println(e.getMessage());
  22.             e.printStackTrace();
  23.         }
  24.     }
  25. }
复制代码
最后就是扫描问题跳转网页了~
  1. package com.hg.bbshelper.bean;

  2. import java.io.IOException;
  3. import java.util.HashMap;
  4. import java.util.Map;

  5. import org.jsoup.nodes.Element;

  6. public class Question {
  7.         private String userName = "";
  8.         private String askDate = "";
  9.         private int scanCount = 0;
  10.         private int answerCount = 0;
  11.         private String title = "";
  12.         private String content = "";
  13.         public String getUserName() {
  14.                 return userName;
  15.         }
  16.         public void setUserName(String userName) {
  17.                 this.userName = userName;
  18.         }
  19.         public String getAskDate() {
  20.                 return askDate;
  21.         }
  22.         public void setAskDate(String askDate) {
  23.                 this.askDate = askDate;
  24.         }
  25.         public int getScanCount() {
  26.                 return scanCount;
  27.         }
  28.         public void setScanCount(int scanCount) {
  29.                 this.scanCount = scanCount;
  30.         }
  31.         public int getAnswerCount() {
  32.                 return answerCount;
  33.         }
  34.         public void setAnswerCount(int answerCount) {
  35.                 this.answerCount = answerCount;
  36.         }
  37.         public String getTitle() {
  38.                 return title;
  39.         }
  40.         public void setTitle(String title) {
  41.                 this.title = title;
  42.         }
  43.         public String getContent() {
  44.                 return content;
  45.         }
  46.         public void setContent(String content) {
  47.                 this.content = content;
  48.         }
  49.         private String[] initNum(Element replies){
  50.                 String src = replies.html();
  51.                 String t1 = replies.getElementsByClass("fa-comments-o").outerHtml();
  52.                 String t2 = replies.getElementsByClass("fa-eye").outerHtml();
  53.                 src = src.replaceAll(t1, " ");
  54.                 src = src.replaceAll(t2, " ");
  55.                 src = src.replaceAll("  ", " ");
  56.                 src = src.replaceAll("  ", " ");
  57.                 src = src.replaceAll("  ", " ");
  58.                 if(src.startsWith(" ")){
  59.                         src = src.replaceFirst(" ", "");
  60.                 }
  61.                 return src.split(" ");
  62.         }
  63.         private String url = "";
  64.         private void init(Element li){
  65.                 userName = li.getElementsByClass("username").get(0).html();
  66.                 Element replies = li.getElementsByClass("replies").get(0);
  67.                 String[] ct = initNum(replies);
  68.                 answerCount = Integer.parseInt(ct[0]);
  69.                 scanCount = Integer.parseInt(ct[1]);
  70.                 askDate = li.getElementsByClass("datetime").get(0).html().replaceAll(" ", "");
  71.                 title = li.getElementsByTag("h3").get(0).html().replaceAll("&", "&");
  72.                 url = li.getElementsByTag("a").get(0).attr("href");
  73.                 int pos = url.indexOf("&extra");
  74.                 url = url.substring(0,pos);
  75.         }
  76.         public static Map<String,String> qst = new HashMap<String,String>();
  77.         public Question(Element li){
  78.                 init(li);
  79.                 if(answerCount==0 && !qst.containsKey(title)){
  80.                         try {
  81.                                 qst.put(title, url);
  82.                                 Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler http://bbs.fanruan.com/"+url);
  83.                         } catch (IOException e) {
  84.                         }
  85.                 }
  86.         }
  87. }
复制代码

下面是依赖的JAR包
jsoup-1.10.1.jar (337.49 KB, 下载次数: 12)
参与人数 +6 F豆 +888 +10 F币 +10 理由
李半仙 + 66 很给力!
星痕 + 88 感谢哥的分享
传说哥 + 666 + 10 + 10 感谢分享
windy_gui + 1 666
luker + 1 感谢分享
yets11 + 66 66

查看全部评分

发表于 2016-12-6 21:41:13
大神辛苦了啊
发表于 2016-12-6 21:50:08
大神你真的是一言不合就写个小工具啊
发表于 2016-12-6 22:04:33
貌似有个BUG~时间长了连接会中断~得改呀~{:8_219:}
发表于 2016-12-6 22:17:46
discuz论坛貌似有个api可以直接取到新帖子,效率可能会高很多
发表于 2016-12-6 22:21:58
迈达斯之手 发表于 2016-12-6 22:04
貌似有个BUG~时间长了连接会中断~得改呀~

哥啊,啥也别说,以后你有好东西一定要推荐给我,无论大小!
发表于 2016-12-6 22:30:02
星星,话说你的echarts找大神了吗@星痕
发表于 2016-12-6 22:34:08
迈达斯之手 发表于 2016-12-6 22:27
话说我做的东西通常都是心血来潮做一半~然后就扔了~~你要有啥需求提出来我瞅瞅~感兴趣就干了~{: ...

没钱啊,这是关键,没事,以后有东西写完了邮件发我就行!哥,我支持你
发表于 2016-12-6 22:34:41
yets11 发表于 2016-12-6 22:30
星星,话说你的echarts找大神了吗@星痕

别提了……话说我都忘了大神是谁了
发表于 2016-12-6 22:56:45
666
发表于 2016-12-7 09:00:55
大神果然都是一言不合就写小工具的节奏~~~~
发表于 2016-12-7 09:21:34
我只是路过打酱油的,嘿嘿
发表于 2016-12-9 12:41:03
哥,你让我崇拜啊,真是一言不和 就开挂啊。
发表于 2016-12-12 17:18:19
哈哈哈,我用了,挺好使,立马给我弹了,这下就不怕抢不到问题了,哈哈哈
发表于 2016-12-20 23:24:59
6666666666
发表于 2017-2-27 16:59:57
  1. package com.hg.bbshelper;

  2. import java.util.HashMap;
  3. import java.util.Map;

  4. import org.jsoup.Jsoup;
  5. import org.jsoup.nodes.Document;
  6. import org.jsoup.nodes.Element;
  7. import org.jsoup.select.Elements;


  8. public class MutliThread extends Thread{
  9.        
  10.         private Elements getDocByClazz(String url,String clazz){
  11.                 try{
  12.                         Document doc = Jsoup.connect(url).get();
  13.                         return doc.body().getElementsByClass(clazz);
  14.                 }catch(Exception e){
  15.                        
  16.                 }
  17.                 return null;
  18.         }
  19.        
  20.         private void checkQuestions(String pageNum) throws Exception{
  21.                 Elements qstListA = getDocByClazz(
  22.                         "http://bbs.fanruan.com/forum.php?mod=forumdisplay&fid=39&typeid=1&filter=typeid&typeid=1&page="+pageNum,
  23.                         "cell-flat");
  24.                 for(Element qst : qstListA){
  25.                         String[] url = qst.attr("href").split("/");
  26.                         String tid = url[url.length-1];
  27.                         if(qsts.containsKey(tid)){
  28.                                 continue;
  29.                         }
  30.                         qsts.put(tid, tid);
  31.                         Elements ansList = getDocByClazz("http://bbs.fanruan.com/forum.php?mod=viewthread&tid="+tid,"cell-new-comment");
  32.                         if(ansList.size()<1){
  33.                                 Runtime.getRuntime().exec("rundll32 url.dll,FileProtocolHandler http://bbs.fanruan.com/forum.php?mod=viewthread&tid="+tid);
  34.                         }
  35.                 }
  36.         }
  37.        
  38.         public static Map<String,String> qsts = new HashMap<String,String>();
  39.        
  40.         public void run(){
  41.                 while(true){
  42.                         try {
  43.                                 //总共要检测多少页,一般设置1页就好,后面的问题基本上都被回答过
  44.                                 int checkPageSzie = 1;
  45.                                 for(int i=1;i<=checkPageSzie;i++){
  46.                                         //检查每一页的问题,只要发现没有被回答过的就直接打开
  47.                                         checkQuestions(i+"");
  48.                                 }
  49.                                 sleep(2000);
  50.                         } catch (Exception e) {}
  51.                 }
  52.         }
  53. }
复制代码
新版代码,简化了一些监视不需要的逻辑问题类可以删掉了~

发表于 2017-3-1 14:50:57
厉害啦大神!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

16回帖数 1关注人数 2576浏览人数
最后回复于:2017-3-1 14:50

返回顶部 返回列表