admin
2021-03-26 998b6bd2a1dc25ec8350f5a691c3cd44a23d6d14
全网搜(芒果兼容)
4个文件已修改
9个文件已添加
1222 ■■■■■ 已修改文件
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVClipInfoDao.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVSearchVideoMapDao.java 34 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVVideoDao.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/mogotv/MogoTVApiUtil.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/mogotv/MogoTVUtil.java 48 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVClipInfo.java 244 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVSearchVideoMap.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVVideo.java 158 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/imp/juhe/MogoTVServiceImpl.java 132 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/service/inter/juhe/MogoTVService.java 45 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/tencent/entity/TencentCoverVideo.java 77 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/factory/InternetSearchVideoFactory.java 38 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/util/video/VideoDetailUtil.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVClipInfoDao.java
New file
@@ -0,0 +1,85 @@
package com.yeshi.buwan.dao.juhe.mogotv;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.Date;
@Repository
public class MogoTVClipInfoDao extends MongodbBaseDao<MogoTVClipInfo>{
  public void updateSelective(MogoTVClipInfo bean) {
        Query query = new Query();
        Update update=new Update();
        query.addCriteria(Criteria.where("clipId").is(bean.getClipId()));
        if(bean.getImg() != null) {
            update.set("img", bean.getImg());
        }
        if(bean.getYear() != null) {
            update.set("year", bean.getYear());
        }
        if(bean.getPrefix() != null) {
            update.set("prefix", bean.getPrefix());
        }
        if(bean.getTitle() != null) {
            update.set("title", bean.getTitle());
        }
        if(bean.getPlayPartId() != null) {
            update.set("playPartId", bean.getPlayPartId());
        }
        if(bean.getAwards() != null) {
            update.set("awards", bean.getAwards());
        }
        if(bean.getSubtitle() != null) {
            update.set("subtitle", bean.getSubtitle());
        }
        if(bean.getUpdateInfo() != null) {
            update.set("updateInfo", bean.getUpdateInfo());
        }
        if(bean.getVpicture() != null) {
            update.set("vpicture", bean.getVpicture());
        }
        if(bean.getHpicture() != null) {
            update.set("hpicture", bean.getHpicture());
        }
        if(bean.getArea() != null) {
            update.set("area", bean.getArea());
        }
        if(bean.getLeader() != null) {
            update.set("leader", bean.getLeader());
        }
        if(bean.getReleaseTime() != null) {
            update.set("releaseTime", bean.getReleaseTime());
        }
        if(bean.getPresenter() != null) {
            update.set("presenter", bean.getPresenter());
        }
        if(bean.getKind() != null) {
            update.set("kind", bean.getKind());
        }
        if(bean.getDirector() != null) {
            update.set("director", bean.getDirector());
        }
        if(bean.getTelevision() != null) {
            update.set("television", bean.getTelevision());
        }
        if(bean.getLanguage() != null) {
            update.set("language", bean.getLanguage());
        }
        if(bean.getFstlvlType() != null) {
            update.set("fstlvlType", bean.getFstlvlType());
        }
        if(bean.getStory() != null) {
            update.set("story", bean.getStory());
        }
        if(bean.getCreateTime() != null) {
            update.set("createTime", bean.getCreateTime());
        }
        update.set("updateTime", new Date());
        update(query, update);
  }
}
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVSearchVideoMapDao.java
New file
@@ -0,0 +1,34 @@
package com.yeshi.buwan.dao.juhe.mogotv;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
import com.yeshi.buwan.mogotv.entity.MogoTVSearchVideoMap;
import com.yeshi.buwan.youku.entity.YouKuSearchVideoMap;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.Date;
@Repository
public class MogoTVSearchVideoMapDao extends MongodbBaseDao<MogoTVSearchVideoMap> {
    public void updateSelective(MogoTVSearchVideoMap bean) {
        Query query = new Query();
        Update update = new Update();
        query.addCriteria(Criteria.where("videoId").is(bean.getVideoId()));
        if (bean.getClipId() != null) {
            update.set("clipId", bean.getClipId());
        }
        if (bean.getCreateTime() != null) {
            update.set("createTime", bean.getCreateTime());
        }
        update.set("updateTime", new Date());
        update(query, update);
    }
    public MogoTVSearchVideoMap selectByVideoId(String videoId) {
        return get(videoId);
    }
}
src/main/java/com/yeshi/buwan/dao/juhe/mogotv/MogoTVVideoDao.java
New file
@@ -0,0 +1,64 @@
package com.yeshi.buwan.dao.juhe.mogotv;
import com.yeshi.buwan.mogotv.entity.MogoTVVideo;
import com.yeshi.buwan.dao.base.MongodbBaseDao;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.stereotype.Repository;
import java.util.Date;
@Repository
public class MogoTVVideoDao extends MongodbBaseDao<MogoTVVideo>{
  public void updateSelective(MogoTVVideo bean) {
        Query query = new Query();
        Update update=new Update();
        query.addCriteria(Criteria.where("video_id").is(bean.getVideo_id()));
        if(bean.getClip_id() != null) {
            update.set("clip_id", bean.getClip_id());
        }
        if(bean.getT1() != null) {
            update.set("t1", bean.getT1());
        }
        if(bean.getT2() != null) {
            update.set("t2", bean.getT2());
        }
        if(bean.getT3() != null) {
            update.set("t3", bean.getT3());
        }
        if(bean.getT4() != null) {
            update.set("t4", bean.getT4());
        }
        if(bean.getImg() != null) {
            update.set("img", bean.getImg());
        }
        if(bean.getIsnew() != null) {
            update.set("isnew", bean.getIsnew());
        }
        if(bean.getIsvip() != null) {
            update.set("isvip", bean.getIsvip());
        }
        if(bean.getUrl() != null) {
            update.set("url", bean.getUrl());
        }
        if(bean.getIsIntact() != null) {
            update.set("isIntact", bean.getIsIntact());
        }
        if(bean.getTime() != null) {
            update.set("time", bean.getTime());
        }
        if(bean.getContentType() != null) {
            update.set("contentType", bean.getContentType());
        }
        if(bean.getTs() != null) {
            update.set("ts", bean.getTs());
        }
        if(bean.getCreateTime() != null) {
            update.set("createTime", bean.getCreateTime());
        }
        update.set("updateTime", new Date());
        update(query, update);
  }
}
src/main/java/com/yeshi/buwan/mogotv/MogoTVApiUtil.java
@@ -2,13 +2,20 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.mogotv.entity.MogoTVVideo;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import com.yeshi.buwan.youku.entity.YouKuShowSimple;
import com.yeshi.buwan.youku.entity.YouKuVideo;
import org.json.JSONObject;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.yeshi.utils.HttpUtil;
import org.yeshi.utils.StringUtil;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.UnsupportedEncodingException;
import java.lang.reflect.Type;
import java.net.URLEncoder;
@@ -28,107 +35,188 @@
//    isIntact:1表示正片
    private final static String APP_ID = "758bef946d0050ef";
    private final static String APP_SECRET = "e113a131d49e1f837402e2807f2daf58";
    private static String request(String action, Map<String, String> ps) {
        Map<String, String> params = new HashMap<>();
        params.put("action", action);
        params.put("client_id", APP_ID);
        params.put("format", "json");
        params.put("timestamp", System.currentTimeMillis() / 1000 + "");
        params.put("version", "3.0");
        params.put("format", "json");
        params.putAll(ps);
    private static ScriptEngine jsEngine;
        List<String> list = new ArrayList<>();
        for (Iterator<String> its = params.keySet().iterator(); its.hasNext(); ) {
            String key = its.next();
            try {
                list.add(key + URLEncoder.encode(params.get(key), "UTF-8"));
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        Collections.sort(list);
        String sign = StringUtil.Md5(StringUtil.concat(list, "") + APP_SECRET);
        params.put("sign", sign);
        ps.put("opensysparams", new JSONObject(params).toString());
        return HttpUtil.get("https://openapi.youku.com/router/rest.json", ps, new HashMap<>());
    }
    /**
     * 获取节目详情
     * 解析结果数据
     *
     * @param id
     * @param callback
     * @param result
     * @return
     * @throws Exception
     */
    public static YouKuShowDetail getShowDetail(String id) {
        String url = String.format("https://openapi.youku.com/v2/shows/show.json?client_id=%s&show_id=%s", APP_ID, id);
        String result = HttpUtil.get(url);
        return new Gson().fromJson(result, YouKuShowDetail.class);
    }
    /**
     * 根据分类拉取数据
     *
     * @param category
     * @param page
     */
    public static ListResultDTO getShowListByCategory(String category, int page, int pageSize) {
    private static String parseResult(String callback, String result) throws Exception {
        if (jsEngine == null) {
            ScriptEngineManager manager = new ScriptEngineManager();
            jsEngine = manager.getEngineByName("javascript");
        }
        try {
            String url = String.format("https://openapi.youku.com/v2/shows/by_category.json?client_id=%s&paid=1&category=%s&page=%s&count=" + pageSize, APP_ID, URLEncoder.encode(category, "UTF-8"), page);
            String result = HttpUtil.get(url);
            net.sf.json.JSONObject resultJson = net.sf.json.JSONObject.fromObject(result);
            int total = resultJson.optInt("total");
            Type type = new TypeToken<List<YouKuShowSimple>>() {
            }.getType();
            List<YouKuShowSimple> list = new Gson().fromJson(resultJson.optJSONArray("shows").toString(), type);
            return new ListResultDTO(list, total);
        } catch (UnsupportedEncodingException e) {
            String script = "function getData(){ return " + result + ";}\n";
            script += String.format("function %s(t){return t;}", callback);
            jsEngine.eval(script);
        } catch (
                ScriptException e) {
            e.printStackTrace();
        }
        if (jsEngine instanceof Invocable) {
            Invocable in = (Invocable) jsEngine;
            Object info = in.invokeFunction("getData");
            return new Gson().toJson(info);
        }
        return null;
    }
    public static ListResultDTO getVideoList(String showId, int page, int pageSize) {
        Map<String, String> params = new HashMap<>();
        params.put("show_id", showId);
        params.put("show_videotype", "正片");
        params.put("page", page + "");
        params.put("pageLength", pageSize + "");
        String result = MogoTVApiUtil.request("youku.api.video.byprogram.get", params);
        System.out.println(result);
        net.sf.json.JSONObject resultJson = net.sf.json.JSONObject.fromObject(result);
        int total = resultJson.optInt("total");
        Type type = new TypeToken<List<YouKuVideo>>() {
        }.getType();
        List<YouKuVideo> videoList = new Gson().fromJson(resultJson.optJSONArray("videos").toString(), type);
        if (videoList != null)
            for (YouKuVideo video : videoList) {
                video.setShowId(showId);
    public static String request(String url) throws Exception {
        String callback = "jsonp_" + System.currentTimeMillis();
        url += "&callback=" + callback;
        String result = HttpUtil.get(url);
        return parseResult(callback, result);
    }
    public static ListResultDTO getVideoList(String videoId, int page, int pageSize) {
        String url = String.format("https://pcweb.api.mgtv.com/episode/list?src=intelmgtv&abroad=0&_support=10000000&version=5.5.35&video_id=%s&page=%s&size=%s&abroad=0&src=intelmgtv", videoId, page, pageSize);
        String result = null;
        try {
            result = request(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        JSONObject data = JSONObject.fromObject(result);
        if (data.optInt("code") == 200) {
            data = data.optJSONObject("data");
            int totalPage = data.optInt("total_page");
            JSONArray list = data.optJSONArray("list");
            Type type = new TypeToken<List<MogoTVVideo>>() {
            }.getType();
            List<MogoTVVideo> videoList = new Gson().fromJson(list.toString(), type);
            for (int i = 0; i < videoList.size(); i++) {
                if (videoList.get(i).getIsIntact() != 1) {
                    videoList.remove(i--);
                }
            }
        return new ListResultDTO(videoList, total);
            return new ListResultDTO(videoList, totalPage);
        }
        return null;
    }
    /**
     * 获取视频列表
     *
     * @param videoId
     * @return
     */
    public static List<MogoTVVideo> getVideoList(String videoId) {
        List<MogoTVVideo> videoList = new ArrayList<>();
        ListResultDTO dto = getVideoList(videoId, 1, 30);
        videoList.addAll(dto.getList());
        for (int i = 1; i < dto.getTotal(); i++) {
            dto = getVideoList(videoId, i + 1, 30);
            videoList.addAll(dto.getList());
        }
        Comparator<MogoTVVideo> cm = new Comparator<MogoTVVideo>() {
            @Override
            public int compare(MogoTVVideo o1, MogoTVVideo o2) {
                return o1.getT1() - o2.getT1();
            }
        };
        Collections.sort(videoList, cm);
        return videoList;
    }
    /**
     * 详情获取
     *
     * @param clipInfo
     * @return
     */
    public static MogoTVClipInfo getClipDetail(MogoTVClipInfo clipInfo) {
        String url = String.format("https://pcweb.api.mgtv.com/video/info?cid=%s&vid=%s&_support=10000000&abroad=0&src=intelmgtv", clipInfo.getClipId(), clipInfo.getPlayPartId());
        String result = null;
        try {
            result = request(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        JSONObject data = JSONObject.fromObject(result);
        if (data.optInt("code") == 200) {
            data = data.optJSONObject("data");
            JSONObject info = data.optJSONObject("info");
            clipInfo.setVpicture(info.optString("clipImage2"));
            clipInfo.setHpicture(info.optString("clipImage"));
            JSONObject detail = info.optJSONObject("detail");
            clipInfo.setArea(detail.optString("area"));
            clipInfo.setUpdateInfo(detail.optString("updateInfo"));
            clipInfo.setLeader(detail.optString("leader"));
            clipInfo.setReleaseTime(detail.optString("releaseTime"));
            clipInfo.setPresenter(detail.optString("presenter"));
            clipInfo.setKind(detail.optString("kind"));
            clipInfo.setDirector(detail.optString("director"));
            clipInfo.setTelevision(detail.optString("television"));
            clipInfo.setLanguage(detail.optString("language"));
            clipInfo.setFstlvlType(detail.optString("fstlvlType"));
            clipInfo.setStory(detail.optString("story"));
            return clipInfo;
        }
        return null;
    }
    /**
     * 获取专辑列表
     *
     * @param channelId
     * @param page
     * @param pageSize
     * @return
     */
    public static ListResultDTO getClipList(int channelId, int page, int pageSize) {
        String url = String.format("https://pianku.api.mgtv.com/rider/list/pcweb/v4?platform=pcweb&channelId=%s&pn=%s&pc=%s&hudong=0&_support=10000000&kind=a1&area=a1&sort=c2&abroad=0&src=intelmgtv", channelId, page, pageSize);
        String result = null;
        try {
            result = request(url);
        } catch (Exception e) {
            e.printStackTrace();
        }
        JSONObject data = JSONObject.fromObject(result);
        if (data.optInt("code") == 200) {
            data = data.optJSONObject("data");
            int total = data.optInt("totalHits");
            Type type = new TypeToken<List<MogoTVClipInfo>>() {
            }.getType();
            JSONObject hitDocs = data.optJSONObject("hitDocs");
            JSONArray array = new JSONArray();
            if (!hitDocs.isArray()) {
                for (Iterator<String> its = hitDocs.keys(); its.hasNext(); ) {
                    String key = its.next();
                    array.add(hitDocs.optJSONObject(key));
                }
            } else {
                array = data.optJSONArray("hitDocs");
            }
            List<MogoTVClipInfo> clipInfos = new Gson().fromJson(array.toString(), type);
            return new ListResultDTO(clipInfos, total);
        }
        return null;
    }
    public static void main(String[] args) {
//        YouKuShowDetail detail = getShowDetail("1e61efbfbdefbfbd04ef");
//        System.out.println(detail);
        getVideoList("0a17e614d7e311e68ce4", 1, 20);
//        ListResultDTO resultDTO = getShowListByCategory("电视剧", 1);
//        System.out.println(resultDTO);
        ListResultDTO dto = getClipList(1, 1, 80);
        System.out.println(dto);
    }
src/main/java/com/yeshi/buwan/mogotv/MogoTVUtil.java
@@ -5,19 +5,18 @@
import com.yeshi.buwan.domain.VideoResource;
import com.yeshi.buwan.domain.entity.PlayUrl;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.mogotv.entity.MogoTVSearchVideoMap;
import com.yeshi.buwan.mogotv.entity.MogoTVVideo;
import com.yeshi.buwan.service.imp.VideoResourceService;
import com.yeshi.buwan.service.imp.VideoTypeService;
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
import com.yeshi.buwan.service.inter.juhe.YouKuService;
import com.yeshi.buwan.service.inter.juhe.MogoTVService;
import com.yeshi.buwan.util.factory.VideoInfoFactory;
import com.yeshi.buwan.util.video.VideoConstant;
import com.yeshi.buwan.youku.entity.YouKuSearchVideoMap;
import com.yeshi.buwan.youku.entity.YouKuShowDetail;
import com.yeshi.buwan.youku.entity.YouKuVideo;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@@ -29,7 +28,7 @@
    private InternetSearchVideoService internetSearchVideoService;
    @Resource
    private YouKuService youKuService;
    private MogoTVService mogoTVService;
    @Resource
    private VideoResourceService videoResourceService;
@@ -39,37 +38,38 @@
    public final static int RESOURCE_ID = 26;
    public static VideoDetailInfo convertToDetail(YouKuVideo youKuVideo) {
    public static VideoDetailInfo convertToDetail(MogoTVClipInfo clipInfo, MogoTVVideo mogoTVVideo) {
        VideoDetailInfo detail = new VideoDetailInfo();
        switch (youKuVideo.getCategory()) {
        switch (clipInfo.getFstlvlType()) {
            case "电影":
                detail.setTag(youKuVideo.getTitle());
                detail.setTag(clipInfo.getTitle());
                break;
            case "电视剧":
            case "动漫":
                detail.setTag(youKuVideo.getShow_videoseq() + "");
                detail.setTag(mogoTVVideo.getT1() + "");
                break;
            case "综艺":
                detail.setTag(youKuVideo.getShow_videostage() + " " + youKuVideo.getTitle());
                detail.setTag(mogoTVVideo.getT4() + " " + mogoTVVideo.getT2());
                break;
        }
        detail.setName(youKuVideo.getTitle());
        detail.setExtraId(youKuVideo.getVideoid());
        detail.setName(mogoTVVideo.getT2());
        detail.setExtraId(mogoTVVideo.getVideo_id());
        detail.setType("url");
        return detail;
    }
    public VideoInfo getVideoInfo(InternetSearchVideo internetSearchVideo) throws Exception {
        YouKuSearchVideoMap map = youKuService.selectByVideoId(internetSearchVideo.getId());
        MogoTVSearchVideoMap map = mogoTVService.selectMapByVideoId(internetSearchVideo.getId());
        if (map == null) {
            throw new Exception("视频源不存在");
        }
        YouKuShowDetail showDetail = youKuService.getSimpleShowDetail(map.getShowId());
        showDetail.setVideoList(youKuService.getVideoList(showDetail.getId(), 1, 100));
        MogoTVClipInfo showDetail = mogoTVService.getSimpleClipDetail(map.getClipId());
        showDetail.setVideoList(mogoTVService.getVideoList(showDetail.getClipId(), 1, 100));
        VideoInfo info = VideoInfoFactory.create(internetSearchVideo);
        info.setIntroduction(showDetail.getDescription());
        info.setVideoDetailList(MogoTVUtil.convertToDetail(showDetail.getVideoList()));
        info.setIntroduction(showDetail.getStory());
        info.setVideoDetailList(MogoTVUtil.convertToDetail(showDetail.getVideoList(), showDetail));
        info.setPlayPicture(info.getHpicture());
        //获取资源列表
        List<String> rids = Arrays.asList(internetSearchVideo.getResourceIds().split(","));
@@ -80,7 +80,7 @@
        }
        info.setResourceList(resourceList);
        info.setShowType(MogoTVUtil.getShowType(internetSearchVideo));
        info.setScore(new BigDecimal(showDetail.getScore()).setScale(1).toString());
        info.setScore("6.8");
        //获取分类详情
        info.setVideoType(videoTypeService.getVideoType(info.getVideoType().getId()));
@@ -91,10 +91,10 @@
    }
    public static List<VideoDetailInfo> convertToDetail(List<YouKuVideo> youKuVideoList) {
    public static List<VideoDetailInfo> convertToDetail(List<MogoTVVideo> mogoTVVideoList, MogoTVClipInfo clipInfo) {
        List<VideoDetailInfo> detailList = new ArrayList<>();
        for (YouKuVideo video : youKuVideoList) {
            detailList.add(convertToDetail(video));
        for (MogoTVVideo video : mogoTVVideoList) {
            detailList.add(convertToDetail(clipInfo, video));
        }
        return detailList;
    }
@@ -125,8 +125,8 @@
        PlayUrl playUrl = new PlayUrl();
        VideoResource videoResource = videoResourceService.getResource(resourceid + "");
        playUrl.setResource(videoResource);
        YouKuVideo youKuVideo = youKuService.getVideoDetail(id);
        playUrl.setUrl(youKuVideo.getLink());
        MogoTVVideo mogoTVVideo = mogoTVService.getVideoDetail(id);
        playUrl.setUrl("https://www.mgtv.com"+mogoTVVideo.getUrl());
        playUrl.setPlayType(1);
        playUrl.setParams("");
        return playUrl;
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVClipInfo.java
New file
@@ -0,0 +1,244 @@
package com.yeshi.buwan.mogotv.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.Transient;
import java.util.Date;
import java.util.List;
public class MogoTVClipInfo {
    @Id
    private String clipId;//348752,
    private String img;//https://4img.hitv.com/preview/sp_images/2021/02/26/20210226092858956.jpg,
    private String year;//2021,
    private String prefix;//演员,
    private String title;//爱的理想生活,
    private String playPartId;//11448748,
    private String awards;//都市女性寻找自我的故事,
    private String subtitle;//殷桃,宋轶,赵今麦,夏若妍,胡连馨,魏大勋,孙艺洲,杨烁,谭凯,
    //需要更新的数据
    private String updateInfo;  //  更新到42集
    private String vpicture;
    private String hpicture;
    private String area;//":"内地",
    private String leader;//":"殷桃 / 宋轶 / 赵今麦 / 夏若妍 / 胡连馨 / 魏大勋 / 孙艺洲 / 杨烁 / 谭凯",
    private String releaseTime;//":"2021-03-01",
    private String presenter;//":"未知",
    private String kind;//":"喜剧 / 爱情 / 都市",
    private String director;//":"李江明",
    private String television;//":"湖南卫视 / 芒果TV",
    private String language;//":"普通话",
    private String fstlvlType;//":"电视剧",
    private String story;//":"该剧改编自朱德庸的同名漫画,讲述了五位性格鲜明、经历迥异的都市女性,在经历形形色色的生活困境之后,最终找到自我的故事。"
    //视频的数量
    private int videoCount;
    @Transient
    private List<MogoTVVideo> videoList;
    private Date createTime;
    private Date updateTime;
    public int getVideoCount() {
        return videoCount;
    }
    public void setVideoCount(int videoCount) {
        this.videoCount = videoCount;
    }
    public String getClipId() {
        return clipId;
    }
    public List<MogoTVVideo> getVideoList() {
        return videoList;
    }
    public void setVideoList(List<MogoTVVideo> videoList) {
        this.videoList = videoList;
    }
    public void setClipId(String clipId) {
        this.clipId = clipId;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public String getYear() {
        return year;
    }
    public void setYear(String year) {
        this.year = year;
    }
    public String getPrefix() {
        return prefix;
    }
    public void setPrefix(String prefix) {
        this.prefix = prefix;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    public String getPlayPartId() {
        return playPartId;
    }
    public void setPlayPartId(String playPartId) {
        this.playPartId = playPartId;
    }
    public String getAwards() {
        return awards;
    }
    public void setAwards(String awards) {
        this.awards = awards;
    }
    public String getSubtitle() {
        return subtitle;
    }
    public void setSubtitle(String subtitle) {
        this.subtitle = subtitle;
    }
    public String getUpdateInfo() {
        return updateInfo;
    }
    public void setUpdateInfo(String updateInfo) {
        this.updateInfo = updateInfo;
    }
    public String getVpicture() {
        return vpicture;
    }
    public void setVpicture(String vpicture) {
        this.vpicture = vpicture;
    }
    public String getHpicture() {
        return hpicture;
    }
    public void setHpicture(String hpicture) {
        this.hpicture = hpicture;
    }
    public String getArea() {
        return area;
    }
    public void setArea(String area) {
        this.area = area;
    }
    public String getLeader() {
        return leader;
    }
    public void setLeader(String leader) {
        this.leader = leader;
    }
    public String getReleaseTime() {
        return releaseTime;
    }
    public void setReleaseTime(String releaseTime) {
        this.releaseTime = releaseTime;
    }
    public String getPresenter() {
        return presenter;
    }
    public void setPresenter(String presenter) {
        this.presenter = presenter;
    }
    public String getKind() {
        return kind;
    }
    public void setKind(String kind) {
        this.kind = kind;
    }
    public String getDirector() {
        return director;
    }
    public void setDirector(String director) {
        this.director = director;
    }
    public String getTelevision() {
        return television;
    }
    public void setTelevision(String television) {
        this.television = television;
    }
    public String getLanguage() {
        return language;
    }
    public void setLanguage(String language) {
        this.language = language;
    }
    public String getFstlvlType() {
        return fstlvlType;
    }
    public void setFstlvlType(String fstlvlType) {
        this.fstlvlType = fstlvlType;
    }
    public String getStory() {
        return story;
    }
    public void setStory(String story) {
        this.story = story;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVSearchVideoMap.java
New file
@@ -0,0 +1,41 @@
package com.yeshi.buwan.mogotv.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Document(collection = "mogoTVSearchVideoMap")
public class MogoTVSearchVideoMap {
    @Id
    private String videoId;
    @Indexed
    private String clipId;
    private Date createTime;
    public String getVideoId() {
        return videoId;
    }
    public void setVideoId(String videoId) {
        this.videoId = videoId;
    }
    public String getClipId() {
        return clipId;
    }
    public void setClipId(String clipId) {
        this.clipId = clipId;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
}
src/main/java/com/yeshi/buwan/mogotv/entity/MogoTVVideo.java
New file
@@ -0,0 +1,158 @@
package com.yeshi.buwan.mogotv.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
@Document(collection = "mogoTVVideo")
public class MogoTVVideo {
    @Id
    private String video_id;//10718686
    @Indexed
    private String clip_id;//350860,
    private Integer t1;//5,
    private String t2;//01案:夜半酒店Ⅰ(下),
    private String t3;//明星大侦探第六季01案:夜半酒店Ⅰ(下),
    private String t4;//2020-12-25,
    private String img;//https://1img.hitv.com/preview/sp_images/2020/12/25/20201225093530350.jpg_220x125.jpg,
    private Integer isnew;//0,
    private Integer isvip;//0,
    private String url;///b/350860/10718686.html,
    private Integer isIntact;//1,
    private String time;//83:03,
    private Integer contentType;//0,
    private String ts;//2020-12-25 09:32:57.0,
    private Date createTime;
    private Date updateTime;
    public String getVideo_id() {
        return video_id;
    }
    public void setVideo_id(String video_id) {
        this.video_id = video_id;
    }
    public String getClip_id() {
        return clip_id;
    }
    public void setClip_id(String clip_id) {
        this.clip_id = clip_id;
    }
    public Integer getT1() {
        return t1;
    }
    public void setT1(Integer t1) {
        this.t1 = t1;
    }
    public String getT2() {
        return t2;
    }
    public void setT2(String t2) {
        this.t2 = t2;
    }
    public String getT3() {
        return t3;
    }
    public void setT3(String t3) {
        this.t3 = t3;
    }
    public String getT4() {
        return t4;
    }
    public void setT4(String t4) {
        this.t4 = t4;
    }
    public String getImg() {
        return img;
    }
    public void setImg(String img) {
        this.img = img;
    }
    public Integer getIsnew() {
        return isnew;
    }
    public void setIsnew(Integer isnew) {
        this.isnew = isnew;
    }
    public Integer getIsvip() {
        return isvip;
    }
    public void setIsvip(Integer isvip) {
        this.isvip = isvip;
    }
    public String getUrl() {
        return url;
    }
    public void setUrl(String url) {
        this.url = url;
    }
    public Integer getIsIntact() {
        return isIntact;
    }
    public void setIsIntact(Integer isIntact) {
        this.isIntact = isIntact;
    }
    public String getTime() {
        return time;
    }
    public void setTime(String time) {
        this.time = time;
    }
    public Integer getContentType() {
        return contentType;
    }
    public void setContentType(Integer contentType) {
        this.contentType = contentType;
    }
    public String getTs() {
        return ts;
    }
    public void setTs(String ts) {
        this.ts = ts;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
src/main/java/com/yeshi/buwan/service/imp/juhe/MogoTVServiceImpl.java
New file
@@ -0,0 +1,132 @@
package com.yeshi.buwan.service.imp.juhe;
import com.yeshi.buwan.dao.juhe.mogotv.MogoTVClipInfoDao;
import com.yeshi.buwan.dao.juhe.mogotv.MogoTVSearchVideoMapDao;
import com.yeshi.buwan.dao.juhe.mogotv.MogoTVVideoDao;
import com.yeshi.buwan.domain.VideoDetailInfo;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.mogotv.MogoTVUtil;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.mogotv.entity.MogoTVSearchVideoMap;
import com.yeshi.buwan.mogotv.entity.MogoTVVideo;
import com.yeshi.buwan.service.inter.juhe.InternetSearchVideoService;
import com.yeshi.buwan.service.inter.juhe.MogoTVService;
import com.yeshi.buwan.util.factory.InternetSearchVideoFactory;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Date;
import java.util.List;
@Service
public class MogoTVServiceImpl implements MogoTVService {
    @Resource
    private MogoTVSearchVideoMapDao mogoTVSearchVideoMapDao;
    @Resource
    private MogoTVClipInfoDao mogoTVClipInfoDao;
    @Resource
    private MogoTVVideoDao mogoTVVideoDao;
    @Resource
    private InternetSearchVideoService internetSearchVideoService;
    @Override
    public void save(MogoTVClipInfo detail) {
        if (detail.getUpdateTime() == null)
            detail.setUpdateTime(new Date());
        mogoTVClipInfoDao.save(detail);
        if (detail.getVideoList() != null)
            for (MogoTVVideo video : detail.getVideoList()) {
                if (video.getUpdateTime() == null) {
                    video.setUpdateTime(new Date());
                }
                mogoTVVideoDao.save(video);
            }
    }
    @Override
    public MogoTVClipInfo getClipDetail(String clipId) {
        MogoTVClipInfo detail = mogoTVClipInfoDao.get(clipId);
        Query query = new Query();
        if (detail != null) {
            query.addCriteria(Criteria.where("clipId").is(clipId));
        }
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "t1")));
        List<MogoTVVideo> videoList = mogoTVVideoDao.findList(query);
        detail.setVideoList(videoList);
        return detail;
    }
    @Override
    public MogoTVClipInfo getSimpleClipDetail(String clipId) {
        MogoTVClipInfo detail = mogoTVClipInfoDao.get(clipId);
        return detail;
    }
    @Override
    public List<MogoTVVideo> getVideoList(String clipId, int page, int pageSize) {
        Query query = new Query();
        query.addCriteria(Criteria.where("clipId").is(clipId));
        query.with(new Sort(new Sort.Order(Sort.Direction.ASC, "t1")));
        query.skip((page - 1) * pageSize);
        query.limit(pageSize);
        List<MogoTVVideo> videoList = mogoTVVideoDao.findList(query);
        return videoList;
    }
    @Override
    public MogoTVVideo getVideoDetail(String id) {
        return mogoTVVideoDao.get(id);
    }
    @Override
    public long count(String category) {
        Query query = new Query();
        if (category != null)
            query.addCriteria(Criteria.where("category").is(category));
        return mogoTVClipInfoDao.count(query);
    }
    @Override
    public List<MogoTVClipInfo> list(String category, int page, int pageSize) {
        Query query = new Query();
        if (category != null)
            query.addCriteria(Criteria.where("fstlvlType").is(category));
        query.limit(pageSize);
        query.skip((page - 1) * pageSize);
        return mogoTVClipInfoDao.findList(query);
    }
    @Override
    public List<VideoDetailInfo> getVideoDetailList(String videoid, int page, int pageSize) {
        MogoTVSearchVideoMap map = mogoTVSearchVideoMapDao.selectByVideoId(videoid);
        if (map == null)
            return null;
        MogoTVClipInfo clipInfo = mogoTVClipInfoDao.get(map.getClipId());
        return MogoTVUtil.convertToDetail(getVideoList(map.getClipId(), page, pageSize), clipInfo);
    }
    @Override
    public MogoTVSearchVideoMap selectMapByVideoId(String videoId) {
        MogoTVSearchVideoMap map = mogoTVSearchVideoMapDao.selectByVideoId(videoId);
        return map;
    }
    @Override
    public void addToInternetSearch(MogoTVClipInfo clipDetail) throws Exception {
        InternetSearchVideo video = InternetSearchVideoFactory.create(clipDetail);
        internetSearchVideoService.save(video);
        MogoTVSearchVideoMap map = new MogoTVSearchVideoMap();
        map.setClipId(clipDetail.getClipId());
        map.setVideoId(video.getId());
        map.setCreateTime(new Date());
        mogoTVSearchVideoMapDao.save(map);
    }
}
src/main/java/com/yeshi/buwan/service/inter/juhe/MogoTVService.java
New file
@@ -0,0 +1,45 @@
package com.yeshi.buwan.service.inter.juhe;
import com.yeshi.buwan.domain.VideoDetailInfo;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.mogotv.entity.MogoTVSearchVideoMap;
import com.yeshi.buwan.mogotv.entity.MogoTVVideo;
import com.yeshi.buwan.youku.entity.YouKuSearchVideoMap;
import java.util.List;
public interface MogoTVService {
    /**
     * 保存
     *
     * @param detail
     */
    public void save(MogoTVClipInfo detail);
    public MogoTVClipInfo getClipDetail(String clipId);
    public MogoTVClipInfo getSimpleClipDetail(String clipId);
    public List<MogoTVVideo> getVideoList(String clipId, int page, int pageSize);
    public MogoTVVideo getVideoDetail(String id);
    public long count(String category);
    public List<MogoTVClipInfo> list(String category, int page, int pageSize);
    public List<VideoDetailInfo> getVideoDetailList(final String videoid, int page, int pageSize);
    public MogoTVSearchVideoMap selectMapByVideoId(String videoId);
    /**
     * 添加到全网搜
     *
     * @param clipDetail
     */
    public void addToInternetSearch(MogoTVClipInfo clipDetail) throws Exception;
}
src/main/java/com/yeshi/buwan/tencent/entity/TencentCoverVideo.java
New file
@@ -0,0 +1,77 @@
package com.yeshi.buwan.tencent.entity;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.index.Indexed;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
import java.util.List;
@Document(collection = "tencentCoverVideo")
public class TencentCoverVideo {
    @Id
    private String videoId;
    @Indexed
    private String coverId;
    private int stage;//集数
    private int position;//position
    private String date;//date 时间
    private Date createTime;
    private Date updateTime;
    public String getVideoId() {
        return videoId;
    }
    public void setVideoId(String videoId) {
        this.videoId = videoId;
    }
    public String getCoverId() {
        return coverId;
    }
    public void setCoverId(String coverId) {
        this.coverId = coverId;
    }
    public int getStage() {
        return stage;
    }
    public void setStage(int stage) {
        this.stage = stage;
    }
    public int getPosition() {
        return position;
    }
    public void setPosition(int position) {
        this.position = position;
    }
    public String getDate() {
        return date;
    }
    public void setDate(String date) {
        this.date = date;
    }
    public Date getCreateTime() {
        return createTime;
    }
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }
    public Date getUpdateTime() {
        return updateTime;
    }
    public void setUpdateTime(Date updateTime) {
        this.updateTime = updateTime;
    }
}
src/main/java/com/yeshi/buwan/util/factory/InternetSearchVideoFactory.java
@@ -1,6 +1,7 @@
package com.yeshi.buwan.util.factory;
import com.yeshi.buwan.domain.video.InternetSearchVideo;
import com.yeshi.buwan.mogotv.entity.MogoTVClipInfo;
import com.yeshi.buwan.tencent.entity.TencentCoverInfo;
import com.yeshi.buwan.util.TimeUtil;
import com.yeshi.buwan.util.video.VideoConstant;
@@ -53,6 +54,43 @@
        return video;
    }
    public static InternetSearchVideo create(MogoTVClipInfo detail) {
        InternetSearchVideo video = new InternetSearchVideo();
        List<String> actors = new ArrayList<>();
        for (String st : detail.getLeader().split("/")) {
            actors.add(st.trim());
        }
        video.setActors(StringUtil.concat(actors, ","));
        video.setArea(detail.getArea());
        video.setDirector(detail.getDirector());
        video.setHpicture(detail.getHpicture());
        video.setVpicture(detail.getVpicture());
        video.setName(detail.getTitle());
        video.setNameStr(detail.getTitle());
        video.setResourceIds(26 + "");
        if (detail.getFstlvlType().equalsIgnoreCase("电影")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANYING);
        } else if (detail.getFstlvlType().equalsIgnoreCase("电视剧")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DIANSHIJU);
        } else if (detail.getFstlvlType().equalsIgnoreCase("动漫")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_DONGMAN);
        } else if (detail.getFstlvlType().equalsIgnoreCase("综艺")) {
            video.setRootType(VideoConstant.VIDEO_CATEGORY_ZONGYI);
        }
        if (detail.getFstlvlType().equalsIgnoreCase("电影")) {
            video.setTag("评分:6.8");
        } else
            video.setTag(detail.getUpdateInfo().split(",")[detail.getUpdateInfo().split(",").length - 1]);
        video.setUpdateTime(new Date());
        video.setVideoCount(detail.getVideoCount());
        video.setYear(detail.getYear());
        video.setId(InternetSearchVideo.createId(video.getName(), video.getRootType(), video.getYear()));
        return video;
    }
    public static InternetSearchVideo create(TencentCoverInfo info) {
        InternetSearchVideo video = new InternetSearchVideo();
src/main/java/com/yeshi/buwan/util/video/VideoDetailUtil.java
@@ -11,12 +11,14 @@
import com.yeshi.buwan.funtv.FunTVUtil2;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil;
import com.yeshi.buwan.iqiyi.util.IqiyiUtil2;
import com.yeshi.buwan.mogotv.MogoTVUtil;
import com.yeshi.buwan.service.imp.VideoInfoService;
import com.yeshi.buwan.service.imp.juhe.FunTVService;
import com.yeshi.buwan.service.imp.juhe.IqiyiService;
import com.yeshi.buwan.service.imp.juhe.SoHuService;
import com.yeshi.buwan.service.inter.juhe.FunTV2Service;
import com.yeshi.buwan.service.inter.juhe.Iqiyi2Service;
import com.yeshi.buwan.service.inter.juhe.MogoTVService;
import com.yeshi.buwan.service.inter.juhe.YouKuService;
import com.yeshi.buwan.sohu.SoHuUtil;
import com.yeshi.buwan.util.StringUtil;
@@ -71,6 +73,12 @@
    @Resource
    private YouKuService youKuService;
    @Resource
    private MogoTVUtil mogoTVUtil;
    @Resource
    private MogoTVService mogoTVService;
    @SuppressWarnings("unchecked")
//    @Cacheable(value = "homeCache", key = "'getVideoInfo'+'-'+#videoid+'-'+#resourceId+'-'+#cacheMD5")
@@ -208,6 +216,8 @@
                return soHuService.getVideoDetailList(videoid, page, pageSize);
            case YouKuUtil.RESOURCE_ID:
                return youKuService.getVideoDetailList(videoid, page, pageSize);
            case MogoTVUtil.RESOURCE_ID:
                return mogoTVService.getVideoDetailList(videoid, page, pageSize);
            default:
                return null;
        }
@@ -229,6 +239,8 @@
                return soHuService.getLatestVideoDetail(videoid);
            case YouKuUtil.RESOURCE_ID:
                return soHuService.getLatestVideoDetail(videoid);
            case MogoTVUtil.RESOURCE_ID:
                return soHuService.getLatestVideoDetail(videoid);
            default:
                return null;
        }