| | |
| | | import com.yeshi.buwan.domain.VideoType; |
| | | import com.yeshi.buwan.pptv.entity.PPTVProgram; |
| | | import com.yeshi.buwan.pptv.entity.PPTVSeries; |
| | | import com.yeshi.buwan.util.AESUtil; |
| | | import com.yeshi.buwan.util.StringUtil; |
| | | import com.yeshi.buwan.util.video.VideoConstant; |
| | | import com.yeshi.buwan.vo.AcceptData; |
| | | |
| | | import java.util.ArrayList; |
| | | import java.util.HashSet; |
| | | import java.util.List; |
| | | import java.util.Set; |
| | | |
| | | public class PPTVUtil { |
| | | |
| | | public final static int RESOURCE_ID=25; |
| | | public final static int RESOURCE_ID = 25; |
| | | |
| | | public final static int PLAY_NONE = 0;// 不能播放 |
| | | public final static int PLAY_HTML = 1;// 跳转移动端网页播放 |
| | |
| | | case "动漫": |
| | | videoType = VideoConstant.VIDEO_CATEGORY_DONGMAN; |
| | | break; |
| | | case "少儿": |
| | | videoType = 312; |
| | | break; |
| | | default: |
| | | return null; |
| | | } |
| | | |
| | | return (long) videoType; |
| | |
| | | * @param series |
| | | * @return |
| | | */ |
| | | public static VideoInfo convertToVideoInfo(PPTVSeries series) { |
| | | public static List<VideoConvertResult> convertToVideoInfo(PPTVSeries series) { |
| | | Long videoTypeId = getVideoType(series); |
| | | |
| | | if (videoTypeId == null) |
| | | return null; |
| | | |
| | | List<VideoConvertResult> list = new ArrayList<>(); |
| | | |
| | | if (videoTypeId.longValue() == VideoConstant.VIDEO_CATEGORY_DIANYING) { |
| | | //PPTV电影一个百科ID下面可能有多个视频(国语版/粤语版) |
| | | for (PPTVProgram program : series.getSeries()) { |
| | | list.add(new VideoConvertResult(convertToVideoInfo(series, program), program.getProgramCode())); |
| | | } |
| | | } else { |
| | | list.add(new VideoConvertResult(convertToVideoInfo(series, null), null)); |
| | | } |
| | | return list; |
| | | } |
| | | |
| | | private static VideoInfo convertToVideoInfo(PPTVSeries series, PPTVProgram program) { |
| | | int year = Integer.parseInt(series.getReleaseYear()); |
| | | int month = 1; |
| | | int day = 1; |
| | |
| | | String score = series.getScore(); |
| | | |
| | | String tag = ""; |
| | | VideoType videoType = new VideoType(getVideoType(series)); |
| | | Long videoTypeId = getVideoType(series); |
| | | if (videoTypeId == null) |
| | | return null; |
| | | VideoType videoType = new VideoType(videoTypeId); |
| | | |
| | | |
| | | //电影 |
| | | if (videoType.getId() == VideoConstant.VIDEO_CATEGORY_DIANYING) { |
| | | tag = "评分:" + score; |
| | | } else if (videoType.getId() == VideoConstant.VIDEO_CATEGORY_DIANSHIJU || videoType.getId() == VideoConstant.VIDEO_CATEGORY_DONGMAN) { |
| | | //电视剧,动漫 |
| | | if (series.getSeriesCount().trim().equalsIgnoreCase(series.getCurrentNum().trim())) { |
| | | if (series.getCurrentNum() != null && series.getSeriesCount().trim().equalsIgnoreCase(series.getCurrentNum().trim())) { |
| | | tag = series.getSeriesCount() + "集全"; |
| | | } else { |
| | | tag = "更新至" + series.getCurrentNum() + "集"; |
| | |
| | | } else { |
| | | tag = series.getPublishTime().split(" ")[0]; |
| | | } |
| | | } else { |
| | | if ("1".equalsIgnoreCase(series.getSeriesCount())) { |
| | | tag = "评分:" + score; |
| | | } else { |
| | | if (series.getCurrentNum() != null && series.getSeriesCount().trim().equalsIgnoreCase(series.getCurrentNum().trim())) { |
| | | tag = series.getSeriesCount() + "集全"; |
| | | } else { |
| | | if (series.getCurrentNum() != null) |
| | | tag = "更新至" + series.getCurrentNum() + "集"; |
| | | else { |
| | | tag = "更新至" + series.getSeriesCount() + "集"; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | String latestHpicture = series.getSeries().get(series.getSeries().size() - 1).getSubHorCover(); |
| | | String latestHpicture = program != null ? program.getSubHorCover() : series.getSeries().get(series.getSeries().size() - 1).getSubHorCover(); |
| | | |
| | | long updateTime = System.currentTimeMillis(); |
| | | |
| | |
| | | vi.setLatestVpicture(""); |
| | | vi.setMainActor(mainActor); |
| | | vi.setMonth(month + ""); |
| | | vi.setName(series.getName()); |
| | | vi.setName(program != null ? program.getProgramSetTiltle() : series.getName()); |
| | | vi.setNowNumber(0 + ""); |
| | | vi.setOrderby("0"); |
| | | vi.setPicture(series.getCover()); |
| | |
| | | vi.setWatchCount(0 + ""); |
| | | vi.setYear(year + ""); |
| | | vi.setUpdatetime(updateTime + ""); |
| | | vi.setVideocount(series.getSeries().size()); |
| | | vi.setVideocount(program != null ? 1 : series.getSeries().size()); |
| | | return vi; |
| | | } |
| | | |
| | |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取pptv的用户ID |
| | | * |
| | | * @param uid |
| | | * @return |
| | | */ |
| | | public static String getPPTVUid(String uid) { |
| | | return "buwan_" + uid; |
| | | } |
| | | |
| | | /** |
| | | * 获取pptvcode |
| | | * |
| | | * @param pptvUid |
| | | * @return |
| | | */ |
| | | public static String getPPTVCode(String pptvUid) { |
| | | if (StringUtil.isNullOrEmpty(pptvUid)) |
| | | return null; |
| | | return AESUtil.encrypt(pptvUid + "#" + System.currentTimeMillis()).replace("/", "_").replace("=", "-"); |
| | | } |
| | | |
| | | public static String getUidFromPPTVUid(String pptvUid) { |
| | | return pptvUid.split("_")[1]; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 解密PPTVCode |
| | | * |
| | | * @param code |
| | | * @return |
| | | */ |
| | | public static PPTVCodeInfo decryptPPTVCode(String code) { |
| | | code = code.replace("_", "/").replace("-", "="); |
| | | String info = AESUtil.decrypt(code); |
| | | if (StringUtil.isNullOrEmpty(info)) { |
| | | return null; |
| | | } else { |
| | | String[] sts = info.split("#"); |
| | | if (sts.length != 2) |
| | | return null; |
| | | PPTVCodeInfo codeInfo = new PPTVCodeInfo(); |
| | | codeInfo.pptvUid = sts[0]; |
| | | codeInfo.time = Long.parseLong(sts[1]); |
| | | return codeInfo; |
| | | } |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取播放链接 |
| | | * |
| | | * @param series |
| | | * @param program |
| | | * @return |
| | | */ |
| | | public static String getPlayUrl(PPTVSeries series, PPTVProgram program) { |
| | | return getPlayUrl(series, program.getProgramCode()); |
| | | } |
| | | |
| | | |
| | | public static String getPlayUrl(PPTVSeries series, String programCode) { |
| | | boolean isMovie = (series.getProgramType() != null && series.getProgramType().contains("电影")) || (series.getProgramType2() != null && series.getProgramType2().contains("电影")); |
| | | //programtype 电影-3 其他-2 |
| | | return String.format("https://acmd.api.pptv.com/2021/bwysdqmovie_thrid_h5.html?cid=%s&vid=%s&programtype=%s", isMovie ? programCode : series.getSeriesCode(), programCode, isMovie ? 3 : 2); |
| | | } |
| | | |
| | | |
| | | public static class PPTVCodeInfo { |
| | | public String pptvUid; |
| | | public long time; |
| | | } |
| | | |
| | | public static Set<String> getAvaiableStates() { |
| | | Set<String> stateSets = new HashSet<>(); |
| | | stateSets.add("add"); |
| | | stateSets.add("update"); |
| | | return stateSets; |
| | | } |
| | | |
| | | public static boolean isVIPVideo(String free) { |
| | | return "1".equalsIgnoreCase((free + "").trim()); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取商品购买成功的缓存Key |
| | | * |
| | | * @param uid |
| | | * @param goodsNo |
| | | * @return |
| | | */ |
| | | public static String getBuyGoodsCacheKey(String uid, String goodsNo) { |
| | | return String.format("pptvbuygoods-%s-%s", uid, goodsNo); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 获取虚拟的视频ID |
| | | * |
| | | * @param cid |
| | | * @return |
| | | */ |
| | | public static String getVisualVideoId(String cid, String vid) { |
| | | return "pptv-" + cid + "-" + vid; |
| | | } |
| | | |
| | | /** |
| | | * 解析infoId |
| | | * |
| | | * @param videoId |
| | | * @return |
| | | */ |
| | | public static String[] parseCidAndVidFromVisualVideoId(String videoId) { |
| | | if (videoId == null) |
| | | return null; |
| | | if (!videoId.contains("pptv-")) |
| | | return null; |
| | | return videoId.replace("pptv-", "").trim().split("-"); |
| | | } |
| | | |
| | | public static class VideoConvertResult { |
| | | public VideoInfo videoInfo; |
| | | public String programCode; |
| | | |
| | | public VideoConvertResult(VideoInfo videoInfo, String programCode) { |
| | | this.videoInfo = videoInfo; |
| | | this.programCode = programCode; |
| | | } |
| | | } |
| | | |
| | | |
| | | } |