批量获取CSDN文章对文章质量分进行检测,有助于优化文章质量

📚目录

    • ⚙️简介
    • ✨分析获取步骤
    • ⛳获取文章列表
      • ☘️前期准备
      • ✨ 接口解析
        • ⚡️ 获取文章的接口
    • ☄️文章质量分接口
      • ⭐接口分析
    • ⌛代码实现:
      • ⚓核心代码:
      • ⛵测试用例:
      • ⛴ 运行效果:
      • ☘️增加Excel导出
    • ✍️结束

⚙️简介

      有时候我们写文章是为了记录当下遇到的bug进行简单记录,这样CSDN会对文章进行算法评估文章的质量,这样就会导致我们写的文章字数较少,被系统误判,当然字数只是算法的一方面,算法会多多个角度进行评估,但是我觉得字数占比巨大,如果文章的字数啥的较少,对于我们人来说可能是比较好的,我可以清晰明了知道这篇文章大致讲了什么,我当前遇到的问题是不是可以在这里面得到我需要的。这一类文章不出意外系统评级的分数应该不会特别高,文字少了排版,配图,段落结构、正文长度都会受到影响。
      所以我想看看我之前写的文章质量分到底怎么样,看看是不是有一些简单明了几行代码,几句话就可以说的清楚的事情需要我长篇大论的写才能得到高分?但是官网的查质量分需要一篇一篇的查询效率极低,好歹这些年大大小小的文章也写了百来篇,用手那岂不是点出火星子都出来。

在这里插入图片描述

✨分析获取步骤

  1. 获取博主的所有文章,并且拿到对应的url地址。(需要分析接口)
  2. 获取到url地址,我们需要使用官方查询质量分网页的接口进行请求。(需要分析接口)
  3. 接口分析完成后,我们就可以按照我们的需求进行代码编写了。

⛳获取文章列表

☘️前期准备

      浏览器访问需要获取文章的博主首页地址,并且打开开发者工具快捷键F12,点击网络选项,我们在刷新页面可以看到发送的请求地址。

在这里插入图片描述

      然后我们选择XHR过滤掉我们不需要看到请求,但是这里面也没有我们需要的请求,但是没关系,我们只要想一下什么情况下会发送请求获取文章呢?答案就是下滑底部后,会重新发送请求获取新的文章并且渲染到页面。

在这里插入图片描述

点击删除请求这样我们下拉就可以清晰看到请求的接口数据

在这里插入图片描述

发现就是该接口发送的请求获取文章数据

在这里插入图片描述

在这里插入图片描述

✨ 接口解析

      使用工具请求接口按照浏览器发送的参数进行模拟,看看能拿到啥数据。可以看出这个接口返回的total是null他没给我们总的博客数量,但是没关系我们有的是办法拿到所有文章总数。前面说的主页面刷新有个接口可以得到博客的总条数,我在这简单给你们看一下这个接口。反正没有中条数也不影响我们爬取数据。

该接口可以得到博客总数
https://blog.csdn.net/community/home-api/v1/get-tab-total?username=qq_45502336

在这里插入图片描述

⚡️ 获取文章的接口

我们主要还是研究获取文章的接口
https://blog.csdn.net/community/home-api/v1/get-business-list

这个接口也比较简单只需要携带4个参数:

  • 页码:page 第几页
  • 页数:size 页码展示的条数
  • 用户名称:username 需要查询的博主名
  • 业务类型:businessType 默认使用 blog 这个类型对应
    在这里插入图片描述

模拟请求获取数据

在这里插入图片描述

前面由于选项卡是在最近所以导致返回的条数是null,这一次我们把选项卡选择到文章该接口就又返回了条数。

在这里插入图片描述

分析响应体:

在这里插入图片描述
响应体分析:

  • 文章标题:title
  • 文章查看地址:url
  • 文章描述:description
  • 查看文章的数量:viewCount
  • 收藏数:collectCount
  • 编辑地址:editUrl
  • 等数据

