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

news2025/2/28 12:51:20

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

  • 一:故事背景
  • 二:具体实现
    • 2.1 csdn 接口分析
    • 2.2 apiPost调用接口
    • 2.2 RestTemplate进行接口调用
      • 2.2.1 需要引入的Maven依赖
      • 2.2.2 调用
      • 2.2.2 两个接口
      • 2.2.3 导出Excel到自己的电脑
      • 2.2.4 效果
  • 三:总结提升

一:故事背景

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

二:具体实现

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表的机会。
大家可以通过这篇文章,批量查询自己的博质量,帮助我们修改我们原有博客的平均质量。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/520308.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

POWERLINK协议源码(最新)在stm32单片机上的移植指南

最近着了powerlink的道&#xff0c;连续几晚十二点前没睡过觉。不得不说兴趣这东西劲太大了&#xff0c;让人睡不着。喜欢上研究POWERLINK&#xff0c;最新版的源码结构挺清晰的&#xff0c;移植并测试了嵌入式linux作为从站和电脑主站之间的通信&#xff0c;挺有趣的。接下来想…

idea注释配置

走过路过不要错过&#xff01; 如果你也想要这样的注释模板&#xff0c;前接着往下看&#xff01; 注释模板有两种方式 1、新建类的时候自动添加注释 按照上图中的提示&#xff0c;找到settings中的File Code Templates选择右边Files选项卡中&#xff0c;选择class在右侧输入…

python中最全面的统计分布工具

文章目录 正态分布属性和方法测试 正态分布 scipy为诸多统计分布函数设计了类&#xff0c;这些类封装了几乎相同的方法&#xff0c;下面先以正态分布为示例&#xff0c;预览一下强大的统计功能。 import numpy as np from scipy.stats import norm import matplotlib.pyplot …

K_A38_001 基于STM32等单片机驱动DS1302时钟模块 OLED0.96显示

K_A38_001 基于STM32等单片机驱动DS1302时钟模块 OLED0.96显示 所有资源导航一、资源说明二、基本参数参数引脚说明 三、驱动说明时序对应程序: 四、部分代码说明1、接线引脚定义1.1、STC89C52RCDS1302时钟模块1.2、STM32F103C8T6DS1302时钟模块 五、基础知识学习与相关资料下载…

Python入门(六)if语句(一)

if语句&#xff08;一&#xff09; 1.概述2.一个简单的实例3. 条件测试3.1 检查是否相等3.2 数值比较3.3 检查多个条件3.4 布尔表达式 作者&#xff1a;xiou 1.概述 编程时经常需要检查一系列条件&#xff0c;并据此决定采取什么措施。在Python中&#xff0c;if语句让你能够检…

三分钟阿里云服务器u1通用算力型性能、使用限制及费用说明

阿里云服务器u1是通用算力型云服务器&#xff0c;CPU采用2.5 GHz主频的Intel(R) Xeon(R) Platinum处理器&#xff0c;通用算力型u1云服务器不适用于游戏和高频交易等需要极致性能的应用场景及对业务性能一致性有强诉求的应用场景(比如业务HA场景主备机需要性能一致)&#xff0c…

ChatGPT 快速阅读论文:3 个步骤让你轻松阅读论文文档

ChatGPT 快速阅读论文:3 个步骤让你轻松阅读论文文档 一、引言二、什么是 ChatDOC三、如何使用 ChatDOC3.1 主要功能3.2 表格/文本分析3.3 人工智能对话最后附使用地址:本教程收集于:AIGC从入门到精通教程 一、引言 你是否曾经因为阅读论文而感到困难和无从下手?ChatDOC 是…

分布式 05.redis在springboot中的使用和两个注解@Configuration和@Bean

01.在服务器中配置好redis服务器后&#xff0c;在sts中使用redis插件。 02.先是导入jar包&#xff1a; <!--spring整合redis --> <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</artifactId> </dependency> &l…

MySQL--复合查询--内外链接--0422

注&#xff1a;为了方便查看 mysql语句会有突然的换行&#xff0c;书写时请勿模仿。 目录 1.单表查询回顾 显示工资最高的员工的名字和工作岗位 显示工资高于平均工资的员工信息 2.多表查询 比如需要查询雇员名字和所在部门编号及部门名字。 显示部门号为10的部门名&…

win10+使用cmake编译最新的ceres-solver库

