Przeglądaj źródła

抽帧历史文件

yumeng 5 lat temu
rodzic
commit
13fa9f13dc

+ 20 - 6
jeecg-boot-module-system/src/test/java/org/jeecg/SampleTest.java

@@ -1,10 +1,10 @@
 package org.jeecg;
 
 import cn.com.ctop.common.module.entity.BindAccountLogin;
-import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.common.module.service.IBindAccountLoginService;
 import cn.com.ctop.common.module.service.ICtopOauthTokenService;
 import cn.com.ctop.common.module.utils.CtopAdConstant;
+import cn.com.ctop.common.module.utils.HttpUtils;
 import cn.com.ctop.crawler.modules.pangolin.entity.PangolinApp;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinAppService;
 import cn.com.ctop.crawler.modules.pangolin.service.PangolinCrawlerService;
@@ -13,6 +13,8 @@ import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService
 import cn.com.ctop.toutiao.modules.report.service.IByteDanceVideoReportDailyService;
 import cn.com.ctop.toutiao.modules.report.service.IBytedanceReportService;
 import cn.com.ctop.toutiao.modules.report.service.IReportService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import lombok.extern.slf4j.Slf4j;
 import org.jeecg.common.util.DateUtils;
@@ -22,10 +24,9 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
 import org.springframework.test.context.junit4.SpringRunner;
 