我们本次目的已经达到,这些数据都可以通过这个接口获取到,我们就可以分析查询质量分的接口了。

☄️文章质量分接口

###*‍❄前期准备

浏览器访问官方质量分页面https://www.csdn.net/qc

在这里插入图片描述
步骤后上面一致,主要的是找到对应的接口就行,这里就不过多解释了。

在这里插入图片描述

⭐接口分析

质量分接口
https://bizapi.csdn.net/trends/api/v1/get-article-score
该请求是POST请求

在这里插入图片描述
请求参数分析:

  • 文章地址:url

需要注意的是请求体的类型是form-data类型

在这里插入图片描述
请求头分析(重点)
X-Ca-Key:使用自己浏览器的
X-Ca-Nonce:使用自己浏览器的
X-Ca-Signature:使用自己浏览器的
X-Ca-Signature-Headers:x-ca-key,x-ca-nonce
X-Ca-Signed-Content-Type:multipart/form-data
Accept :application/json, text/plain, */*

响应体分析:

  • score:文章的分数
  • message:给出的建议

在这里插入图片描述

⌛代码实现:

⚓核心代码:

@Service
public class CsdnScoreServiceImpl implements CsdnScoreService {private final String getArticleUrl = "https://blog.csdn.net/community/home-api/v1/get-business-list";private final String getArticlesScoreUrl = "https://bizapi.csdn.net/trends/api/v1/get-article-score";@Overridepublic List<ArticleDetails> getAllTheArticles(String username, String businessType) {List<ArticleDetails> articleDetails = new ArrayList<>();Map<String, Object> param = new HashMap<>(4);param.put("size", 20);param.put("businessType", businessType);param.put("username", username);int index = 0;while (true) {index++;param.put("page", index);String msg = HttpUtil.get(getArticleUrl, param);if (ObjectUtil.isEmpty(msg)) {break;}JSONObject data = JSONUtil.parseObj(msg);ArticleResponse articleResponse = JSONUtil.toBean(data, ArticleResponse.class);if (ObjectUtil.isNotEmpty(articleResponse)&& ObjectUtil.isNotEmpty(articleResponse.getData())&& ObjectUtil.isNotEmpty(articleResponse.getData().getList())) {articleDetails.addAll(articleResponse.getData().getList());} else {break;}}return articleDetails;}@Overridepublic Score getArticlesScore(String url) {Map<String, String> headers = new HashMap<>(6);headers.put("X-Ca-Key", "203930474");headers.put("X-Ca-Signature", "+fkC/Z91B8FRai2qZutPI0OyQCX7IsfVFcS7rPZk+YM=");headers.put("X-Ca-Nonce", "86970a2f-f385-4427-a40b-c90cb17c00b9");headers.put("X-Ca-Signature-Headers", "x-ca-key,x-ca-nonce");headers.put("X-Ca-Signed-Content-Type", "multipart/form-data");headers.put("Accept", "application/json, text/plain, */*");String body = HttpUtil.createPost(getArticlesScoreUrl).headerMap(headers, true).body("url=" + url).execute().body();if (ObjectUtil.isNotEmpty(body)){ScoreResponse scoreResponse = JSONUtil.toBean(body, ScoreResponse.class);if (ObjectUtil.isNotEmpty(scoreResponse)){return scoreResponse.getData();}}return null;}
}
  • getAllTheArticles:返回总文章数据
  • getArticlesScore : 返回文章的分数

在这里插入图片描述

⛵测试用例:

@SpringBootTest
class CsdnScoreApplicationTests {@Resourceprivate CsdnScoreService scoreService;@Testvoid articleDetailsScore() {List<ArticleDetails> allTheArticles = scoreService.getAllTheArticles("自己的名称", "blog");ArticleDetails articleDetails = allTheArticles.get(0);Score articlesScore = scoreService.getArticlesScore(articleDetails.getUrl());System.out.println("-------文章质量分------");System.out.println("文章名称:"+articleDetails.getTitle());System.out.println("文章分数:"+articlesScore.getScore());System.out.println("文章建议:"+articlesScore.getMessage());System.out.println("-------   结束  ------");}}

