Преглед на файлове

提交评论管理接口

xuzuoyun преди 5 години
родител
ревизия
108af2bd08
променени са 14 файла, в които са добавени 1210 реда и са изтрити 81 реда
  1. 27 4
      jeecg-boot-module-system/src/main/java/org/jeecg/modules/ctop/controller/TestController.java
  2. 19 0
      module-common/src/main/java/cn/com/ctop/common/module/entity/HttpClientEntity.java
  3. 171 0
      module-common/src/main/java/cn/com/ctop/common/module/utils/HttpClientUtils.java
  4. 110 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/controller/KuaishouWebController.java
  5. 17 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/entity/KuaishouUserCookie.java
  6. 7 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/mapper/KuaishouUserCookieMapper.java
  7. 7 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/IKuaishouUserCookieService.java
  8. 19 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/IKuaishouWebInterfaceService.java
  9. 11 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouUserCookieServiceImpl.java
  10. 768 61
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouWebInterfaceServiceImpl.java
  11. 11 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouAcceptVO.java
  12. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouQrStartVO.java
  13. 16 0
      module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouUserVO.java
  14. 11 16
      pom.xml

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

@@ -1,14 +1,14 @@
 package org.jeecg.modules.ctop.controller;
 
+import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
 import com.alibaba.fastjson.JSONObject;
+import org.jeecg.common.api.vo.Result;
 import org.jeecg.modules.ctop.service.ICreateInternalService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
 
 import java.util.Map;
