GOODGOOD 发表于 2022-8-24 13:36

某奇异、某酷、某讯定时爬取,主动爬取

本帖最后由 GOODGOOD 于 2022-8-24 13:38 编辑

某奇异和某讯的电影,电视剧影视可以定时爬取,主要通过影视ID,通过接口获取影视详情,子集列表。但是某酷的没有找到好的方法,我还是想通过id来抓取影视详情(播放链接、图片链接、影视介绍、上映时间、电视剧子集列表等),不然只能通过jsoup解析网页来获取了。
有没有大神知道某酷怎么通过链接的id_XNTg4NTY5MDExMg==这个id来或许详情的方法,共同讨论一下。
/**
    * 爱奇艺连续剧根据分类爬取子集
    * @Param movie
    */
   private void aqySetEpisodeByMovie(Movie movie) {
       int page = 1;
       while(page <= movie.getEpisodeLatestNo()/200+1){
         String url="https://pcw-api.iqiyi.com/albums/album/avlistinfo?aid="+movie.getAlbumId()+"&page="+page+"&size=200";
         String html = HttpUtils.getHtml(url);
         JSONObject htmlJson = (JSONObject) JSONObject.parse(html);
         JSONObject tvInfoJson = (JSONObject) JSONObject.parse(htmlJson.get("data").toString());
         JSONArray epsodelistJsonArray = (JSONArray) tvInfoJson.get("epsodelist");
         for(int i = 0;i < epsodelistJsonArray.size(); i++){
               JSONObject epsodeJSONObject = JSONObject.parseObject(epsodelistJsonArray.get(i).toString());
               AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("tvId")),"未解析到电视剧当前集的tvId!");
               //根据tvId和movieId查找数量,如果大于0,表示已经存在,就跳过,否则添加。
               int movieEpisodeCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getTvId, epsodeJSONObject.get("tvId").toString())
                     .eq(MovieEpisode::getMovieId, movie.getId()));
               if(movieEpisodeCount == 0){//不存在该记录,添加记录
                   MovieEpisode movieEpisode = new MovieEpisode();
                   movieEpisode.setAlbumId(movie.getAlbumId());//设置AlbumId
                   movieEpisode.setMovieId(movie.getId());//设置movieId
                   movieEpisode.setTvId(epsodeJSONObject.get("tvId").toString());//设置tvId
                   AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("playUrl")),"未解析到电视剧当前集的播放地址!");
                   movieEpisode.setEpisodeUrl(epsodeJSONObject.get("playUrl").toString());//设置播放地址
                   AssertUtil.isTrue(ObjectUtils.isEmpty(epsodeJSONObject.get("order")),"未解析到电视剧当前集的order!");
                   movieEpisode.setEpisodeNo(Integer.parseInt(epsodeJSONObject.get("order").toString()));//设置当前集
                   if(movieEpisode.getEpisodeNo()==1 ){//是第一集,更新movie的页面
                     movie.setMovieUrl(movieEpisode.getEpisodeUrl());
                     AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
                   }
                   if(ObjectUtils.isNotEmpty(epsodeJSONObject.get("subtitle"))){
                     movieEpisode.setRemark(epsodeJSONObject.get("subtitle").toString());//设置当前集数的小标题
                   }
                   if(ObjectUtils.isNotEmpty(epsodeJSONObject.get("period"))){
                     movieEpisode.setUpdateTime(DateUtil.formatString(epsodeJSONObject.get("period").toString(),"yyyy-MM-dd"));//设置更新时间
                   }
                   movieEpisode.setStatusCode(0);//设置正常
                   AssertUtil.isTrue(!movieEpisodeService.save(movieEpisode),"影视子集插入数据库失败!");
                   if(movie.getEpisodeCount() != 0){//判断当前子集数量是否等于movie.getEpisodeCount()的数量,相等表示完结
                     int nowCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getMovieId, movie.getId()));
                     if(nowCount == movie.getEpisodeCount()){
                           movie.setIsOver(0);//完结
                           AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
                     }
                   }
               }
         }
         page++;
       }
       int nowCount = (int) movieEpisodeService.count(new LambdaQueryWrapper<MovieEpisode>().eq(MovieEpisode::getMovieId, movie.getId()));
       if(movie.getEpisodeLatestNo() != nowCount){
         movie.setEpisodeLatestNo(nowCount);
         AssertUtil.isTrue(!this.updateById(movie),"影视子集插入数据库失败!");
       }
   }

lthstl 发表于 2022-8-24 13:36

感谢楼主分享

2316903979 发表于 2022-8-24 13:36


支持楼主,谢谢分享。

dong5222 发表于 2022-8-24 13:38

谢谢大佬

破解我是不行的 发表于 2022-8-24 13:46

谢谢@Thanks!

Jonair0 发表于 2022-8-24 15:50

谢谢分享!

saycle 发表于 2022-8-24 16:10


感谢楼主的分享

qq923240792 发表于 2022-8-24 16:11

谢谢大牛

1075703658 发表于 2022-8-24 16:13

先收藏了,万一用到呢

frame 发表于 2022-8-24 16:24

多谢楼主分享
页: [1] 2
查看完整版本: 某奇异、某酷、某讯定时爬取,主动爬取