⛴ 运行效果:

在这里插入图片描述

☘️增加Excel导出

在这里插入图片描述
在这里插入图片描述

不看不知道,一看吓一跳,179篇只有72篇是良好,剩下的都有改进空间,裂开呀.

在这里插入图片描述

✍️结束

后续代码会发布到gitee上,有兴趣的可以去下载研究地址

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

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

相关文章

查看表结构

MySQL从小白到总裁完整教程目录:https://blog.csdn.net/weixin_67859959/article/details/129334507?spm1001.2014.3001.5502 语法格式: desc 表名; 描述: 如果表不存在,就提示不存在; 如果表存在,就显示表的结构 比如: desc test01; desc test02; 错误示范: mysql> …

systemserver的inputdispatcher直接产生CANCEL事件原理分析-讨厌的android触摸面试题

背景回顾&#xff1a; 上一个blog已经重点讲解了app层面自己产生的Cancel触摸事件&#xff0c;大概产生的原理如下&#xff1a; 上一个blog地址&#xff1a;https://blog.csdn.net/learnframework/article/details/124086882 即可以看出来&#xff0c;在服务端systemserver其实…

vue3-vant4-vite-pinia-axios-less学习日记

代码地址 GitHub&#xff1a;vue3-vant4-vite-pinia-axios-less 效果如图 1.首页为导航栏 2.绑定英雄页 3.注册页 4.英雄列表页 5.后面不截图了&#xff0c;没啥了 模块 1.vant4&#xff1a;按需引入组件样式文档 2.安装该vite-plugin-vue-setup-extend插件可以直接在…

基于Java+SpringBoot+Vue的图书借还小程序的设计与实现(亮点:多角色、点赞评论、借书还书、在线支付)

图书借还管理小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统实现5.1 小…

Linux安全加固:保护你的服务器

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

【深度学习实验】线性模型(三):使用Pytorch实现简单线性模型:搭建、构造损失函数、计算损失值

目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入库 1. 定义线性模型linear_model 2. 定义损失函数loss_function 3. 定义数据 4. 调用模型 5. 完整代码 一、实验介绍 使用Pytorch实现 线性模型搭建构造损失函数计算损失值 二、…

TensorFlow与pytorch特定版本虚拟环境的安装

TensorFlow与Python的版本对应&#xff0c;注意&#xff0c;一定要选择对应的版本&#xff0c;否则会让你非常痛苦&#xff0c;折腾很久搞不清楚原因。 建议使用国内镜像源安装 没有GPU后缀的就表示是CPU版本的&#xff0c;不加版本就是最新 pip install tensorflow -i https:…

Learn Prompt-人工智能基础

什么是人工智能&#xff1f;很多人能举出很多例子说这就是人工智能&#xff0c;但是让我们给它定义一个概念大家又觉得很难描述的清楚。实际上&#xff0c;人工智能并不是计算机科学领域专属的概念&#xff0c;在其他学科包括神经科学、心理学、哲学等也有人工智能的概念以及相…

Vue3+ElementUI使用

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><meta name"viewport" content"initial-scale1.0,maximum-scale1.0,minimum-scale1.0,user-scalable0, widthdevice-width"/><!-- 引入样式 --><lin…

《C和指针》笔记24: 指针和间接访问

本文主要讲指针和间接访问&#xff0c;标题对应《C和指针对应的章节》&#xff0c;引用的地方是自己写的一些注释、理解和总结。 指针、间接访问和左值 先回顾一下左值和右值 左值代表着一个位置。右值代表着一个值。赋值等号左边是个左值&#xff0c;赋值等号右边是一个右值…

Vue入门简介(带你打开Vue的大门)

目录 前言 一、Vue简介 1. 什么是Vue 2. Vue的应用场景 3. Vue的作用&#xff08;重要性&#xff09; 4. 什么是MVVM模式 5. 开源库网址 二、Vue入门使用 1. 基础使用步骤 1.1 引入Vue.js 1.2 创建Vue实例 1.3 编写Vue模板 1.4 数据绑定与指令 1.5 调用Vue方法和…

