如何批量查询自己的CSDN博客质量分

简介: 如何批量查询自己的CSDN博客质量分

批量查询自己的CSDN博客质量分

git地址: csdn质量分

一:故事背景

最近在申请博客专家。之前没有注重过博客质量分,申请的时候由于博客质量分较低,惨遭拒接。于是下定决定,一边产出高质量博客的同时一边改进之前的博客。提升自己的博客质量分。


二:具体实现

2.1 csdn 接口分析

想要实现批量查询自己csdn的质量分,主要涉及到2个接口。第一个肯定是我们的查询质量分的接口。另一个我们要拿到自己博客的所有url地址才能进行对应的信息查询。让我们来找一下这两个接口。


CSDN查询质量分接口

我们直接打开CSDN查询博客质量分的地址,输入自己的某篇博客地址,点击确定,触发查询博客质量分的接口,打开控制台找一找。发现第一个接口就是我需要的,因为我只想输入一个csdn博客的url地址,获取对应的博客质量分。


获取自己所有信息接口

分析到上面,我们需要的结果已经找到了,那么下一步就是需要去找到自己博客的url地址了。找之前,我们可以想一下方向,什么地方可能有自己所有博客的url地址。自己的所有博客地址,自己的主页上是不是可能返回这些信息。我们找一下对应接口

通过主页的接口返回值,我们找到了这个接口,接口的地址是:

https://blog.csdn.net/community/home-api/v1/get-business-list?page=1&size=20&businessType=blog&orderby=&noMore=false&year=&month=&username=hlzdbk

这个接口是一个分页查询,我测试了一下,每次最多只能返回一百条。我们可以根据自己的博客数量,修改page和size的大小。分页查询自己的博客地址。当然username别忘了改成你自己的。

2.2 apiPost调用接口

我们想要通过代码批量调用csdn的接口,就要先确保在APIPost调用通。当然postMan也可以。在这些工具上调用通说明接口是没问题的,是支持我们调用的,有这样的依据才能写代码。


这里自己去看对应的接口的请求头,请求头里都放了什么东西,并且尝试哪些是必须的,哪些不是必须的,不断尝试,指导对应接口调通为止。

例如以获取所有博客为例
到这里,整个过程我们就分析完了,剩下的就是如何通过代码实现此功能。


2.2 RestTemplate进行接口调用

我这里使用的是spring的RestTemplate进行的接口调用,因为之前做个这方面的研究,正好有个自己测试的小项目,不用在新建项目,直接进行开发就ok了。这里把代码给到大家。


2.2.1 需要引入的Maven依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.3.12.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.example</groupId>
  <artifactId>RestTemplate</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>RestTemplate</name>
  <description>RestTemplate</description>
  <properties>
    <java.version>1.8</java.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.2.73</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi</artifactId>
      <version>4.1.2</version>
    </dependency>
    <dependency>
      <groupId>org.apache.poi</groupId>
      <artifactId>poi-ooxml</artifactId>
      <version>4.1.2</version>
    </dependency>
    <dependency>
      <groupId>commons-beanutils</groupId>
      <artifactId>commons-beanutils</artifactId>
      <version>1.9.4</version>
    </dependency>
  </dependencies>
</project>

这里主要引入了springboot的依赖,还有分析json的依赖,和导出Excel需要的依赖。

我这里就给出主要核心实现的代码,至于从controller一路到service的代码,就不在这里贴了。

2.2.2 调用

public String csdn(UserModel2 userModel2){
        Integer blogNum = userModel2.getBlogNum();
        Integer pageNum = 100;
        Integer page = blogNum/pageNum + 1 ;
        List<ScoreModel> modelList = new ArrayList<>();
        for (int i = 1; i <= page; i++) {
            List<ScoreModel> scoreModels = csdnCheck(String.valueOf(i), userModel2.getUserId());
            modelList.addAll(scoreModels);
        }
        save(modelList, userModel2.getUserId());
        return "success";
    }

这里的userModel2放了两个属性,一个是csdn用户id,一个是其博客总数量

2.2.2 两个接口

    public List<ScoreModel>  csdnCheck(String page,String userId){
        //首先查询所有的文章
        String url = "https://blog.csdn.net/community/home-api/v1/get-business-list?page="+page+"&size=500&businessType=blog&orderby=&noMore=false&year=&month=&username="+userId;
        System.out.println(url);
        JSONObject forObject = restTemplate.getForObject(url, JSONObject.class);
        LinkedHashMap data = (LinkedHashMap)forObject.get("data");
        ArrayList list = (ArrayList)data.get("list");
        List<String> urlList = new ArrayList<>();
        for (Object o : list) {
            LinkedHashMap one = (LinkedHashMap) o;
            urlList.add(String.valueOf(one.get("url")));
        }
//
//        //循环调用csdn接口查询所有的博客质量分
        String urlScore = "https://bizapi.csdn.net/trends/api/v1/get-article-score";
//
        //请求头
        HttpHeaders headers = new HttpHeaders();
        headers.set("accept","application/json, text/plain, */*");
        headers.set("x-ca-key","203930474");
        headers.set("x-ca-nonce","22cd11a0-760a-45c1-8089-14e53123a852");
        headers.set("x-ca-signature","RaEczPkQ22Ep/k9/AI737gCtn8qX67CV/uGdhQiPIdQ=");
        headers.set("x-ca-signature-headers","x-ca-key,x-ca-nonce");
        headers.set("x-ca-signed-content-type","multipart/form-data");
        headers.setContentType(MediaType.MULTIPART_FORM_DATA);
        //调用接口获取数据
        List<ScoreModel> scoreModels = new ArrayList<>();
        for (String bkUrl : urlList) {
            MultiValueMap<String,String> requestBody = new LinkedMultiValueMap<>();
            requestBody.put("url", Collections.singletonList(bkUrl));
            HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(requestBody, headers);
            URI uri = URI.create(urlScore);
            ResponseEntity<String> responseEntity = restTemplate.postForEntity(uri, requestEntity, String.class);
            JSONObject data1 = JSON.parseObject(responseEntity.getBody(),JSONObject.class) ;
            ScoreModel scoreModel = JSONObject.parseObject(data1.get("data").toString(),ScoreModel.class);
            scoreModels.add(scoreModel);
            System.out.println("名称:  "+scoreModel.getTitle() +"分数:   " + scoreModel.getScore() +"时间:  " + scoreModel.getPost_time());
        }
        return scoreModels;
    }

