Java批量查询CSDN质量分

文章目录

  • 前言
  • 代码实现
    • pom.xml
    • 实体类
    • 工具类
    • 质量分查询
  • 效果
  • 开源仓库

前言

在CSDN平台申请“专家博主”、“优质创作者”等称号的时候,往往会对博客的质量分有一定的要求,这时候我们需要审视以往所发表的博客,找出质量分较低的博客,并进行质量优化。单篇博客的质量分查询可以在CSDN博客质量分中查询,查询方式如下:

在这里插入图片描述
但如果作者发布的文章数量较多的话,一篇一篇查询将会是一个非常大的工作量。为了简化这个过程,我使用Java实现了一段代码,可以批量查询自己所发布文章的质量分

代码实现

pom.xml

引入代码需要使用的一些工具

<dependencies><!-- 进行json与Java类的转化 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.32</version></dependency><!-- 简化实体类的编写 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency><!-- 用于导出excel表格 --><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><!-- 用于发送请求 --><dependency><groupId>cn.hutool</groupId><artifactId>hutool-http</artifactId><version>5.8.13</version></dependency>
</dependencies>

实体类

用于存储文章的属性,如标题、url、质量分……

package org.dam.entity;import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;/*** @Author dam* @create 2024/8/5 9:38*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class ArticleEntity {private String url;private String title;private Double score;private String postTime;
}

工具类

用来读写txt文件

package org.dam.util;import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;/*** @Author dam* @create 2024/8/5 10:13*/public class TxtUtil {public static String read(File f, String charset) throws Exception {FileInputStream fstream = new FileInputStream(f);try {int fileSize = (int) f.length();byte[] buffer = new byte[fileSize];fstream.read(buffer);return new String(buffer, charset);} finally {try {fstream.close();} catch (Exception e) {}}}public static void write(File f, String text, String charset) throws Exception {FileOutputStream fstream = new FileOutputStream(f);try {fstream.write(text.getBytes(charset));} finally {fstream.close();}}}

质量分查询

在批量查询文章的质量分之前,需要先获取文章列表相关信息,使用如下链接可以获取文章列表信息
https://blog.csdn.net/community/home-api/v1/get-business-list?page=[页码]&size=100&businessType=blog&username=[CSDN用户名]

  • [CSDN用户名]:需要替换成自己的用户名,例如我的是laodanqiu
    在这里插入图片描述

  • [页码]:分页查询的页面,从1开始

  • size: 最大就是100,可以设置为比100小的数,设置为比100大的数,也只能一次性查出100篇

访问该链接,即可获得查询文章列表的json数据

在这里插入图片描述
有时候访问该接口需要进行安全验证,拖动滑块即可
在这里插入图片描述
将上述json数据存储到项目的article-list.json中供后续读取

在这里插入图片描述

在获取到文章列表信息json之后,即可批量获取文章的质量分,其实就是使用Hutool来调用质量分查询接口,循环查询每篇文章的质量分,然后存储起来,输出到excel表格中