flutter聊天界面-TextField输入框buildTextSpan实现@功能展示高亮功能

flutter聊天界面-TextField输入框buildTextSpan实现功能展示高亮功能 最近有位朋友讨论的时候&#xff0c;提到了输入框的高亮展示。在flutter TextField中需要插入特殊样式的标签&#xff0c;比如&#xff1a;“请 张三 回答一下”&#xff0c;这一串字符在TextField中输入&a…

群辉 Synology NAS Docker 安装 RustDesk-server 自建服务器只要一个容器

from https://blog.zhjh.top/archives/M8nBI5tjcxQe31DhiXqxy 简介 之前按照网上的教程&#xff0c;rustdesk-server 需要安装两个容器&#xff0c;最近想升级下版本&#xff0c;发现有一个新镜像 rustdesk-server-s6 可以只安装一个容器。 The S6-overlay acts as a supervi…

NSS [HNCTF 2022 WEEK2]ohmywordpress(CVE-2022-0760)

NSS [HNCTF 2022 WEEK2]ohmywordpress&#xff08;CVE-2022-0760&#xff09; 题目描述&#xff1a;flag在数据库里面。 开题&#xff1a; 顺着按钮一直点下去会发现出现一个按钮叫安装WordPress 安装完之后的界面&#xff0c;有一个搜索框。 F12看看network。 又出现了这个…

day22集合01

1.Collection集合 1.1数组和集合的区别【理解】 相同点 都是容器,可以存储多个数据 不同点 数组的长度是不可变的,集合的长度是可变的 数组可以存基本数据类型和引用数据类型 集合只能存引用数据类型,如果要存基本数据类型,需要存对应的包装类 1.2集合类体系结构【理解】…

【Axure原型素材】扫一扫

今天和粉丝们免费分享扫一扫的原型素材&#xff0c;"扫一扫"是一项常见的移动应用功能&#xff0c;通常通过手机或平板电脑上的摄像头来扫描二维码或条形码以实现各种功能。下面是和大家分享扫一扫的常用素材~~~ 【原型效果】 【Axure原型素材】扫一扫 【原型预览】…

【环境配置】基于Docker配置Chisel-Bootcamp环境

文章目录 Chisel是什么Chisel-Bootcamp是什么基于Docker配置Chisel-Bootcamp官网下载Docker安装包Docker换源启动Bootcamp镜像常用docker命令 可能产生的问题 Chisel是什么 Chisel是Scala语言的一个库&#xff0c;可以由Scala语言通过import引入。 Chisel编程可以生成Verilog代…

IDEA创建完Maven工程后,右下角一直显示正在下载Maven插件

原因&#xff1a; 这是由于新建的Maven工程&#xff0c;IDEA会用它内置的默认的Maven版本&#xff0c;使用国外的网站下载Maven所需的插件&#xff0c;速度很慢 。 解决方式&#xff1a; 每次创建 Project 后都需要设置 Maven 家目录位置&#xff08;就是我们自己下载的Mav…

嵌入式:驱动开发 Day2

作业&#xff1a;字符设备驱动&#xff0c;完成三盏LED灯的控制 驱动代码&#xff1a; mychrdev.c #include <linux/init.h> #include <linux/module.h> #include <linux/fs.h> #include <linux/uaccess.h> #include <linux/io.h> #include &q…

Windows/Linux(命令、安装包和源码安装)平台各个版本QT详细安装教程

前言 本文章主要介绍了Windows/Linux平台下&#xff0c;QT4&#xff0c;QT5&#xff0c;QT6的安装步骤。为什么要把QT版本分开介绍呢&#xff0c;因为这三个版本&#xff0c;安装步骤都不一样。Windows平台&#xff0c;QT4的Qt Creator&#xff0c;QT库和编译器是分开的&#…