Przeglądaj źródła

修改主键id字段类型,解决前端返回数据精度缺失问题

syh 5 lat temu
rodzic
commit
8b6176a99a

+ 19 - 4
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/HotInformationCtroller.java

@@ -1,5 +1,7 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
 import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
 import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
 import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
@@ -7,14 +9,13 @@ import cn.com.ctop.crawler.modules.oceanengine.service.IDouyinHotService;
 import cn.com.ctop.crawler.modules.oceanengine.service.IEffectCaseService;
 import cn.com.ctop.crawler.modules.oceanengine.service.IHotMaterialService;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.api.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestMethod;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
+import java.util.HashMap;
 import java.util.Map;
 
 /**
@@ -22,6 +23,7 @@ import java.util.Map;
  */
 @RestController
 @RequestMapping("/ctop/hot")
+@Slf4j
 public class HotInformationCtroller {
 
     @Autowired
@@ -85,4 +87,17 @@ public class HotInformationCtroller {
         result.setSuccess(true);
         return result;
     }
+
+    @ResponseBody
+    @RequestMapping(value = "/video/url", method = RequestMethod.GET)
+    public Map<String, Object> getVideoUrl(@RequestParam(name = "id") String id, @RequestParam(name = "type") Integer type) {
+        try {
+            return effectCaseService.getVideoUrl(id, type);
+        } catch (Exception e) {
+            e.printStackTrace();
+            Map<String, Object> result = new HashMap<>();
+            ResultMapUtils.setResultMap(result, StatusCode.COMMON_SERVER_ERROR);
+            return result;
+        }
+    }
 }

+ 11 - 10
jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/job/OceanengineJob.java

@@ -15,7 +15,6 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.JsonNode;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import org.apache.http.impl.cookie.BasicClientCookie;
-import org.apache.poi.hslf.blip.Bitmap;
 import org.bytedeco.javacpp.opencv_core;
 import org.bytedeco.javacv.FFmpegFrameGrabber;
 import org.bytedeco.javacv.Frame;
@@ -27,17 +26,15 @@ import org.quartz.Job;
 import org.quartz.JobExecutionContext;
 import org.quartz.JobExecutionException;
 import org.springframework.beans.factory.annotation.Autowired;
-import sun.misc.BASE64Encoder;
 
 import javax.imageio.ImageIO;
 import java.awt.*;
 import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
-import java.io.File;
 import java.net.HttpURLConnection;
 import java.net.URL;
-import java.util.*;
 import java.util.List;