参考文献 点击这里访问 感谢大佬&#xff01; 说明 我这个只编译了release版本&#xff0c;如果还需要debug版本&#xff0c;cmake编译和vs编译都需要另外设置一些东西&#xff0c;我没有弄。 文章目录 参考文献说明1. 需要使用的库2. 需要的工具3. 准备工作3.1 建一个文件…

Neovim-配置教程

环境&#xff1a;Ubuntu 20.04 宿主机&#xff1a;windows &#xff08;windows terminal&#xff09;WSL2 NVIM&#xff1a;v0.10.0-dev 配置Neovim 需要保证流畅的github环境&#xff08;以便于快速拉取插件&#xff09;&#xff0c;可以使用代理或是配置Github SSH key 本文…

【OpenCV-Python】——Haar人脸检测深度学习人脸检测EigenFaces/FisherFaces/LBPH人脸识别

目录 前言&#xff1a; 1、人脸检测 1.1 基于Haar的人脸检测 1.2 基于深度学习的人脸检测 2、人脸识别 2.1 EigenFaces人脸识别 2.2 FisherFaces人脸识别 2.3 LBPH人脸识别 总结&#xff1a; 前言&#xff1a; 人脸检测是人脸定位的过程&#xff1b;人脸识别是在人脸…

macOS 下载汇总(系统、应用和教程) 2023 持续更新中

macOS Ventura 13, macOS Monterey 12, macOS Big Sur 11, macOS Catalina 10.15, macOS Mojave 10.14, macOS High Sierra 10.13, macOS Sierra 10.12 请访问原文链接&#xff1a;https://sysin.org/blog/macOS/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。…

VMware Aria Suite 8.12 - 云管理解决方案 (下载索引)

VMware Aria Suite 8.12 - 云管理解决方案 (下载索引) 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-aria-suite/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org 云管理套包 VMware Aria Suite&#xff08;以前…

网络基础知识(2)——简单说说IP地址

Internet 依靠 TCP/IP 协议&#xff0c;在全球范围内实现不同硬件结构、不同操作系统、不同网络系统的主机之间的互联。在 Internet 上&#xff0c;每一个节点都依靠唯一的 IP 地址相互区分和相互联系&#xff0c;IP 地址用于标识互联网中的每台主机的身份&#xff0c;设计人员…

Windows 20个经典cmd命令,值得收藏

本文重点介绍Windows系统常用工具和服务的快捷启动命令。相比鼠标多次点击打开窗口&#xff0c;输入命令回车一键打开更为快捷高效。喜欢请点赞收藏&#xff0c;关注我获取最新原创分享~ 一、Windows启动命令使用方式 快捷键 【徽标R】打开命令窗口 输入命令&#xff0c;点击【…

ARM 栈帧(一)

ARM 栈帧 本系列均以 corter-A7(armv7-a) 为例 在 ARM 中&#xff0c;通常为满减栈&#xff08;Full Descending FD&#xff09;, 也就是说&#xff0c;堆栈指针指向堆栈内存中最后一个填充的位置&#xff0c;并且随着每个新数据项被压入堆栈而递减。 栈的本质 要理解栈的本…

基于NXP+FPGA的大容量固态存储板实现方案

1 概述 近年来 &#xff0c;大容量数据存储设备受到软硬件等发展的限制主 要还是采用机械硬盘叠加组合而用。机械硬盘以磁盘片作为载 体 &#xff0c;采用机械马达 &#xff0c;存在抗振性能低、低温性能差、噪声大等缺点。 固态硬盘是以半导体作为存储介质及控制载体 &…

使用马哈鱼SQLFLow 1 分钟获取复杂 SQL 语句的血缘关系

数据血缘关系在企业的数据治理中是非常重要的一个环节&#xff0c;关于数据血缘在企业数据治理中的重要作用&#xff0c;可以参考这篇文章。SQL 语言在数据处理中被广泛使用&#xff0c;SQL 语句中包含了丰富的数据血缘关系&#xff0c;关于什么是 SQL 中的数据血缘&#xff0c…

死锁与活锁

1 死锁概述 死锁主要是由于资源使用不当引发的。OS中存在很多不同类型的软硬件资源&#xff0c;而可以引发死锁的资源 主要是需要互斥访问的、不可被抢占的资源&#xff0c;即临界资源。下面先来简单了解下资源的分类。 资源分类 按照资源是否可重复使用划分&#xff0c;可以分…