+import java.util.UUID;
 
 /**
  * @author jeecg-boot
@@ -18,9 +18,32 @@ import java.util.Map;
 public class TestController {
     @Autowired
     private ICreateInternalService createInternalService;
+    @Autowired
+    private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
 
     @PostMapping(value = "/create")
     public Map<String, Object> authorization(@RequestBody JSONObject jsonObject) {
         return createInternalService.createInternal(jsonObject);
     }
+
+    @GetMapping(value = "/t")
+    public String test() {
+        Result<String> result = new Result<String>();
+        try {
+            String requestId = UUID.randomUUID().toString();
+            String img = kuaishouWebInterfaceService.qrLogin(requestId);
+            if (img != null) {
+                result.setSuccess(true);
+                result.setResult(img);
+            } else {
+                result.setSuccess(false);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return "success";
+    }
+
+
 }

+ 19 - 0
module-common/src/main/java/cn/com/ctop/common/module/entity/HttpClientEntity.java

@@ -0,0 +1,19 @@
+package cn.com.ctop.common.module.entity;
+
+import cn.com.ctop.common.module.utils.HttpClientUtils;
+import lombok.Data;
+import org.apache.http.client.CookieStore;
+import org.apache.http.impl.client.CloseableHttpClient;
+
+import java.io.Serializable;
+import java.util.Map;
+
+@Data
+public class HttpClientEntity implements Serializable {
+    private String url;
+    private CloseableHttpClient closeableHttpClient;
+    private CookieStore cookieStore;
+    private Map<String, String> headers;
+    private Map<String, Object> params;
+    private String result;
+}

+ 171 - 0
module-common/src/main/java/cn/com/ctop/common/module/utils/HttpClientUtils.java

@@ -0,0 +1,171 @@
+package cn.com.ctop.common.module.utils;
+
+import cn.com.ctop.common.module.entity.HttpClientEntity;
+import com.google.gson.Gson;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.http.Header;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.CookieStore;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.config.CookieSpecs;
+import org.apache.http.client.config.RequestConfig;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
+import org.apache.http.conn.ssl.TrustStrategy;
+import org.apache.http.cookie.Cookie;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.impl.client.BasicCookieStore;
+import org.apache.http.impl.client.CloseableHttpClient;
+import org.apache.http.impl.client.HttpClients;
+import org.apache.http.message.BasicNameValuePair;
+import org.apache.http.ssl.SSLContextBuilder;
+import org.apache.http.util.EntityUtils;
+
+import javax.net.ssl.SSLContext;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.security.cert.CertificateException;
+import java.security.cert.X509Certificate;
+import java.util.ArrayList;
+import java.util.List;
+
+@Slf4j
+public class HttpClientUtils {
+    public CookieStore cookieStore = new BasicCookieStore();
+
+    public CloseableHttpClient createSSLClientDefault() {
+        try {
+            SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new TrustStrategy() {
+                //信任所有证书
+                @Override
+                public boolean isTrusted(X509Certificate[] chain, String authType) throws CertificateException {
+                    return true;
+                }
+            }).build();
+            RequestConfig globalConfig = RequestConfig.custom().setConnectTimeout(60000).setSocketTimeout(60000).setCookieSpec(CookieSpecs.STANDARD).build();
+            SSLConnectionSocketFactory sslFactory = new SSLConnectionSocketFactory(sslContext);
+            return HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultRequestConfig(globalConfig).setConnectionReuseStrategy((response, context) -> false).setSSLSocketFactory(sslFactory).build();
+        } catch (Exception e) {
+            log.error("处理Https证书异常", e);
+        }
+        return HttpClients.createDefault();
+    }
+
+    public HttpClientEntity httpGetRequest(HttpClientEntity httpClientEntity) {
+        try {
+            CookieStore cs = httpClientEntity.getCookieStore();
+            if (cs != null) {
+                for (Cookie ck : cs.getCookies()) {
+                    cookieStore.addCookie(ck);
+                }
+            }
+            HttpResponse response = null;
+            HttpGet httpGet = new HttpGet(httpClientEntity.getUrl());
+            String result = null;
+            CloseableHttpClient httpClient = httpClientEntity.getCloseableHttpClient();
+            response = httpClient.execute(httpGet);
+
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
+                String newUrl = response.getFirstHeader("Location").getValue();
+                httpClientEntity.setUrl(newUrl);
+                return httpGetRequest(httpClientEntity);
+            } else if (statusCode == HttpStatus.SC_OK) {
+                BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+                String line = null;
+                StringBuilder builder = new StringBuilder();
+                while ((line = reader.readLine()) != null) {
+                    builder.append(line);
+                }
+                result = builder.toString();
+            }
+
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        httpClientEntity.setCookieStore(cookieStore);
+        return httpClientEntity;
+    }
+
+    public HttpClientEntity httpPostParamRequest(HttpClientEntity httpClientEntity) {
+        try {
+            CookieStore cs = httpClientEntity.getCookieStore();
+            if (cs != null) {
+                for (Cookie ck : cs.getCookies()) {
+                    cookieStore.addCookie(ck);
+                }
+            }
+
+            HttpPost httppost = new HttpPost(httpClientEntity.getUrl());
+            for (String key : httpClientEntity.getHeaders().keySet()) {
+                httppost.setHeader(key, httpClientEntity.getHeaders().get(key));
+            }
+            List<NameValuePair> paramList = new ArrayList<NameValuePair>();
+            for (String key : httpClientEntity.getParams().keySet()) {
+                BasicNameValuePair basicNameValuePair = new BasicNameValuePair(key, String.valueOf(httpClientEntity.getParams().get(key)));
+                paramList.add(basicNameValuePair);
+            }
+            UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(paramList);
+            httppost.setEntity(formEntity);
+            CloseableHttpClient httpClient = httpClientEntity.getCloseableHttpClient();
+            HttpResponse response = httpClient.execute(httppost);
+
+            int statusCode = response.getStatusLine().getStatusCode();
+            if (statusCode == HttpStatus.SC_MOVED_PERMANENTLY || statusCode == HttpStatus.SC_MOVED_TEMPORARILY) {
+                String newUrl = response.getFirstHeader("Location").getValue();
+                httpClientEntity.setUrl(newUrl);
+                return httpPostParamRequest(httpClientEntity);
+            } else if (statusCode == HttpStatus.SC_OK) {
+                String result = EntityUtils.toString(response.getEntity());
+                log.info(result);
+                httpClientEntity.setResult(result);
+                httpClientEntity.setCloseableHttpClient(httpClient);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            log.error(e.getMessage());
+        }
+        System.out.println(new Gson().toJson(cookieStore.getCookies()));
+        httpClientEntity.setCookieStore(cookieStore);
+        return httpClientEntity;
+    }
+
+    public HttpClientEntity callingGraph(HttpClientEntity httpClientEntity, String json) {
+        CookieStore cs = httpClientEntity.getCookieStore();
+        if (cs != null) {
+            for (Cookie ck : cs.getCookies()) {
+                cookieStore.addCookie(ck);
+            }
+        }
+        HttpClient httpClient = httpClientEntity.getCloseableHttpClient();
+        HttpResponse response = null;
+        HttpPost httpPost = new HttpPost(httpClientEntity.getUrl());
+        for (String key : httpClientEntity.getHeaders().keySet()) {
+            httpPost.setHeader(key, httpClientEntity.getHeaders().get(key));
+        }
+        httpPost.setHeader("Content-Type", "application/json");
+
+        try {
+            StringEntity entity = new StringEntity(json, "utf-8");
+            httpPost.setEntity(entity);
+            response = httpClient.execute(httpPost);
+
+            BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));
+            String line = null;
+            StringBuilder builder = new StringBuilder();
+            while ((line = reader.readLine()) != null) {
+                builder.append(line);
+            }
+            httpClientEntity.setResult(builder.toString());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+        httpClientEntity.setCookieStore(cookieStore);
+        System.out.println(new Gson().toJson(cookieStore.getCookies()));
+        return httpClientEntity;
+    }
+}

+ 110 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/controller/KuaishouWebController.java

@@ -0,0 +1,110 @@
+package cn.com.ctop.kuaishou.modules.graphql.controller;
+
+import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouWebInterfaceService;
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouAcceptVO;
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouQrStartVO;
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouUserVO;
+import org.jeecg.common.api.vo.Result;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Map;
+import java.util.UUID;
+
+@RestController
+@RequestMapping("/ks/web")
+public class KuaishouWebController {
+    @Autowired
+    private IKuaishouWebInterfaceService kuaishouWebInterfaceService;
+
+    @PostMapping(value = "/login/qr")
+    public Result<String> getQrCode() {
+        Result<String> result = new Result<String>();
+        try {
+            String requestId = UUID.randomUUID().toString();
+            String img = kuaishouWebInterfaceService.qrLogin(requestId);
+            if (img != null) {
+                result.setSuccess(true);
+                result.setResult("data:image/png;base64," + img);
+            } else {
+                result.setSuccess(false);
+            }
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/login/status")
+    public Result<Map<String, Object>> getStatus(String requestId) {
+        Result<Map<String, Object>> result = new Result<Map<String, Object>>();
+        try {
+            Map<String, Object> statusMap = kuaishouWebInterfaceService.loginStatus(requestId);
+            result.setSuccess(true);
+            result.setResult(statusMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/video/list")
+    public Result<Map<String, Object>> videoList(String ksid, String pcursor) {
+        Result<Map<String, Object>> result = new Result<Map<String, Object>>();
+        try {
+            Map<String, Object> statusMap = kuaishouWebInterfaceService.videoList(ksid, pcursor);
+            result.setSuccess(true);
+            result.setResult(statusMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/comment/list")
+    public Result<Map<String, Object>> commentList(String ksid, String photoId, String pcursor) {
+        Result<Map<String, Object>> result = new Result<Map<String, Object>>();
+        try {
+            Map<String, Object> statusMap = kuaishouWebInterfaceService.commentList(ksid, photoId, pcursor);
+            result.setSuccess(true);
+            result.setResult(statusMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/comment/delete")
+    public Result<Map<String, Object>> commentDelete(String ksid, String photoId, Long commentId) {
+        Result<Map<String, Object>> result = new Result<Map<String, Object>>();
+        try {
+            Map<String, Object> statusMap = kuaishouWebInterfaceService.commentDelete(ksid, photoId, commentId);
+            result.setSuccess(true);
+            result.setResult(statusMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+
+    @PostMapping(value = "/subcomment/list")
+    public Result<Map<String, Object>> subCommentList(String ksid, String photoId, Long rootCommentId, String pcursor) {
+        Result<Map<String, Object>> result = new Result<Map<String, Object>>();
+        try {
+            Map<String, Object> statusMap = kuaishouWebInterfaceService.subCommentList(ksid, photoId, rootCommentId, pcursor);
+            result.setSuccess(true);
+            result.setResult(statusMap);
+        } catch (Exception e) {
+            e.printStackTrace();
+            result.setSuccess(false);
+        }
+        return result;
+    }
+}

+ 17 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/entity/KuaishouUserCookie.java

@@ -0,0 +1,17 @@
+package cn.com.ctop.kuaishou.modules.graphql.entity;
+
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import lombok.Data;
+
+@Data
+@TableName("ctop_kuaishou_user_cookie")
+public class KuaishouUserCookie {
+    @TableId
+    private String userId;
+    @TableId
+    private String ksid;
+    private String eid;
+    private String cookie;
+    private String userName;
+}

+ 7 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/mapper/KuaishouUserCookieMapper.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.kuaishou.modules.graphql.mapper;
+
+import cn.com.ctop.kuaishou.modules.graphql.entity.KuaishouUserCookie;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+public interface KuaishouUserCookieMapper extends BaseMapper<KuaishouUserCookie> {
+}

+ 7 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/IKuaishouUserCookieService.java

@@ -0,0 +1,7 @@
+package cn.com.ctop.kuaishou.modules.graphql.service;
+
+import cn.com.ctop.kuaishou.modules.graphql.entity.KuaishouUserCookie;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+public interface IKuaishouUserCookieService extends IService<KuaishouUserCookie> {
+}

+ 19 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/IKuaishouWebInterfaceService.java

@@ -1,13 +1,32 @@
 package cn.com.ctop.kuaishou.modules.graphql.service;
 
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouAcceptVO;
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouQrStartVO;
+import cn.com.ctop.kuaishou.modules.graphql.vo.KuaishouUserVO;
+
 import java.io.IOException;
 import java.util.Map;
 
 public interface IKuaishouWebInterfaceService {
     public void getVideoList(String uid) throws IOException;
+
     public String checkKuaishouUser(String videoUrl);
 
     public void adkuaishouWebLogin(String phone, String password) throws IOException;
 
     public void deleteAllComment(Map<String, String> pcursorMap);
+
+    public void test();
+
+    public String qrLogin(String taskId) throws Exception;
+
+    public Map<String, Object> loginStatus(String taskId);
+
+    public Map<String, Object> commentDelete(String ksid, String photoId, Long commentId);
+
+    public Map<String, Object> videoList(String ksid, String pcursor);
+
+    public Map<String, Object> commentList(String ksid, String photoId, String pcursor);
+
+    public Map<String, Object> subCommentList(String ksid, String photoId, Long rootCommentId, String pcursor);
 }

+ 11 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouUserCookieServiceImpl.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.kuaishou.modules.graphql.service.impl;
+
+import cn.com.ctop.kuaishou.modules.graphql.entity.KuaishouUserCookie;
+import cn.com.ctop.kuaishou.modules.graphql.mapper.KuaishouUserCookieMapper;
+import cn.com.ctop.kuaishou.modules.graphql.service.IKuaishouUserCookieService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+@Service
+public class KuaishouUserCookieServiceImpl extends ServiceImpl<KuaishouUserCookieMapper, KuaishouUserCookie> implements IKuaishouUserCookieService {
+}

Файловите разлики са ограничени, защото са твърде много
+ 768 - 61
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/service/impl/KuaishouWebInterfaceServiceImpl.java


+ 11 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouAcceptVO.java

@@ -0,0 +1,11 @@
+package cn.com.ctop.kuaishou.modules.graphql.vo;
+
+import lombok.Data;
+
+@Data
+public class KuaishouAcceptVO {
+    private Integer result;
+    private String qrToken;
+    private String callback;
+    private String sid;
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouQrStartVO.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.graphql.vo;
+
+import cn.com.ctop.common.module.entity.HttpClientEntity;
+import lombok.Data;
+
+@Data
+public class KuaishouQrStartVO {
+    private Integer result;
+    private Long expireTime;
+    private String qrLoginSignature;
+    private String imageData;
+    private String callback;
+    private String qrLoginToken;
+    private String sid;
+    private String requestId;
+}

+ 16 - 0
module-kuaishou/src/main/java/cn/com/ctop/kuaishou/modules/graphql/vo/KuaishouUserVO.java

@@ -0,0 +1,16 @@
+package cn.com.ctop.kuaishou.modules.graphql.vo;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import lombok.Data;
+
+@Data
+public class KuaishouUserVO {
+    @JsonProperty("user_id")
+    private Long userId;
+    private String headurl;
+    @JsonProperty("user_sex")
+    private String userSex;
+    private String eid;
+    @JsonProperty("user_name")
+    private String userName;
+}

+ 11 - 16
pom.xml

@@ -279,21 +279,6 @@
             <version>2.6.0</version>
         </dependency>
         <dependency>
-            <groupId>com.graphql-java</groupId>
-            <artifactId>graphql-java</artifactId>
-            <version>13.0</version>
-        </dependency>
-        <dependency>
-            <groupId>org.mountcloud</groupId>
-            <artifactId>graphql-client</artifactId>
-            <version>1.2</version>
-        </dependency>
-        <!--		<dependency>-->
-        <!--			<groupId>io.aexp.nodes.graphql</groupId>-->
-        <!--			<artifactId>nodes</artifactId>-->
-        <!--			<version>0.4.0</version>-->
-        <!--		</dependency>-->
-        <dependency>
             <groupId>org.apache.pdfbox</groupId>
             <artifactId>fontbox</artifactId>
             <version>2.0.15</version>
@@ -332,7 +317,17 @@
         <dependency>
             <groupId>net.sourceforge.htmlunit</groupId>
             <artifactId>htmlunit</artifactId>
-            <version>2.35.0</version>
+            <version>2.36.0</version>
+        </dependency>
+        <!--        <dependency>-->
+        <!--            <groupId>io.aexp.nodes.graphql</groupId>-->
+        <!--            <artifactId>nodes</artifactId>-->
+        <!--            <version>0.5.0</version>-->
+        <!--        </dependency>-->
+        <dependency>
+            <groupId>io.aexp.nodes.graphql</groupId>
+            <artifactId>nodes</artifactId>
+            <version>0.4.0</version>
         </dependency>
         <dependency>
             <groupId>commons-codec</groupId>