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; }