CsdnCommentServiceImpl.java 4.3 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
package com.kwan.springbootkwan.service.impl;

import cn.hutool.core.collection.CollectionUtil;
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.BusinessInfoResponse;
import com.kwan.springbootkwan.entity.resp.CommentListResponse;
import com.kwan.springbootkwan.entity.resp.CommentResponse;
import com.kwan.springbootkwan.service.CsdnCommentService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

import java.util.List;

@Slf4j
@Service
public class CsdnCommentServiceImpl implements CsdnCommentService {

    @Value("${csdn.cookie}")
    private String csdnCookie;
    @Value("${csdn.self_user_name}")
    private String selfUserName;
    @Value("${csdn.url.is_comment_list_url}")
    private String commentListUrl;
    @Value("${csdn.url.comment_url}")
    private String commentUrl;
    /**
32
     * 评论满了
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
     */
    private static boolean COMMENT_IS_FULL = false;

    @Override
    public Boolean isComment(BusinessInfoResponse.ArticleData.Article article) {
        if (COMMENT_IS_FULL) {
            return true;
        }
        final String urlInfo = article.getUrl();
        String articleId = urlInfo.substring(urlInfo.lastIndexOf("/") + 1);
        String url = commentListUrl + articleId;
        // 使用Hutool发送GET请求
        HttpResponse response = HttpUtil.createPost(url)
                .header("Cookie", csdnCookie)
                .form("page", 1)
                .form("size", 50)
                .form("fold", "unfold")
                .execute();
        // 打印响应结果
        final String body = response.body();
        ObjectMapper objectMapper = new ObjectMapper();
        CommentListResponse articleInfo;
        try {
            articleInfo = objectMapper.readValue(body, CommentListResponse.class);
            final CommentListResponse.DataInfo data = articleInfo.getData();
            final List<CommentListResponse.Comment> list = data.getList();
            if (CollectionUtil.isNotEmpty(list)) {
                for (CommentListResponse.Comment comment : list) {
                    final CommentListResponse.Info info = comment.getInfo();
                    final String userName = info.getUserName();
                    if (StringUtils.equals(userName, selfUserName)) {
                        //评论过
65
                        log.info("文章{}已经评论过", articleId);
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
                        return true;
                    }
                }
            }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return false;
    }

    @Override
    public Boolean comment(String articleId) {
        if (COMMENT_IS_FULL) {
            return true;
        }
        //评论
        CommentResponse comment = this.dealComment(articleId);
        final int code = comment.code;
        final String message = comment.getMessage();
        if (code == 200) {
86
            log.info("文章{}评论成功", articleId);
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
        } else if (code == 400 && StringUtils.equals(message, "您已达到当日发送上限,请明天尝试!")) {
            log.info(message);
            COMMENT_IS_FULL = true;
        } else {
            log.info("您评论太快了,请休息一下!");
        }
        return true;
    }

    /**
     * 评论文章
     *
     * @param articleId
     * @return
     */
    private CommentResponse dealComment(String articleId) {
        HttpResponse response = HttpUtil.createPost(commentUrl)
                .header("Cookie", csdnCookie)
                .form("articleId", articleId)
                .form("content", "支持博主优质文章,讲解得非常详细,干货满满,通俗易懂,期待博主下次更新")
                .execute();
        final String body = response.body();
109
        log.info(body);
110 111 112 113 114 115 116 117 118 119
        ObjectMapper objectMapper = new ObjectMapper();
        CommentResponse commentResponse = null;
        try {
            commentResponse = objectMapper.readValue(body, CommentResponse.class);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        return commentResponse;
    }
}