package org.dam.util;import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse;
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.beanutils.BeanUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.dam.entity.ArticleEntity;import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;/*** @Author dam* @create 2024/8/5 9:36*/
public class CsdnScoreUtil {/*** 查询质量分的地址*/private static final String SCORE_URL = "https://bizapi.csdn.net/trends/api/v1/get-article-score";private static final String X_CA_KEY = "203930474";private static final String X_CA_NONCE = "9cf8f777-27fe-4a6b-a968-86c17c6ab787";private static final String X_CA_SIGNATURE = "ruA7Zl7QDFkIbJYd/uP5pfi9PA7ZAPcbZ9htV4wjbos=";private static final String X_CA_SIGNATURE_HEADERS = "x-ca-key,x-ca-nonce";private static final String X_CA_SIGNED_CONTENT_TYPE = "multipart/form-data";/*** 获取所有文章的质量分** @param articleListObject* @return*/public List<ArticleEntity> csdnScoreCheck(JSONObject articleListObject) {JSONObject articleListMes = articleListObject.getJSONObject("data");JSONArray jsonArray = (JSONArray) articleListMes.get("list");List<ArticleEntity> articleEntityList = new ArrayList<>();for (Object o : jsonArray) {JSONObject one = (JSONObject) o;articleEntityList.add(ArticleEntity.builder().url(String.valueOf(one.get("url"))).title(String.valueOf(one.get("title"))).build());}// 调用csdn接口查询所有的博客质量分HttpRequest post = HttpUtil.createPost(SCORE_URL).header("accept", "application/json, text/plain, */*").header("x-ca-key", X_CA_KEY).header("x-ca-nonce", X_CA_NONCE).header("x-ca-signature", X_CA_SIGNATURE).header("x-ca-signature-headers", X_CA_SIGNATURE_HEADERS).header("x-ca-signed-content-type", X_CA_SIGNED_CONTENT_TYPE);for (ArticleEntity articleEntity : articleEntityList) {post.form("url", articleEntity.getUrl());HttpResponse response = post.execute();if (response.isOk()) {JSONObject scoreMes = JSON.parseObject(response.body());ArticleEntity articleEntity2 = JSON.toJavaObject(scoreMes.getJSONObject("data"), ArticleEntity.class);articleEntity.setScore(articleEntity2.getScore());articleEntity.setPostTime(articleEntity2.getPostTime());System.out.println("名称:" + articleEntity.getTitle() + "\t质量分:" + articleEntity.getScore() + "\t发表时间:" + articleEntity.getPostTime());} else {System.err.println(articleEntity.getUrl() + "请求失败: " + response.getStatus());}}return articleEntityList;}/*** 读取json文件,获取文章标题和链接** @throws Exception*/public void getScoreByJson() throws Exception {String read = TxtUtil.read(new File("src/main/java/org/dam/input/article-list.json"), "utf-8");List<ArticleEntity> articleEntityList = csdnScoreCheck(JSON.parseObject(read));save(articleEntityList);}/*** 将检查到的质量信息存储到excel表格中** @param scoreEntities* @throws IOException*/public void save(List<ArticleEntity> scoreEntities) throws IOException {Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet();int rowIndex = 0;Row row = sheet.createRow(rowIndex++);row.createCell(0).setCellValue("文章名称");row.createCell(1).setCellValue("质量分");row.createCell(2).setCellValue("发布时间");// 按照分数升序排序Collections.sort(scoreEntities, ((o1, o2) -> {return Double.compare(o1.getScore(), o2.getScore());}));for (ArticleEntity article : scoreEntities) {row = sheet.createRow(rowIndex++);row.createCell(0).setCellValue(article.getTitle());row.createCell(1).setCellValue(article.getScore());row.createCell(2).setCellValue(article.getPostTime());}System.out.println("开始输出结果");FileOutputStream outputStream = null;SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日HH时mm分ss秒");try {outputStream = new FileOutputStream("src/main/java/org/dam/output/质量列表 " + simpleDateFormat.format(new Date()) + ".xlsx");workbook.write(outputStream);System.out.println("文件输出完成");} catch (FileNotFoundException e) {e.printStackTrace();}}
}

请求头中需要携带一些参数,如果上述代码的参数过期了,可以去网站中发送一个请求来复制相关信息

在这里插入图片描述

效果

在这里插入图片描述
生成的excel文件如下
在这里插入图片描述
我在输出excel文件的时候,默认将文章按照质量分递增排序了,方便我快速找出哪些文章需要优化改进

在这里插入图片描述

开源仓库

CSDN质量分批量查询

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

nordic 蓝牙ble 配对绑定的流程 原理

目录 配对和绑定的基本概念 配对和绑定的流程 1. 配对请求和响应 2. 配对方法选择 3. 密钥生成和交换 4. 配对完成和绑定 配对和绑定的代码实现 初始化Peer Manager 处理Peer Manager事件 处理BLE事件 启动广播 在Nordic芯片上实现蓝牙低功耗(BLE)设备的配对和绑定…

Python 为Excel单元格设置填充\背景色 (纯色、渐变、图案)

在使用Excel进行数据处理和分析时&#xff0c;对特定单元格进行背景颜色填充不仅能够提升工作表的视觉吸引力&#xff0c;还能帮助用户快速识别和区分不同类别的数据&#xff0c;增强数据的可读性和理解性。 本文将通过以下三个示例详细介绍如何使用Python在Excel中设置不同的单…

sql注入——sqlilabs1-15

目录 sql注入靶场练习--sqlilabs 1.less-1​编辑 1.测试发现单引号为逃逸符号 2.确定查询列数为三列 3.查询到数据库名 4.查询数据库中的表名 5.查询用户表的列名字 6.查询用户信息 2.less-2​编辑 2.确定查询列数为三列 3.查询到数据库名 4.查询数据库中的表名 5.…

机械学习—零基础学习日志(高数23——无穷小运算)

零基础为了学人工智能&#xff0c;真的开始复习高数 这段时间&#xff0c;把张宇老师讲解考研的第一部分基本全部学习完毕了。 这里把第一部分的内容最后汇总一下。 无穷小运算——吸收律 这里展示一些无穷小的具体计算思路 无穷小运算——计算方法 泰勒展开的原则 夹逼准则…

SQL报错注入之floor

目录 1.简述 2.关键函数说明 1.rand函数 2.floor&#xff08;rand&#xff08;0&#xff09;*2&#xff09;函数 3.group by 函数 4.count&#xff08;*&#xff09;函数 3.报错分析 4.报错流程 4.1寻找注入点 4.2爆数据库名 4.3爆表名 4.4爆字段名 4.5查询数据 1.…

PySide入门实战之五 | 信号与槽函数之鼠标、键盘等事件

&#x1f680;&#x1f680;&#x1f680; Pyside6实战教程专栏目录入口&#xff1a;点击跳转 目录 一、前期准备二、鼠标触发事件鼠标拖动窗口 一、前期准备 我们采用Pyside入门实战之四中通过QTDesigner创建的界面&#xff0c;具体由两个Label和一个Button组件构成&#xff…

【c++】基础知识——快速入门c++

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C 目录 前言 一、手搓一个Hello World 二、命名空间namespace 1.命名空间的定义 2.命名空间的使用 3.命名空间补充知识 三、c中的输入和输出 四、缺省参…

图书馆座位再利用小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;座位信息管理&#xff0c;座位预订管理&#xff0c;互勉信息管理&#xff0c;意见反馈管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;我的 开发…

Unity补完计划 之Tilemap

本文仅作笔记学习和分享&#xff0c;不用做任何商业用途 本文包括但不限于unity官方手册&#xff0c;unity唐老狮等教程知识&#xff0c;如有不足还请斧正 1.Tilemap 是什么 Q&#xff1a;和 SpriteShape有什么区别&#xff1f; A&#xff1a;tilemap强项在于做重的复背景&…

VsCode无法远程调试

一、问题描述 按照《VsCode gdb gdbserver远程调试C程序》中介绍的方法&#xff0c;配置好VsCode后&#xff0c;按下F5快捷键&#xff0c;或点击“Start Debugging”按钮&#xff0c;没有反应&#xff0c;无法启动调试&#xff1a; 二、解决方法 针对该问题&#xff0c;我尝…

常用设计模式总结

代码的评判角度 常见的评判代码好坏的词汇&#xff1a; 灵活性&#xff08;flexibility&#xff09;、可扩展性&#xff08;extensibility&#xff09;、可维护性&#xff08;maintainability&#xff09;、可 读性&#xff08;readability&#xff09;、可理解性&#xff08;…

电子元器件—三极管(一篇文章搞懂电路中的三极管)(笔记)(面试考试必备知识点)

三极管的定义及工作原理 1. 定义 三极管&#xff08;Transistor&#xff09;是一种具有三层半导体材料&#xff08;P-N-P 或 N-P-N&#xff09;构成的半导体器件&#xff0c;用于信号放大、开关控制和信号调制等应用。三极管有三个引脚&#xff1a;发射极&#xff08;Emitter…

Javascript——NaN有什么用法

简介 在 JavaScript 中&#xff0c;NaN&#xff08;Not a Number&#xff09;是一个特殊的值&#xff0c;用来表示非数字的结果&#xff0c;例如一个不合法的数学运算的结果。根据 IEEE 754 浮点数标准&#xff0c;NaN 不等于任何值&#xff0c;包括它自己。这意味着 NaN 是唯…

JAVA毕业设计158—基于Java+Springboot的二手车交易管理系统(源代码+数据库+万字论文+ppt)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的二手车交易管理系统(源代码数据库万字论文ppt)158 一、系统介绍 本项目前后端不分离(可以改为ssm版本)&#xff0c;分为用户、管理员两种角色 1、用户&#…

Golang | Leetcode Golang题解之第326题3的幂

题目&#xff1a; 题解&#xff1a; func isPowerOfThree(n int) bool {return n > 0 && 1162261467%n 0 }

AXS4054:单节锂电池充电管理芯片特性与应用推荐

AXS4054是一款单节锂离子电池恒流/恒压线性充电器&#xff0c;芯片集成功率晶体管&#xff0c;充电电流可以用外部电阻设定&#xff0c;蕞大持续充电电流可达600mA,非常适合便携式设备应用&#xff0c;适合USB电源和适配器电源工作&#xff0c;内部采用防倒充电路&#xff0c;不…

鸿蒙AI功能开发【拍照识别文字】

拍照识别文字 介绍 本示例通过使用ohos.multimedia.camera (相机管理)和textRecognition&#xff08;文字识别&#xff09;接口来实现识别提取照片内文字的功能。 效果预览 使用说明 1.点击界面下方圆形文字识别图标&#xff0c;弹出文字识别结果信息界面&#xff0c;显示当…

搜狗爬虫(www.sogou.com)IP及UA,真实采集数据

一、数据来源&#xff1a; 1、这批搜狗爬虫&#xff08;www.sogou.com&#xff09;IP来源于尚贤达猎头网站采集数据&#xff1b; ​ 2、数据采集时间段&#xff1a;2023年10月-2024年7月&#xff1b; 3、判断标准&#xff1a;主要根据用户代理是否包含“www.sogou.com”和IP核实…

Gazebo之MyRobot建立

Gazebo之MyRobot建立 1. 源由2. 示例Step 1: 新建一个简单世界Step 2: 新建一个模型(model)Step 3: 机器人组成链接(Links)Step 3.1: 新增底盘(Links/Chassis)Step 3.1.1: 惯性属性(Inertial properties)Step 3.1.2: 视觉(Visual)Step 3.1.3: 碰撞(Collision) Step 3.2: 新增左…

C语言 操作符详解

目录 一、操作符的分类 二、二进制和进制转换 2.1 二进制转十进制 2.2 二进制转八进制 2.3 二进制转十六进制 三、原码、反码、补码 四、移位操作符 4.1 左移操作符 ​编辑 4.2 右移操作符 五、位操作符 按位与&#xff1a;& 按位或&#xff1a;| 按位异或&#x…