+import java.util.*;
 
 public class OceanengineJob implements Job {
     @Autowired
@@ -47,11 +44,15 @@ public class OceanengineJob implements Job {
     @Autowired
     private IHotMaterialService hotMaterialService;
     public static void main(String[] args){
-        OceanengineJob oceanengineJob = new OceanengineJob();
-        oceanengineJob.getVideoFirstImage("http://v5-dy.ixigua.com/4651275f4a249f78f7c20bda0a1aa7bb/5e2524c0/video/m/2202d662c8f1cc54dce8a3670f57aa7f1f91154c11b000109273b87f177/?a=1128&br=2754&bt=1377&cr=0&cs=0&dr=0&ds=3&er=&l=20200120105447010012034216116D5EDE&lr=aweme&qs=0&rc=O2dpZGU8ZGg4ZDM0aThnZ0ApNmg2OWllaGU3N2g0ZjZoPGcuYmEtYi8wXzYxYjAzNTYxczMvY18tNS5eMjUyLjAvXjY6Yw%3D%3D");
+        System.out.println(getRealVideoUrl(""));
+    }
 
+    public static String getVideoUrlByVid(String vid) {
+        String url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0";
+        return getRealVideoUrl(url);
     }
-    private String getRealVideoUrl(String url){
+
+    public static String getRealVideoUrl(String url) {
         try {
             URL serverUrl = new URL(url);
             HttpURLConnection conn = (HttpURLConnection) serverUrl
@@ -104,7 +105,8 @@ public class OceanengineJob implements Job {
             e.printStackTrace();
         }
     }
-    private String getVideoUrl(String vid) throws Exception{
+
+    public static String getVideoUrl(String vid) throws Exception {
         String url = "http://i.snssdk.com/video/urls/1/toutiao/mp4/"+vid;
         String result = HttpUtils2.httpGetRequest(url);
         ObjectMapper mapper = new ObjectMapper();
@@ -192,8 +194,7 @@ public class OceanengineJob implements Job {
             ByteArrayOutputStream baos = new ByteArrayOutputStream();//io流
             ImageIO.write(bi, "jpg", baos);
             byte[] bytes = baos.toByteArray();//转换成字节
-            BASE64Encoder encoder = new BASE64Encoder();
-            String png_base64 = encoder.encodeBuffer(bytes).trim();//转换成base64串
+            String png_base64 = Base64.getEncoder().encodeToString(bytes).trim();//转换成base64串
             png_base64 = png_base64.replaceAll("\n", "").replaceAll("\r", "");//删除 \r\n
             //        ImageIO.write(bufferedImage, "png", new File("D:/qrcode1.png"));
             return "data:image/jpg;base64,"+png_base64;

+ 2 - 2
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/DouyinHot.java

@@ -12,8 +12,8 @@ import java.util.Date;
 @TableName("ctop_oceanengine_douyin_hot")
 public class DouyinHot {
     @TableId(value = "id", type = IdType.INPUT)
-    private Long id;
-    private Long mid;
+    private String id;
+    private String mid;
     @JsonProperty("video_id")
     private String videoId;
     @JsonProperty("core_user_id")

+ 1 - 1
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/EffectCase.java

@@ -15,7 +15,7 @@ import java.util.Date;
  */
 public class EffectCase {
     @TableId(value = "id", type = IdType.INPUT)
-    private Long id;
+    private String id;
     private String vid;
     @JsonProperty("creative_label_1")
     @TableField(value = "creative_label_1")

+ 3 - 3
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/entity/HotMaterial.java

@@ -7,15 +7,15 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import lombok.Data;
 import java.util.Date;
 
-@Data
-@TableName("ctop_oceanengine_hot_material")
 /**
  * 广告雷达
  */
+@Data
+@TableName("ctop_oceanengine_hot_material")
 public class HotMaterial {
     @TableId(value = "id",type = IdType.INPUT)
     @JsonProperty("material_id")
-    private Long id;
+    private String id;
     private String vid;
     private String videoUrl;
     private String title;

+ 4 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/IEffectCaseService.java

@@ -4,6 +4,10 @@ import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 
+import java.util.Map;
+
 public interface IEffectCaseService extends IService<EffectCase> {
     IPage<EffectCase> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize);
+
+    Map<String, Object> getVideoUrl(String id, Integer type) throws Exception;
 }

+ 83 - 0
module-crawler/src/main/java/cn/com/ctop/crawler/modules/oceanengine/service/impl/EffectCaseServiceImpl.java

@@ -1,16 +1,36 @@
 package cn.com.ctop.crawler.modules.oceanengine.service.impl;
 
+import cn.com.ctop.common.module.utils.Base64Utils;
+import cn.com.ctop.common.module.utils.HttpUtils2;
+import cn.com.ctop.common.module.utils.ResultMapUtils;
+import cn.com.ctop.common.module.utils.StatusCode;
+import cn.com.ctop.crawler.modules.oceanengine.entity.DouyinHot;
 import cn.com.ctop.crawler.modules.oceanengine.entity.EffectCase;
+import cn.com.ctop.crawler.modules.oceanengine.entity.HotMaterial;
 import cn.com.ctop.crawler.modules.oceanengine.mapper.EffectCaseMapper;
+import cn.com.ctop.crawler.modules.oceanengine.service.IDouyinHotService;
 import cn.com.ctop.crawler.modules.oceanengine.service.IEffectCaseService;
+import cn.com.ctop.crawler.modules.oceanengine.service.IHotMaterialService;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.fasterxml.jackson.databind.JsonNode;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.util.HashMap;
+import java.util.Map;
+
 @Service
 public class EffectCaseServiceImpl extends ServiceImpl<EffectCaseMapper, EffectCase> implements IEffectCaseService {
+    @Autowired
+    private IDouyinHotService douyinHotService;
+    @Autowired
+    private IHotMaterialService hotMaterialService;
     @Override
     public IPage<EffectCase> queryHotFeeds(String userName, String start, String end, String orderByColumn, String orderByType, Integer pageNo, Integer pageSize) {
         QueryWrapper<EffectCase> queryWrapper = new QueryWrapper<>();
@@ -28,4 +48,67 @@ public class EffectCaseServiceImpl extends ServiceImpl<EffectCaseMapper, EffectC
         Page<EffectCase> page = new Page<>(pageNo, pageSize);
         return this.page(page, queryWrapper);
     }
+
+    @Override
+    public Map<String, Object> getVideoUrl(String id, Integer type) throws Exception {
+        Map<String, Object> result = new HashMap<>();
+        String url = null;
+        String vid = null;
+        if (null != type && type == 1) {
+            //抖音热门
+            DouyinHot douyinHot = douyinHotService.getById(id);
+            vid = douyinHot.getVideoId();
+        } else if (type == 2) {
+            //效果案例
+            EffectCase effectCase = this.getById(id);
+            vid = effectCase.getVid();
+        } else {
+            //广告雷达
+            HotMaterial hotMaterial = hotMaterialService.getById(id);
+            vid = hotMaterial.getVid();
+        }
+        url = getRealVideoUrl("https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0");
+        if (null == url || url.trim().equals("")) {
+            url = getVideoUrl(vid);
+        }
+        result.put("url", url);
+        ResultMapUtils.setResultMap(result, StatusCode.COMMON_SUCCESS);
+        return result;
+    }
+
+    public static String getVideoUrl(String vid) throws Exception {
+        String url = "http://i.snssdk.com/video/urls/1/toutiao/mp4/" + vid;
+        String result = HttpUtils2.httpGetRequest(url);
+        ObjectMapper mapper = new ObjectMapper();
+        if (result != null) {
+            JsonNode node = mapper.readTree(result);
+            String mainUrl = node.get("data").get("video_list").get("video_1").get("main_url").asText();
+            return Base64Utils.decode(mainUrl);
+        }
+        return null;
+    }
+
+    public static String getVideoUrlByVid(String vid) {
+        String url = "https://aweme.snssdk.com/aweme/v1/playwm/?video_id=" + vid + "&line=0";
+        return getRealVideoUrl(url);
+    }
+
+    public static String getRealVideoUrl(String url) {
+        try {
+            URL serverUrl = new URL(url);
+            HttpURLConnection conn = (HttpURLConnection) serverUrl
+                    .openConnection();
+            conn.setRequestMethod("GET");
+            // 必须设置false,否则会自动redirect到Location的地址
+            conn.setInstanceFollowRedirects(false);
+            conn.addRequestProperty("User-Agent",
+                    "Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.9.2.8) Firefox/3.6.8");
+            conn.connect();
+            String location = conn.getHeaderField("Location");
+            return location;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        return null;
+    }
 }