From 9739083ffcf9bd4b752724328b059f2610f534f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A7=A6=E8=8B=B1=E6=9D=B0?= <327782001@qq.com> Date: Mon, 23 Oct 2023 14:54:57 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E8=8E=B7=E5=8F=96=E8=AF=84=E8=AE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CsdnController.java | 38 ++ .../entity/resp/ArticleInfo.java | 69 +++ .../entity/resp/ArticleInfo1.java | 447 ++++++++++++++++++ .../entity/resp/BusinessInfo.java | 43 ++ .../entity/resp/CommentData.java | 101 ++++ .../springbootkwan/service/CsdnService.java | 18 + .../service/impl/CsdnServiceImpl.java | 73 +++ 7 files changed, 789 insertions(+) create mode 100644 src/main/java/com/kwan/springbootkwan/controller/CsdnController.java create mode 100644 src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo.java create mode 100644 src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo1.java create mode 100644 src/main/java/com/kwan/springbootkwan/entity/resp/BusinessInfo.java create mode 100644 src/main/java/com/kwan/springbootkwan/entity/resp/CommentData.java create mode 100644 src/main/java/com/kwan/springbootkwan/service/CsdnService.java create mode 100644 src/main/java/com/kwan/springbootkwan/service/impl/CsdnServiceImpl.java diff --git a/src/main/java/com/kwan/springbootkwan/controller/CsdnController.java b/src/main/java/com/kwan/springbootkwan/controller/CsdnController.java new file mode 100644 index 0000000..75b0114 --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/controller/CsdnController.java @@ -0,0 +1,38 @@ +package com.kwan.springbootkwan.controller; + +import com.kwan.springbootkwan.entity.Result; +import com.kwan.springbootkwan.entity.resp.BusinessInfo; +import com.kwan.springbootkwan.service.CsdnService; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@Slf4j +@RestController +@RequestMapping("/csdn") +public class CsdnController { + + @Autowired + private CsdnService service; + + @ApiOperation(value = "获取数据", notes = "获取数据") + @GetMapping("/list") + public Result get() { + final BusinessInfo businessInfo = service.list(); + final BusinessInfo.ArticleData data = businessInfo.getData(); + final List list = data.getList(); + final BusinessInfo.ArticleData.Article article = list.get(0); + final String url = article.getUrl(); + final int index = url.lastIndexOf("/"); + final String articleId = url.substring(index + 1); + System.out.println(articleId); + + service.getArticleInfo(articleId); + return Result.ok(businessInfo); + } +} diff --git a/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo.java b/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo.java new file mode 100644 index 0000000..90fd54d --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo.java @@ -0,0 +1,69 @@ +package com.kwan.springbootkwan.entity.resp; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class ArticleInfo { + private String traceId; + private Integer code; + private ArticleInfoData data; + private String message; + + @Data + public static class ArticleInfoData { + private Integer pageCount; + private Integer floorCount; + private Integer count; + @JsonProperty("list") + private List list; + private Integer foldCount; + + @Data + public static class ArticleInfoDataList { + private Object pointCommentId; + private Info info; + + @Data + public static class Info { + private Boolean flag; + private String dateFormat; + private String vipUrl; + private Object redEnvelopeInfo; + private Integer digg; + private String parentUserName; + private String content; + private Integer years; + private String parentNickName; + private Boolean loginUserDigg; + private String postTime; + private Boolean companyBlog; + private Boolean vip; + private String levelIcon; + private String orderNo; + private String companyBlogIcon; + private String nickName; + private Integer articleId; + private String flagIcon; + private String avatar; + private String userName; + private Integer parentId; + private String vipIcon; + private Boolean isBlack; + private Boolean isTop; + private Integer commentId; + private CommentFromTypeResult commentFromTypeResult; + private String region; + + @Data + public static class CommentFromTypeResult { + private Integer index; + private String title; + private String key; + } + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo1.java b/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo1.java new file mode 100644 index 0000000..fba3766 --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/entity/resp/ArticleInfo1.java @@ -0,0 +1,447 @@ +package com.kwan.springbootkwan.entity.resp; + +import java.io.Serializable; +import java.lang.Boolean; +import java.lang.Integer; +import java.lang.Object; +import java.lang.String; + +public class ArticleInfo1 implements Serializable { + private String traceId; + + private Integer code; + + private Data data; + + private String message; + + public String getTraceId() { + return this.traceId; + } + + public void setTraceId(String traceId) { + this.traceId = traceId; + } + + public Integer getCode() { + return this.code; + } + + public void setCode(Integer code) { + this.code = code; + } + + public Data getData() { + return this.data; + } + + public void setData(Data data) { + this.data = data; + } + + public String getMessage() { + return this.message; + } + + public void setMessage(String message) { + this.message = message; + } + + public static class Data implements Serializable { + private Integer pageCount; + + private Integer floorCount; + + private Integer count; + + private java.util.List list; + + private Integer foldCount; + + public Integer getPageCount() { + return this.pageCount; + } + + public void setPageCount(Integer pageCount) { + this.pageCount = pageCount; + } + + public Integer getFloorCount() { + return this.floorCount; + } + + public void setFloorCount(Integer floorCount) { + this.floorCount = floorCount; + } + + public Integer getCount() { + return this.count; + } + + public void setCount(Integer count) { + this.count = count; + } + + public java.util.List getList() { + return this.list; + } + + public void setList(java.util.List list) { + this.list = list; + } + + public Integer getFoldCount() { + return this.foldCount; + } + + public void setFoldCount(Integer foldCount) { + this.foldCount = foldCount; + } + + public static class List implements Serializable { + private java.util.List sub; + + private Object pointCommentId; + + private Sub info; + + public java.util.List getSub() { + return this.sub; + } + + public void setSub(java.util.List sub) { + this.sub = sub; + } + + public Object getPointCommentId() { + return this.pointCommentId; + } + + public void setPointCommentId(Object pointCommentId) { + this.pointCommentId = pointCommentId; + } + + public Sub getInfo() { + return this.info; + } + + public void setInfo(Sub info) { + this.info = info; + } + + public static class Sub implements Serializable { + private Boolean flag; + + private String dateFormat; + + private String vipUrl; + + private Object redEnvelopeInfo; + + private Integer digg; + + private String parentUserName; + + private String content; + + private Integer years; + + private String parentNickName; + + private Boolean loginUserDigg; + + private String postTime; + + private Boolean companyBlog; + + private Boolean vip; + + private String levelIcon; + + private String orderNo; + + private String companyBlogIcon; + + private String nickName; + + private Integer articleId; + + private String flagIcon; + + private String avatar; + + private String userName; + + private Integer parentId; + + private String vipIcon; + + private Boolean isBlack; + + private Boolean isTop; + + private Integer commentId; + + private CommentFromTypeResult commentFromTypeResult; + + private String region; + + public Boolean getFlag() { + return this.flag; + } + + public void setFlag(Boolean flag) { + this.flag = flag; + } + + public String getDateFormat() { + return this.dateFormat; + } + + public void setDateFormat(String dateFormat) { + this.dateFormat = dateFormat; + } + + public String getVipUrl() { + return this.vipUrl; + } + + public void setVipUrl(String vipUrl) { + this.vipUrl = vipUrl; + } + + public Object getRedEnvelopeInfo() { + return this.redEnvelopeInfo; + } + + public void setRedEnvelopeInfo(Object redEnvelopeInfo) { + this.redEnvelopeInfo = redEnvelopeInfo; + } + + public Integer getDigg() { + return this.digg; + } + + public void setDigg(Integer digg) { + this.digg = digg; + } + + public String getParentUserName() { + return this.parentUserName; + } + + public void setParentUserName(String parentUserName) { + this.parentUserName = parentUserName; + } + + public String getContent() { + return this.content; + } + + public void setContent(String content) { + this.content = content; + } + + public Integer getYears() { + return this.years; + } + + public void setYears(Integer years) { + this.years = years; + } + + public String getParentNickName() { + return this.parentNickName; + } + + public void setParentNickName(String parentNickName) { + this.parentNickName = parentNickName; + } + + public Boolean getLoginUserDigg() { + return this.loginUserDigg; + } + + public void setLoginUserDigg(Boolean loginUserDigg) { + this.loginUserDigg = loginUserDigg; + } + + public String getPostTime() { + return this.postTime; + } + + public void setPostTime(String postTime) { + this.postTime = postTime; + } + + public Boolean getCompanyBlog() { + return this.companyBlog; + } + + public void setCompanyBlog(Boolean companyBlog) { + this.companyBlog = companyBlog; + } + + public Boolean getVip() { + return this.vip; + } + + public void setVip(Boolean vip) { + this.vip = vip; + } + + public String getLevelIcon() { + return this.levelIcon; + } + + public void setLevelIcon(String levelIcon) { + this.levelIcon = levelIcon; + } + + public String getOrderNo() { + return this.orderNo; + } + + public void setOrderNo(String orderNo) { + this.orderNo = orderNo; + } + + public String getCompanyBlogIcon() { + return this.companyBlogIcon; + } + + public void setCompanyBlogIcon(String companyBlogIcon) { + this.companyBlogIcon = companyBlogIcon; + } + + public String getNickName() { + return this.nickName; + } + + public void setNickName(String nickName) { + this.nickName = nickName; + } + + public Integer getArticleId() { + return this.articleId; + } + + public void setArticleId(Integer articleId) { + this.articleId = articleId; + } + + public String getFlagIcon() { + return this.flagIcon; + } + + public void setFlagIcon(String flagIcon) { + this.flagIcon = flagIcon; + } + + public String getAvatar() { + return this.avatar; + } + + public void setAvatar(String avatar) { + this.avatar = avatar; + } + + public String getUserName() { + return this.userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public Integer getParentId() { + return this.parentId; + } + + public void setParentId(Integer parentId) { + this.parentId = parentId; + } + + public String getVipIcon() { + return this.vipIcon; + } + + public void setVipIcon(String vipIcon) { + this.vipIcon = vipIcon; + } + + public Boolean getIsBlack() { + return this.isBlack; + } + + public void setIsBlack(Boolean isBlack) { + this.isBlack = isBlack; + } + + public Boolean getIsTop() { + return this.isTop; + } + + public void setIsTop(Boolean isTop) { + this.isTop = isTop; + } + + public Integer getCommentId() { + return this.commentId; + } + + public void setCommentId(Integer commentId) { + this.commentId = commentId; + } + + public CommentFromTypeResult getCommentFromTypeResult() { + return this.commentFromTypeResult; + } + + public void setCommentFromTypeResult(CommentFromTypeResult commentFromTypeResult) { + this.commentFromTypeResult = commentFromTypeResult; + } + + public String getRegion() { + return this.region; + } + + public void setRegion(String region) { + this.region = region; + } + + public static class CommentFromTypeResult implements Serializable { + private Integer index; + + private String title; + + private String key; + + public Integer getIndex() { + return this.index; + } + + public void setIndex(Integer index) { + this.index = index; + } + + public String getTitle() { + return this.title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getKey() { + return this.key; + } + + public void setKey(String key) { + this.key = key; + } + } + } + } + } +} diff --git a/src/main/java/com/kwan/springbootkwan/entity/resp/BusinessInfo.java b/src/main/java/com/kwan/springbootkwan/entity/resp/BusinessInfo.java new file mode 100644 index 0000000..6c6b1cc --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/entity/resp/BusinessInfo.java @@ -0,0 +1,43 @@ +package com.kwan.springbootkwan.entity.resp; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.util.List; + +@Data +public class BusinessInfo { + private String traceId; + private Integer code; + private ArticleData data; + private String message; + + @Data + public static class ArticleData { + + public Object total; + + @JsonProperty("list") + public List
list; + + @Data + public static class Article { + public String formatTime; + public Integer collectCount; + public String description; + public Integer diggCount; + public String type; + public String title; + public Boolean hasOriginal; + public String url; + public Integer commentCount; + public String rtype; + public Long postTime; + public String editUrl; + public Long createTime; + public Integer articleType; + public List picList; + public Integer viewCount; + } + } +} \ No newline at end of file diff --git a/src/main/java/com/kwan/springbootkwan/entity/resp/CommentData.java b/src/main/java/com/kwan/springbootkwan/entity/resp/CommentData.java new file mode 100644 index 0000000..da2905e --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/entity/resp/CommentData.java @@ -0,0 +1,101 @@ +package com.kwan.springbootkwan.entity.resp; + +import lombok.Data; + +import java.util.List; + +@Data +public class CommentData { + public int code; + public String message; + public String traceId; + public DataInfo data; + + @Data + public static class DataInfo { + public int count; + public int pageCount; + public int floorCount; + public int foldCount; + public List list; + } + + @Data + public static class Comment { + public Info info; + public List sub; + public String pointCommentId; + } + + @Data + public static class Info { + public int commentId; + public long articleId; + public int parentId; + public String postTime; + public String content; + public String userName; + public int digg; + public List diggArr; + public boolean loginUserDigg; + public String parentUserName; + public String parentNickName; + public String avatar; + public String nickName; + public String dateFormat; + public int years; + public boolean vip; + public String vipIcon; + public String vipUrl; + public boolean companyBlog; + public String companyBlogIcon; + public boolean flag; + public String flagIcon; + public String levelIcon; + public boolean isTop; + public boolean isBlack; + public String region; + public String orderNo; + public Object redEnvelopeInfo; + public CommentFromTypeResult commentFromTypeResult; + } + @Data + public static class CommentFromTypeResult { + public int index; + public String key; + public String title; + } + @Data + public static class SubComment { + public int commentId; + public long articleId; + public int parentId; + public String postTime; + public String content; + public String userName; + public int digg; + public List diggArr; + public boolean loginUserDigg; + public String parentUserName; + public String parentNickName; + public String avatar; + public String nickName; + public String dateFormat; + public int years; + public boolean vip; + public String vipIcon; + public String vipUrl; + public boolean companyBlog; + public String companyBlogIcon; + public boolean flag; + public String flagIcon; + public String levelIcon; + public boolean isTop; + public boolean isBlack; + public String region; + public String orderNo; + public Object redEnvelopeInfo; + public CommentFromTypeResult commentFromTypeResult; + } +} + diff --git a/src/main/java/com/kwan/springbootkwan/service/CsdnService.java b/src/main/java/com/kwan/springbootkwan/service/CsdnService.java new file mode 100644 index 0000000..edc2eca --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/service/CsdnService.java @@ -0,0 +1,18 @@ +package com.kwan.springbootkwan.service; + + +import com.kwan.springbootkwan.entity.resp.BusinessInfo; + +public interface CsdnService { + /** + * 获取文章信息 + * + * @return + */ + BusinessInfo list(); + + void getArticleInfo(String articleId); + + +} + diff --git a/src/main/java/com/kwan/springbootkwan/service/impl/CsdnServiceImpl.java b/src/main/java/com/kwan/springbootkwan/service/impl/CsdnServiceImpl.java new file mode 100644 index 0000000..c728653 --- /dev/null +++ b/src/main/java/com/kwan/springbootkwan/service/impl/CsdnServiceImpl.java @@ -0,0 +1,73 @@ +package com.kwan.springbootkwan.service.impl; + +import cn.hutool.http.HttpResponse; +import cn.hutool.http.HttpUtil; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.kwan.springbootkwan.entity.resp.BusinessInfo; +import com.kwan.springbootkwan.entity.resp.CommentData; +import com.kwan.springbootkwan.service.CsdnService; +import org.springframework.stereotype.Service; + +@Service +public class CsdnServiceImpl implements CsdnService { + // 构建header参数 + private static final String CUSTOM_HEADER_NAME = "Cookie"; + + private static final String CUSTOM_HEADER_VALUE = "uuid_tt_dd=10_20285116700-1697522872601-604163; c_adb=1; loginbox_strategy=%7B%22taskId%22%3A308%2C%22abCheckTime%22%3A1697522874474%2C%22version%22%3A%22control%22%7D; UserName=qyj19920704; UserInfo=a7d3b88c53a841ebb5792202cb43c84f; UserToken=a7d3b88c53a841ebb5792202cb43c84f; UserNick=%E6%AA%80%E8%B6%8A%E5%89%91%E6%8C%87%E5%A4%A7%E5%8E%82; AU=769; UN=qyj19920704; BT=1697522886100; p_uid=U010000; Hm_up_6bcd52f51e9b3dce32bec4a3997715ac=%7B%22islogin%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isonline%22%3A%7B%22value%22%3A%221%22%2C%22scope%22%3A1%7D%2C%22isvip%22%3A%7B%22value%22%3A%220%22%2C%22scope%22%3A1%7D%2C%22uid_%22%3A%7B%22value%22%3A%22qyj19920704%22%2C%22scope%22%3A1%7D%7D; management_ques=1697592152734; blog_details_recommend_nps=1697616147423; c_segment=3; Hm_lvt_6bcd52f51e9b3dce32bec4a3997715ac=1697522874,1697551027,1697636661,1697683407; csrfToken=jTRD3_1IBVA703lu2FkVkazx; dc_sid=9f7a02ed8375e91d86271ddaf1cf2ce4; c_first_ref=default; c_first_page=https%3A//liucy.blog.csdn.net/article/details/133852303%3Fspm%3D1001.2014.3001.5502; c_segment=3; Hm_lvt_e5ef47b9f471504959267fd614d579cd=1697764951; Hm_lpvt_e5ef47b9f471504959267fd614d579cd=1697764951; 404_page_nps=1697764955523; ssxmod_itna=YqUxBD97kOGHD8D2BmYite44zxcYo1=WOiox0vmvqGzDAxn40iDtgeqODDwu0/DNMQiDpiDuWOntaV73S5fd3iPeaN3D84i7DKqibDCqD1D3qDktzDYA8Dt4DTD34DYDiO=DBRsUQDFATN/3wUjmGtDG4DgDB=DxBEl3djBAq4DCr4DbxPy7mrDtLNSeLLdXT0/nn5Yf445SOG5lipwm0GdG7vwBA4PlDxNt8v1wADoGGGQYf+IE75ep753zpDxD; ssxmod_itna2=YqUxBD97kOGHD8D2BmYite44zxcYo1=WOYxn9EenDDsYebDLGQCoqQuGvHdDQRKYubdD6QqomsRD3xyRI/W9Q5nhe8oeYUvimaWYrNsqwcDgL6mDjYUhZK09LYcY/t5hSuP2va/kclf6hRkNh+LPyDwic73=9i4d94Lvw/R=oQ7E+jT4jjjA2Y+=QplLm8nbePRb+7=Re1CpjmZ4wIrnNPSKofWnIj=WOtkFtphylt+GhUxr0KkGtTzDXKDEEkbn3qhIn3Sj/ezt1u2MO3M9h7zEL6RunrXaKE+YdkRnIKiTG93cqpGFq8Fwr7ehksk1ZSWhoN2hQydddqQ1bTOSW8ddX+7g24v4TZ0+52=Y8PsOwfhavW4ECY8+GZOK=ro97bK0=Yi3YD5ZGsq25FhPodIRGCD2O8xidfo8+NR88v+rq4+b=fUOEK2frPEPdLFuYkao9uCfM1+cFZQ7q6HEMfRLjf6bhof0=1YhEYO1U=NZCPvDDw2Psluciq4De13mDNBODwqLwwg44qwOiDf=j1fKK5q+8gd7DDjKDeMv/04YDmLGvrwqOz4cov79500D4D==; c_first_ref=default; c_first_page=https%3A//mp.csdn.net/; creative_btn_mp=3; c_hasSub=true; write_guide_show=3; log_Id_click=177; dc_session_id=11_1698022100317.787671; c_dsid=11_1698022100317.794351; log_Id_pv=149; log_Id_view=1105; c_pref=https%3A//i.csdn.net/; c_ref=https%3A//blog.csdn.net/imwucx; c_page_id=default; dc_session_id=11_1698022100317.787671; c_dsid=11_1698022100317.794351; log_Id_view=1106; dc_tos=s2yi9b; log_Id_click=178; c_pref=https%3A//blog.csdn.net/imwucx; log_Id_pv=150; creativeSetApiNew=%7B%22toolbarImg%22%3Anull%2C%22publishSuccessImg%22%3Anull%2C%22articleNum%22%3A895%2C%22type%22%3A0%2C%22oldUser%22%3Afalse%2C%22useSeven%22%3Afalse%2C%22userName%22%3A%22qyj19920704%22%7D; c_ref=https%3A//cxian.blog.csdn.net/article/details/131299195; c_page_id=default; Hm_lpvt_6bcd52f51e9b3dce32bec4a3997715ac=1698022433; dc_tos=s2yinc"; + + @Override + public BusinessInfo list() { + String url = "https://blog.csdn.net/community/home-api/v1/get-business-list"; + // 构建参数 + String username = "imwucx"; + // 使用Hutool发送GET请求 + HttpResponse response = HttpUtil.createGet(url) + .header(CUSTOM_HEADER_NAME, CUSTOM_HEADER_VALUE) // 添加自定义header参数 + .form("page", 1) + .form("size", 1) + .form("businessType", "lately") + .form("noMore", false) + .form("username", username) + .execute(); + + // 打印响应结果 + System.out.println("Response Status Code: " + response.getStatus()); + final String body = response.body(); + System.out.println("Response Body: " + body); + ObjectMapper objectMapper = new ObjectMapper(); + BusinessInfo businessInfo = null; + try { + businessInfo = objectMapper.readValue(body, BusinessInfo.class); + System.out.println(); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + return businessInfo; + } + + @Override + public void getArticleInfo(String articleId) { + String url = "https://blog.csdn.net/phoenix/web/v1/comment/list/" + articleId; + // 使用Hutool发送GET请求 + HttpResponse response = HttpUtil.createPost(url) + .header(CUSTOM_HEADER_NAME, CUSTOM_HEADER_VALUE) // 添加自定义header参数 + .form("page", 1) + .form("size", 100) + .form("fold", "unfold") + .execute(); + // 打印响应结果 + System.out.println("Response Status Code: " + response.getStatus()); + final String body = response.body(); + System.out.println("Response Body: " + body); + ObjectMapper objectMapper = new ObjectMapper(); + CommentData articleInfo = null; + try { + articleInfo = objectMapper.readValue(body, CommentData.class); + System.out.println(); + } catch (JsonProcessingException e) { + e.printStackTrace(); + } + System.out.println(articleInfo); + } +} -- GitLab