这里自己定义了一个model,这个model是我想要查询到的数据项,分别是 成绩,名称,发布时间。剩下的就是通过RestTemplate发送对应的接口请求,先查到所有的url地址,然后通过url地址查询到所有的分数,将其数据放到我创建的model,组装成一个list返回。


2.2.3 导出Excel到自己的电脑

public void save(List<ScoreModel> scoreModels ,String userId){
        //创建Excel工作簿对象
        Workbook workbook = new XSSFWorkbook();
        String sheetName = "Sheet1";
        workbook.createSheet(sheetName);
        // 将数据写入工作表中
        int rowIndex = 0;
        Row row = workbook.getSheet(sheetName).createRow(rowIndex++);
        Cell cell1 = row.createCell(0);
        cell1.setCellValue("名称");
        Cell cell2 = row.createCell(1);
        cell2.setCellValue("成绩");
        Cell cell3 = row.createCell(2);
        cell3.setCellValue("时间");
        for (ScoreModel person : scoreModels) {
            row = workbook.getSheet(sheetName).createRow(rowIndex++);
            try {
                BeanUtils.setProperty(person, "title", person.getTitle());
                BeanUtils.setProperty(person, "score", person.getScore());
                BeanUtils.setProperty(person, "post_time", person.getPost_time());
                row.createCell(0).setCellValue(person.getTitle());
                row.createCell(1).setCellValue(person.getScore());
                row.createCell(2).setCellValue(person.getPost_time());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        // 保存 Excel 文件到本地磁盘
        try (FileOutputStream outputStream = new FileOutputStream("D:\\DeskTop\\"+userId+".xlsx")) {
            workbook.write(outputStream);
        } catch (IOException e) {
            e.printStackTrace();
        }

这里创建一个Excel工作簿对象,将对应的数据保存到Excel内,如果大家想要用的话,不要忘记修改本地导出的路径,我这里是直接导出到了桌面上

2.2.4 效果

三:总结提升

不将就是发现的原动力。将自己的url地址一个一个的CV到CSDN给的查询博客质量分的界面上也可以查询自己的博客质量分。如果我选择了将就,那我就不会研究如何去通过代码实现批量查询自己的博客质量分的功能,也就少去了一个学习的机会,学习RestTemplate怎么使用,怎么导出Excel表的机会。

大家可以通过这篇文章,批量查询自己的博质量,帮助我们修改我们原有博客的平均质量。


目录
相关文章
|
1月前
|
存储 机器学习/深度学习 数据可视化
数据集中存在大量的重复值,会对后续的数据分析和处理产生什么影响?
数据集中存在大量重复值可能会对后续的数据分析和处理产生多方面的负面影响
107 56
|
1月前
|
Linux 开发工具 数据安全/隐私保护
codigger体验过程记录
【11月更文挑战第2天】codigger的体验过程
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
文本,好看的设计------我独自升级,六芒星技能表,可以用来判断是否在能力值之内的事情,使用六芒星可以显示能力之内,能力之外的事情,用以判断
分页最好的作用是做好统计,可以用来基本条件列表的统计,可以用来统计多平台,使之呈现列表,预算统计,以及必要的技术,项目名称,常用链接
分页最好的作用是做好统计,可以用来基本条件列表的统计,可以用来统计多平台,使之呈现列表,预算统计,以及必要的技术,项目名称,常用链接
|
7月前
|
机器学习/深度学习 缓存 文字识别
印刷文字识别产品使用合集之标注阶段设定了两个独立的字段,但在返回的信息中却合并成了一个字段如何解决
印刷文字识别(Optical Character Recognition, OCR)技术能够将图片、扫描文档或 PDF 中的印刷文字转化为可编辑和可搜索的数据。这项技术广泛应用于多个领域,以提高工作效率、促进信息数字化。以下是一些印刷文字识别产品使用的典型场景合集。
|
7月前
|
数据采集 SQL 监控
分析重复数据通常涉及以下步骤,以确保对重复项的来源和性质有深入理解
【4月更文挑战第2天】分析重复数据通常涉及以下步骤,以确保对重复项的来源和性质有深入理解
78 1
|
7月前
|
人工智能
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
AI批量写文章伪原创:基于ChatGPT长文本模型,实现批量改写文章、批量回答问题(长期更新)
240 1
|
7月前
|
数据可视化 API uml
【有奖调研】开发文档功能升级:接口分组更清晰;增加参数中文名
【有奖调研】开发文档功能升级:接口分组更清晰;增加参数中文名
63 0
|
7月前
|
人工智能 算法 测试技术
【简历优化平台-03】轻字段信息的合理性及单独算法
【简历优化平台-03】轻字段信息的合理性及单独算法
|
7月前
|
监控 项目管理
第八章项目进度管理(选择4分,案例12分)
第八章项目进度管理(选择4分,案例12分)
154 0
下一篇
DataWorks