百度墨斗鱼文库创作中心源码分析

前言

公司解散,待业中,耗时一天研究了一下百度墨斗鱼文库创作中心源码。实现了后台自动完成任务并通知。

下面主要分析一下实现思路和难点

一,实现思路

调用接口查询未回答的题目列表

合并多个tab下的题目

设置黑白名单,这里主要是筛选出好答的题目,提高通过率。

过滤出最适合回答的问题,根据题目去gpt等ai平台查询答案,为了提高通过率,只有200字以上的答案才进行上传,否则加入题目黑名单,下次不再检查。

将答案生成到word文档流中

上传文件,这里略微复杂,调用了3次上传接口。

提交文件,并发送钉钉消息。

二,关键接口

  1. 获取个人信息:fetchmain

  2. 判断cookie是否有效:getfufeifulltryreadstatus

  3. 查询题目列表:getquerypacklist

  4. 文件预览:previewfile

  5. 获取文件上传配置:getbostoken

  6. 文件上传(参数不同调用了三次):upload

  7. 编译文件获取docid:completefile

  8. 保存文件:addpublicdoc

package com.g7go.reverse.mdy.service;import com.g7go.reverse.mdy.entity.*;import java.util.Map;/*** 百度墨斗鱼** @author liwenchao*/
public interface BaiDuMdyService {/*** 获取个人信息*/FetchmainResult fetchmain();/*** 获取付费全部读取状态*/FufeifulltryreadstatusResult getfufeifulltryreadstatus();/*** @param cid 栏目id* @param pn  页数* @param rn  条数* @param tab 传1*/GetquerypacklistResult getquerypacklist(int cid, int pn, int rn, int tab);/*** 文件预览*/PreviewfileResult previewfile(String filename, String identifier, String totalSize, String fileExt, String token);/*** 获取上传文件配置*/BosTokenResult getbostoken(String filename, String identifier, String totalSize, String fileExt);/*** 上传文件1*/UploadOneResult upload(String securityToken, String ak, String sk, String bucket, String key);/*** 上传文件2*/void upload2(String securityToken, String ak, String sk, String bucket, String key, String uploadId, String totalSize, byte[] bytes);/*** 上传文件3*/UploadThreeResult upload3(String securityToken, String ak, String sk, String bucket, String key, String uploadId, String identifier);/*** 完整文件获取docid*/CompletefileResult completefile(String filename, String identifier, String totalSize, String fileExt, String token);/*** 保存文档*/AddpublicdocResult addpublicdoc(String filename, String docId, String identifier, String queryId, String foldId, String token);/*** 定时完成任务*/void execTask() throws InterruptedException;/*** 查询有效cookie列表,并删除无效cookie*/Map<String, String> queryCookie();/*** 设置新的cookie*/void saveCookie(String cookie);/*** 删除cookie*/void removeCookie(String cookie);}

三,项目难点

上传文件接口签名算法

r.prototype.generateAuthorization = function(e, t, n, r, a, s, c) {var f = a ? new Date(1e3 * a) : new Date, u = i.format("bce-auth-v1/%s/%s/%d", this.ak, f.toISOString().replace(/\.\d+Z$/, "Z"), s || 1800);o("rawSessionKey = %j", u);var d = this.hash(u, this.sk), h = this.uriCanonicalization(t), l = this.queryStringCanonicalization(n || {}), p = this.headersCanonicalization(r || {}, c), b = p[0], m = p[1];o("canonicalUri = %j", h),o("canonicalQueryString = %j", l),o("canonicalHeaders = %j", b),o("signedHeaders = %j", m);var v = i.format("%s\n%s\n%s\n%s", e, h, l, b);o("rawSignature = %j", v),o("sessionKey = %j", d);var g = this.hash(v, d);return m.length ? i.format("%s/%s/%s", u, m.join(";"), g) : i.format("%s//%s", u, g)}

请求头中三个重要参数实现

 代码已上传gitee欢迎交流

https://gitee.com/g7go/reverse-engineering-task

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

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

相关文章

can 相关背题

1 CAN FD 和CAN的 区别&#xff1a; CAN-FD&#xff1a;一帧数据最长64字节。以理解成CAN协议的升级版&#xff0c;只升级了协议&#xff0c;物理层未改变。传输速率不同、数据长度不同、帧格式不同、ID长度不同。 1&#xff09;速率不同&#xff1a; CAN&#xff1a;最大传…

【JAVA】数据类型,类型转换与提升,运算符,标识符命名规则

