当前位置: 首页 > article >正文

CSND文章质量分批量查询

简介

CSDN 质量分是一项公开的 CSDN 博文内容质量分析服务,其综合分析了内容的标题、段落结构、正文长度、代码格式及复杂度、链接和超文本内容比例及质量等因素,为 IT 技术文章提供客观公共的质量分析结果

用途

  • 可用与对文章质量做评估
  • 可申请创作者 (有对文章质量分的要求)
  • 注意其他不正当用途 需要自行负责

创作者身份认证审核标准
优质创作者申请条件:

粉丝数在5000以上
近30日(申请日算起)原创文章数不少于4篇
原创博文总数不少于100篇
垂直领域原创数量不低于总文章数的60%
垂直领域近2年原创博文质量平均分不得低于80分
新星创作者申请条件:

粉丝数在2000以上
近30日(申请日算起)原创文章数不少于4篇
原创博文总数不少于50篇
垂直领域原创数量不低于总文章数的60%
垂直领域近2年原创博文质量平均分不得低于70分

其他特殊身份认证申请条件(如果博主有以下特殊身份):

拥有个人发明专利
是技术图书作者
全国技术比赛获奖者
大学讲师
特殊身份认证在申请认证的时候可以描述为「《xxx》书籍作者」「xxx专利发明者」等等,只要提交相关证明同时粉丝数在500以上并原创博文数达到50篇即可申请,若文章不存在抄袭的情况可通过审核。

优质创作者和新星创作者只要满足以上条件基本都会通过审核。但是也有特殊的不会通过审核情况,具体如下:

文章质量过低
认证描述不清不楚
文章存在抄袭行为
文章多为毕设相关
若通过认证后被举报抄袭且被证实将取消认证资格
所以在申请的时候也需要查询自己的文章质量分。

质量分查询

文章质量分查询地址: https://www.csdn.net/qc?utm_source=1966961068 点我跳转查询

输入博客地址即可完成查看
在这里插入图片描述

文章平均质量分查询可通过博客主页的「学习成就」进行查询,如下图所示:

在这里插入图片描述
在这里插入图片描述
但是多篇博客,你想知道哪个哪个博客质量分过低 那该怎么办 总不能一个一个查询吧

质量分批量查询

官方只提供了单个博客质量分查询的地址 ,批量查询只能靠我们自己实现了

主要有两步

  • 查询自己所有博客的url
  • 将每个博客url 作为参数 循环调用单个文章质量分查询
  • 汇总结果

查询自己所有博客的url

这里使用手工方式
username 替换为自己的博客地址 分页的size 传入的是500 但是测试下来 分页参数实际上最大只支持100 如果有个超过100篇文章 需要自行替换 分页的页码 参数即 page 第一页传入1 第二页page 传入2 然后将查询的结果保存为json文件 (可使用chrome插件 FeHelper) 依次类推 直到没有文章为止

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

例如

在这里插入图片描述