-import java.text.SimpleDateFormat;
-import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
@@ -46,14 +47,27 @@ public class SampleTest {
     @Test
     public void testOceanEngineJob() {
         try {
-            CtopOauthToken byId = oauthTokenService.getById(1654059015242756L);
+            String url = "https://ad.e.kuaishou.com/rest/openapi/v1/tool/key_frame";
+            JSONArray ptotoArr = new JSONArray();
+            ptotoArr.add("5188991225263567823");
+
+            Map<String, String> headers = new HashMap<>();
+            headers.put("Access-Token", "e251db4aa139eb36623818581003bcec");
+            headers.put("Content-Type", "application/json");
+            JSONObject requestJson = new JSONObject();
+            requestJson.put("advertiser_id", 161468);
+            requestJson.put("photo_ids", ptotoArr);
+            //  requestJson.put("type", type);
+            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
+            System.err.println(result);
+            //     CtopOauthToken byId = oauthTokenService.getById(1654059015242756L);
 
           /*  SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
             Date start = simpleDateFormat.parse("2020-01-01");
             Date end = simpleDateFormat.parse("2020-06-03");*/
 
 
-            String nowDate = "2020-06-03";
+            /*String nowDate = "2020-06-03";
             String endDate = "2020-01-01";
             SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
             Date start = simpleDateFormat.parse(nowDate);
@@ -63,7 +77,7 @@ public class SampleTest {
                 String formatDate = simpleDateFormat.format(dates.get(i));
                 Date parse = simpleDateFormat.parse(formatDate);
                 reportService.getAdvertiserReport(byId, parse, parse, CtopAdConstant.BYTEDANCE_REPORT_TYPE_DAILY);
-            }
+            }*/
         } catch (Exception e) {
             e.printStackTrace();
         }

+ 0 - 1
module-common/src/main/java/cn/com/ctop/common/module/utils/LoadFileUtil.java

@@ -37,7 +37,6 @@ public class LoadFileUtil {
             //文件保存位置
             File saveDir = new File(savePath);
             if (!saveDir.exists()) {
-//            saveDir.mkdir();
                 saveDir.mkdirs();
             }
             String localPath = saveDir + File.separator + fileName;

+ 2 - 2
module-ctop/src/main/java/cn/com/ctop/manage/modules/material/service/impl/MaterialUploadServiceImpl.java

@@ -110,8 +110,8 @@ public class MaterialUploadServiceImpl implements IMaterialUploadService {
                         continue;
                     }
                     touTiaoExecutorService.submit(new Runnable() {
-                        @Override
-                        public void run() {
+                                @Override
+                                public void run() {
                             try {
                                 log.info("头条文件多线程上传:{},accountId:{}", Thread.currentThread().getName(), accountId);
                                 if ("VIDEO".equals(materialInfo.getType())) {

+ 24 - 2
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/controller/BatchController.java

@@ -114,16 +114,38 @@ public class BatchController {
             spendVo.setBudget(budget);
             result.setSuccess(true);
             result.setResult(spendVo);
-
             Thread thread = new Thread() {
                 @Override
                 public void run() {
                     iKuaishouInterfaceService.getAppList(oauthToken.getAccountId(), oauthToken.getAccessToken());
+                }
+            };
+            thread.start();
+
+            Thread thread1 = new Thread() {
+                @Override
+                public void run() {
                     iKuaishouInterfaceService.getPopulationList(accountId, oauthToken.getAccessToken());
+                }
+            };
+            thread1.start();
+
+            Thread thread2 = new Thread() {
+                @Override
+                public void run() {
                     iKuaishouInterfaceService.getVideoList(oauthToken, null, null);
                 }
             };
-            thread.start();
+            thread2.start();
+
+            Thread thread3 = new Thread() {
+                @Override
+                public void run() {
+                    iKuaishouInterfaceService.getSuZaoList(oauthToken.getAccessToken(), oauthToken.getAccountId(), 1);
+                    videoGetService.getKeyFrame(oauthToken);
+                }
+            };
+            thread3.start();
 
         } catch (Exception e) {
             e.printStackTrace();

+ 2 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/IKuaiShouVideoGetService.java

@@ -1,5 +1,6 @@
 package cn.com.ctop.kuaishou.modules.batch.service;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouImageGet;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -16,4 +17,5 @@ import java.util.List;
 public interface IKuaiShouVideoGetService extends IService<KuaiShouVideoGet> {
     void replaceBatch(List<KuaiShouVideoGet> videoGets);
 
+    void getKeyFrame(CtopOauthToken token);
 }

+ 98 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaiShouVideoGetServiceImpl.java

@@ -1,13 +1,28 @@
 package cn.com.ctop.kuaishou.modules.batch.service.impl;
 
+import cn.com.ctop.common.module.entity.CtopOauthToken;
+import cn.com.ctop.common.module.entity.MaterialCutFrame;
+import cn.com.ctop.common.module.service.IMaterialCutFrameService;
+import cn.com.ctop.common.module.utils.Check;
+import cn.com.ctop.common.module.utils.HttpUtils;
+import cn.com.ctop.common.module.utils.LoadFileUtil;
 import cn.com.ctop.kuaishou.modules.batch.entity.KuaiShouVideoGet;
 import cn.com.ctop.kuaishou.modules.batch.mapper.KuaiShouVideoGetMapper;
 import cn.com.ctop.kuaishou.modules.batch.service.IKuaiShouVideoGetService;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
 import org.springframework.stereotype.Service;
 
+import java.io.IOException;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
 
 /**
  * @Description: 快手-获取视频接口
@@ -19,9 +34,92 @@ import java.util.List;
 public class KuaiShouVideoGetServiceImpl extends ServiceImpl<KuaiShouVideoGetMapper, KuaiShouVideoGet> implements IKuaiShouVideoGetService {
     @Autowired
     private KuaiShouVideoGetMapper videoGetMapper;
+    @Autowired
+    private IMaterialCutFrameService materialCutFrameService;
+    static ExecutorService executorService = Executors.newFixedThreadPool(15);
+
+
+    @Value("${oss.replace.download}")
+    private String downloadUrl;
 
     @Override
     public void replaceBatch(List<KuaiShouVideoGet> videoGets) {
         videoGetMapper.replaceBatch(videoGets);
     }
+
+    /**
+     * 获取关键帧
+     *
+     * @param
+     */
+    @Override
+    public void getKeyFrame(CtopOauthToken token) {
+        try {
+            QueryWrapper<KuaiShouVideoGet> videoGetQueryWrapper = new QueryWrapper<>();
+            videoGetQueryWrapper.eq("account_id", token.getAccountId());
+            videoGetQueryWrapper.eq("channel_type", 1);
+            List<KuaiShouVideoGet> kuaiShouVideoGets = videoGetMapper.selectList(videoGetQueryWrapper);
+            if (Check.isNull(kuaiShouVideoGets)) {
+                return;
+            }
+            for (KuaiShouVideoGet videoGet : kuaiShouVideoGets) {
+                if (!Check.isNull(videoGet.getSignature())) {
+                    QueryWrapper<MaterialCutFrame> cutFrameQueryWrapper = new QueryWrapper<>();
+                    cutFrameQueryWrapper.eq("video_signature", videoGet.getSignature());
+                    cutFrameQueryWrapper.last("limit 1");
+                    MaterialCutFrame one = materialCutFrameService.getOne(cutFrameQueryWrapper);
+                    if (!Check.isNull(one)) {
+                        continue;
+                    }
+                    executorService.submit(new Runnable() {
+                        @Override
+                        public void run() {
+                            String url = "https://ad.e.kuaishou.com/rest/openapi/v1/tool/key_frame";
+                            JSONArray photoArr = new JSONArray();
+                            photoArr.add(videoGet.getPhotoId());
+                            Map<String, String> headers = new HashMap<>();
+                            headers.put("Access-Token", token.getAccessToken());
+                            headers.put("Content-Type", "application/json");
+                            JSONObject requestJson = new JSONObject();
+                            requestJson.put("advertiser_id", token.getAccountId());
+                            requestJson.put("photo_ids", photoArr);
+                            String result = HttpUtils.kuaiShouhttpPostRequest(url, requestJson.toJSONString(), headers);
+                            JSONObject resultJson = JSONObject.parseObject(result);
+                            if (!Check.isNull(resultJson)) {
+                                Integer code = resultJson.getInteger("code");
+                                if (code == 0) {
+                                    JSONArray dataArr = resultJson.getJSONArray("data");
+                                    if (!Check.isNull(dataArr)) {
+                                        for (int i = 0; i < dataArr.size(); i++) {
+                                            String imageUrl = dataArr.getString(i);
+                                            String localPath = LoadFileUtil.downLoadFromUrl(imageUrl, downloadUrl);
+                                            String md5 = null;
+                                            try {
+                                                md5 = LoadFileUtil.getMD5(localPath);
+                                            } catch (IOException e) {
+                                                e.printStackTrace();
+                                                continue;
+                                            }
+                                            MaterialCutFrame materialCutFrame = new MaterialCutFrame();
+                                            materialCutFrame.setImageIndex(i);
+                                            materialCutFrame.setVideoSignature(videoGet.getSignature());
+                                            materialCutFrame.setUrl(imageUrl);
+                                            materialCutFrame.setSignature(md5);
+                                            materialCutFrameService.save(materialCutFrame);
+                                            LoadFileUtil.delFile(localPath);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+                    });
+                }
+
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+    }
 }

+ 4 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/batch/service/impl/KuaishouInterfaceServiceImpl.java

@@ -3011,6 +3011,10 @@ public class KuaishouInterfaceServiceImpl implements IKuaishouInterfaceService {
         }
         JSONObject dataJson = resultJson.getJSONObject("data");
         if (!Check.isNull(dataJson)) {
+            Integer total_count = dataJson.getInteger("total_count");
+            if (total_count > 2000) {
+                return;
+            }
             JSONArray details = dataJson.getJSONArray("details");
             if (Check.isNull(details)) {
                 return;