&#x1f349;内容专栏&#xff1a;【JAVA】 &#x1f349;本文脉络&#xff1a;数据类型&#xff0c;类型转换与提升&#xff0c;运算符&#xff0c;标识符命名规则 &#x1f349;本文作者&#xff1a;Melon_西西 &#x1f349;发布时间 &#xff1a;2023.7.12 目录 1. 字面常…

阿里云限时福利:WoSign品牌SSL证书首购4折优惠

阿里云SSL证书限时首购福利&#xff1a;2023年07月04日至08月31日&#xff0c;阿里云平台WoSign品牌系列SSL证书首购4折优惠&#xff0c;惊喜折扣、限时促销、限量抢购&#xff0c;机会不容错过&#xff01; 阿里云平台WoSignSSL证书 沃通CA是依法设立的第三方电子认证服务机构…

vLLM大模型推理加速方案原理(PagedAttention)

一、vLLM 简介 vLLM 用于大模型并行推理加速&#xff0c;核心是 PagedAttention 算法&#xff0c;官网为&#xff1a;https://vllm.ai/。 vLLM 主要特性&#xff1a; 先进的服务吞吐量通过 PagedAttention 对注意力 key 和 value 进行内存管理对传入请求的批处理针对 CUDA 内…

SwiftUI + Swift 设备振动

如何让设备振动呢 iPhone 6S 3D Touch&#xff0c;可以识别轻&#xff0c;中&#xff0c;重三种按压力度&#xff0c;配合恰到好处的振动有利于提升交互体验&#xff0c;但后面的新设备都不支持 3D Touch 了&#xff0c;改为了检测按压时间&#xff0c;按同一个图标&#xff0…

尚医通04:Axios Node Npm bable webpack+前端工程改造

目录 本日学习 内容介绍 Axios Node NPM包管理器 本日学习 1. 了解Axios :他是异步请求用的&#xff0c;前后端。 用于在浏览器和 Node.js 中发送 HTTP 请求。它支持从服务器获取数据、上传数据以及执行其他与 HTTP 相关的操作。 2.Node:它允许你在服务器端运行 JavaScrip…

python PYQT5 键盘,鼠标,绘制,焦点,改变,输入法,事件的方法和使用例子

https://img-blog.csdnimg.cn/7630017d3ee444eab9bdedf8d48d575f.png from PyQt5.Qt import * import sys class MyQwidget(QWidget):def __init__(self):super().__init__()def showEvent(self, a0) -> None:print("窗口被展示出来",a0)def closeEvent(self,a0) …

linux开发工具:repo

1&#xff1a;repo简单介绍 repo是Google开发的用于管理Android版本库的一个工具&#xff0c;它是由一系列的Python脚本组成&#xff0c;封装了一系列的Git命令&#xff0c;用来统一管理多个Git仓库。repo不是用于取代git&#xff0c;而是简化了对多个Git版本库的管理。 repo…

Java中可以使用哪些系统架构?怎样选择?

架构&#xff0c;又名软件架构&#xff0c;是有关软件整体结构与组件的抽象描述&#xff0c;用于指导大型软件系统各个方面的设计。 Java企业级的应用根据业务的复杂程度&#xff0c;通常使用的系统架构有应用架构、垂直应用架构、面向服务的架构(Service-Oriented Architectu…

IDEA 导入多模块项目并设置运行

1、导入多模块项目 导入的步骤点击左上角File->New->Module from Existing Sources&#xff0c;最后点击选择项目的pom文件即可 2、设置模块 如果pom.xml文件是灰色并且有横杠&#xff0c;则需要这样设置&#xff1a; 把√去掉。 项目结构如图所示&#xff1a; 本项…

816. 数组翻转

链接&#xff1a; 链接 题目&#xff1a; 给定一个长度为 nn 的数组 aa 和一个整数 sizesize&#xff0c;请你编写一个函数&#xff0c;void reverse(int a[], int size)&#xff0c;实现将数组 aa 中的前 sizesize 个数翻转。 输出翻转后的数组 aa。 输入格式 第一行包含两个整…

【Docker】简单的Linux安装Redis

目录 Docker 安装 Redis拉取镜像安装容器修改配置文件容器随docker启动自动运行redis客户端 史上最详细Docker安装Redis &#xff08;含每一步的图解&#xff09;实战 Docker 安装 Redis 拉取镜像 docker pull redis安装容器 创建redis配置文件目录&#xff1a;如果内部没有相…