批量查询

  • 文件准备
    将下载好的json文件 放入自己的项目里 (java项目即可)
    在这里插入图片描述

  • 依赖引入 hutool guava (可选) 改造较小 fastjson

    <dependency>
       <groupId>com.google.guava</groupId>
       <artifactId>guava</artifactId>
       <version>32.1.3-jre</version>
    </dependency>
    
    
    <dependency>
       <groupId>cn.hutool</groupId>
       <artifactId>hutool-all</artifactId>
       <version>5.8.25</version>
    </dependency>
    
    <dependency>
       <groupId>com.alibaba</groupId>
       <artifactId>fastjson</artifactId>
       <version>1.2.83</version>
    </dependency>
    
  • 批量查询代码

    • 需要修改地方 json文件位置
    • header 参数 需要先访问质量分查询地址 查询文章的质量分 然后抓包获取如下参数 完成参数替换
      headerMap.put("accept","application/json, text/plain, */*");
      headerMap.put("x-ca-key","xxx");
      headerMap.put("x-ca-nonce","83117056-93cc-438d-bc28-12d38664ee15");
      headerMap.put("x-ca-signature","X+sjLooW01anLpAHxL3VJmxRYEEZ8kNJJ/loBABCc=");
      headerMap.put("x-ca-signature-headers","x-ca-key,x-ca-nonce");
      headerMap.put("x-ca-signed-content-type","multipart/form-data");
      headerMap.put("content-type","multipart/form-data; boundary=----WebKitFormBoundary3xxiyRJFc0k4eF4w");
      headerMap.put("cookie","xxx");
      
    • 结果文件写入路径
    • 代码如下
      import cn.hutool.core.collection.CollectionUtil;
      import cn.hutool.http.HttpGlobalConfig;
      import cn.hutool.http.HttpRequest;
      import cn.hutool.http.HttpResponse;
      import com.alibaba.fastjson.JSON;
      import com.alibaba.fastjson.JSONArray;
      import com.alibaba.fastjson.JSONObject;
      import com.alibaba.fastjson.TypeReference;
      import com.google.common.collect.Lists;
      import com.google.common.collect.Maps;
      import lombok.extern.slf4j.Slf4j;
      import org.apache.commons.io.IOUtils;
      
      import java.io.*;
      import java.lang.reflect.Type;
      import java.nio.charset.StandardCharsets;
      import java.nio.file.Files;
      import java.nio.file.Paths;
      import java.util.ArrayList;
      import java.util.List;
      import java.util.Map;
      import java.util.stream.Collectors;
      
      /**
       * @author leon
       * @date 2024/08/29
       */
      @Slf4j
      public class Test {
      
      
          public static void main(String[] args) throws IOException {
              //json 文件所在路径 自行替换json文件的位置
              List<String> pathList= Lists.newArrayList("file/contents.json","file/contents2.json","file/contents3.json");
              List<String> urlList = getAllArticleUrl(pathList);
      
              if(CollectionUtil.isEmpty(urlList)){
                  log.error("文章url为空");
                  return;
              }
      
              log.info("文章总数: {}",urlList.size());
              Map<String,String> headerMap = Maps.newHashMap();
      
              headerMap.put("accept","application/json, text/plain, */*");
              headerMap.put("x-ca-key","xxx");
              headerMap.put("x-ca-nonce","83117056-93cc-438d-bc28-12d38664ee15");
              headerMap.put("x-ca-signature","X+sjLooW01anLpAHxL3VJmxRYEEZ8kNJJ/loBABCc=");
              headerMap.put("x-ca-signature-headers","x-ca-key,x-ca-nonce");
              headerMap.put("x-ca-signed-content-type","multipart/form-data");
              headerMap.put("content-type","multipart/form-data; boundary=----WebKitFormBoundary3xxiyRJFc0k4eF4w");
              headerMap.put("cookie","xxx");
      
              StringBuilder stringBuilder = new StringBuilder();
              for (String url: urlList){
                  Map<String,Object> param = Maps.newHashMap();
                  param.put("url",url);
                  try(HttpResponse resp = HttpRequest.post("https://bizapi.csdn.net/trends/api/v1/get-article-score").form(param).timeout(HttpGlobalConfig.getTimeout())
                          .headerMap(headerMap, true)
                          .execute()){
                      String body = resp.body();
                      String res = "文章地址: "+url +" 结果: "+body;
                      stringBuilder.append(res).append(System.lineSeparator());
                  }
      
              }
              log.info("======开始写入文件=====");
              String writeContent = stringBuilder.toString();
              log.info("writeContent: {}",writeContent);
              //写到磁盘文件
              IOUtils.write(writeContent,new BufferedOutputStream(Files.newOutputStream(Paths.get("/Users/leon/Desktop/AllArticleUrl.txt"))),StandardCharsets.UTF_8);
          }
      
          private static List<String> getAllArticleUrl(List<String> pathList) {
              if(CollectionUtil.isEmpty(pathList)){
                  log.info("文件路径配置为空");
                  return new ArrayList<>();
              }
      
              ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
      
              List<String> allUrlList = new ArrayList<>();
              for (String path : pathList) {
                  InputStream resourceAsStream = contextClassLoader.getResourceAsStream(path);
      
                  if(null == resourceAsStream){
                      log.info("文件路径: {} 资源不存在",path);
                      continue;
                  }
                  Type type = new TypeReference<JSONObject>(){}.getType();
      
                  JSONObject jo = null;
                  try {
                      jo = JSON.parseObject(resourceAsStream, StandardCharsets.UTF_8, type);
                      JSONObject data = jo.getJSONObject("data");
                      JSONArray list = data.getJSONArray("list");
                      List<String> urlList = list.stream().map(obj -> {
                          JSONObject jsonObject = (JSONObject) obj;
                          return jsonObject.getString("url");
                      }).collect(Collectors.toList());
                      allUrlList.addAll(urlList);
                  } catch (IOException e) {
                      log.error("文件路径: {} 资源处理失败 错误信息: {[]}",path,e);
      
                  }finally {
                      try {
                          resourceAsStream.close();
                      } catch (IOException e) {
                          log.error("文件路径: {} 资源释放失败", path);
                      }
                  }
      
              }
      
              return allUrlList;
          }
      }
      
      

运行程序即可

在这里插入图片描述

免责声明

本工具仅用于个人学习和研究目的。使用者应该遵守 CSDN 的使用条款和规定。任何使用本工具造成的违规行为和后果,作者概不负责。

请注意,本工具仅提供便利性,不对任何因使用本工具导致的任何问题承担责任。使用本工具即代表您同意自行承担所有风险。


good day !!!


http://www.kler.cn/news/284995.html

相关文章:

  • 类图的关联关系
  • Python基础 3 - 函数及数据容器
  • JAVA毕业设计167—基于Java+Springboot+vue3+小程序的物业管理系统小程序(源代码+数据库+万字论文+文献综述)
  • Llamaindex RAG实践
  • 并发服务器
  • 代码随想录算法训练营第六十天 | 图论part10
  • SkyWalking部署(监控系统)
  • jquery下载的例子如何应用到vue中
  • 【秋招笔试】8.30饿了么秋招(算法岗)-三语言题解
  • MongoDB 中国用户大会8月31日 (MongoDB 8.0 发布)
  • 医院建筑的电气设计——保障医疗质量与安全的坚固基石
  • 深度学习100问20:什么是RNN
  • GPT带我学-设计模式-责任链模式
  • 力扣面试150 插入区间 模拟
  • 【经典面试题】Kafka为什么这么快?
  • Qt: QGraphicsView二维图形绘图框架
  • sql 4,创建表类型
  • HTML <template> 标签的基本技巧
  • flutter 开发中常用的 Widget
  • Metasploit漏洞利用系列(十):MSF渗透测试 - 震网三代(远程快捷方式漏洞)实战
  • Elasticsearch中别名的作用
  • .NET WPF 抖动动画
  • python 天气与股票的关系--第一部分,爬取数据
  • 新审视零阶优化在内存高效大模型微调中的应用
  • 你是如何克服编程学习中的挫折感的?——从Bug中找到成长的契机
  • Linux awk案例
  • Dataworks_PySpark开发流程
  • azure-search-openai-demo-csharp does not deploy correctly to azure clooad
  • vue项目打包压缩静态资源—使用compression-webpack-plugin
  • 是否应该使用WordPress自动更新的功能