设为首页 - 加入收藏 ASP站长网(Aspzz.Cn)- 科技、建站、经验、云计算、5G、大数据,站长网!
热搜: 创业者 数据 手机
当前位置: 首页 > 运营中心 > 网站设计 > 正文

详细Java批量获取微信公众号方法(3)

发布时间:2021-02-21 17:01 所属栏目:12 来源:网络整理
导读:处理公众号历史页数据方法: public void getMsgJson(String str,String url) throws UnsupportedEncodingException { // TODO Auto-generated method stub String biz = ""; MapString,String queryStrs = HttpUrl

处理公众号历史页数据方法:

public void getMsgJson(String str,String url) throws UnsupportedEncodingException {
    // TODO Auto-generated method stub
    String biz = "";
    Map<String,String> queryStrs = HttpUrlParser.parseUrl(url);
    if(queryStrs != null){
      biz = queryStrs.get("__biz");
      biz = biz + "==";
    }
    /**
     * 从数据库中查询biz是否已经存在,如果不存在则插入,
     * 这代表着我们新添加了一个采集目标公众号。
     */
    List<WeiXin> results = weiXinMapper.selectByBiz(biz);
    if(results == null || results.size() == 0){
      WeiXin weiXin = new WeiXin();
      weiXin.setBiz(biz);
      weiXin.setCollect(System.currentTimeMillis());
      weiXinMapper.insert(weiXin);
    }
    //System.out.println(str);
    //解析str变量
    List<Object> lists = JsonPath.read(str,"['list']");
    for(Object list : lists){
      Object json = list;
      int type = JsonPath.read(json,"['comm_msg_info']['type']");
      if(type == 49){//type=49表示是图文消息
        String content_url = JsonPath.read(json,"$.app_msg_ext_info.content_url");
        content_url = content_url.replace("\\","").replaceAll("amp;","");//获得图文消息的链接地址
        int is_multi = JsonPath.read(json,"$.app_msg_ext_info.is_multi");//是否是多图文消息
        Integer datetime = JsonPath.read(json,"$.comm_msg_info.datetime");//图文消息发送时间
        /**
         * 在这里将图文消息链接地址插入到采集队列库tmplist中
         * (队列库将在后文介绍,主要目的是建立一个批量采集队列,
         * 另一个程序将根据队列安排下一个采集的公众号或者文章内容)
         */
        try{
          if(content_url != null && !"".equals(content_url)){
            TmpList tmpList = new TmpList();
            tmpList.setContentUrl(content_url);
            tmpListMapper.insertSelective(tmpList);
          }
        }catch(Exception e){
          System.out.println("队列已存在,不插入!");
        }
        
        /**
         * 在这里根据$content_url从数据库post中判断一下是否重复
         */
        List<Post> postList = postMapper.selectByContentUrl(content_url);
        boolean contentUrlExist = false;
        if(postList != null && postList.size() != 0){
          contentUrlExist = true;
        }
      
        
        if(!contentUrlExist){//'数据库post中不存在相同的$content_url'
          Integer fileid = JsonPath.read(json,"$.app_msg_ext_info.fileid");//一个微信给的id
          String title = JsonPath.read(json,"$.app_msg_ext_info.title");//文章标题
          String title_encode = URLEncoder.encode(title,"utf-8");
          String digest = JsonPath.read(json,"$.app_msg_ext_info.digest");//文章摘要
          String source_url = JsonPath.read(json,"$.app_msg_ext_info.source_url");//阅读原文的链接
          source_url = source_url.replace("\\","");
          String cover = JsonPath.read(json,"$.app_msg_ext_info.cover");//封面图片
          cover = cover.replace("\\","");
          /**
           * 存入数据库
           */
//          System.out.println("头条标题:"+title);
//          System.out.println("微信ID:"+fileid);
//          System.out.println("文章摘要:"+digest);
//          System.out.println("阅读原文链接:"+source_url);
//          System.out.println("封面图片地址:"+cover);          
          
          Post post = new Post();
          post.setBiz(biz);
          post.setTitle(title);
          post.setTitleEncode(title_encode);
          post.setFieldId(fileid);
          post.setDigest(digest);
          post.setSourceUrl(source_url);
          post.setCover(cover);
          post.setIsTop(1);//标记一下是头条内容
          post.setIsMulti(is_multi);
          post.setDatetime(datetime);
          post.setContentUrl(content_url);
          
          postMapper.insert(post);
        }
      
        if(is_multi == 1){//如果是多图文消息
          List<Object> multiLists = JsonPath.read(json,"['app_msg_ext_info']['multi_app_msg_item_list']");
          for(Object multiList : multiLists){
            Object multiJson = multiList;          
            content_url = JsonPath.read(multiJson,"['content_url']").toString().replace("\\","");//图文消息链接地址
            /**
             * 这里再次根据$content_url判断一下数据库中是否重复以免出错
             */
            contentUrlExist = false;
            List<Post> posts = postMapper.selectByContentUrl(content_url);
            if(posts != null && posts.size() != 0){
              contentUrlExist = true;
            }
            if(!contentUrlExist){//'数据库中不存在相同的$content_url'
              /**
               * 在这里将图文消息链接地址插入到采集队列库中
               * (队列库将在后文介绍,主要目的是建立一个批量采集队列,
               * 另一个程序将根据队列安排下一个采集的公众号或者文章内容)
               */
              if(content_url != null && !"".equals(content_url)){
                TmpList tmpListT = new TmpList();
                tmpListT.setContentUrl(content_url);
                tmpListMapper.insertSelective(tmpListT);
              }
              
              String title = JsonPath.read(multiJson,"$.title");
              String title_encode = URLEncoder.encode(title,"utf-8");
              Integer fileid = JsonPath.read(multiJson,"$.fileid");
              String digest = JsonPath.read(multiJson,"$.digest");
              String source_url = JsonPath.read(multiJson,"$.source_url");
              source_url = source_url.replace("\\","");
              String cover = JsonPath.read(multiJson,"$.cover");
              cover = cover.replace("\\","");            
//              System.out.println("标题:"+title);
//              System.out.println("微信ID:"+fileid);
//              System.out.println("文章摘要:"+digest);
//              System.out.println("阅读原文链接:"+source_url);
//              System.out.println("封面图片地址:"+cover);              
              Post post = new Post();
              post.setBiz(biz);
              post.setTitle(title);
              post.setTitleEncode(title_encode);
              post.setFieldId(fileid);
              post.setDigest(digest);
              post.setSourceUrl(source_url);
              post.setCover(cover);
              post.setIsTop(0);//标记一下不是头条内容
              post.setIsMulti(is_multi);
              post.setDatetime(datetime);
              post.setContentUrl(content_url);
              
              postMapper.insert(post);
              
            }
          }
        }      
      }    
    }
  }

 

(编辑:ASP站长网)

网友评论
推荐文章
    热点阅读