赞
踩
公司解散,待业中,耗时一天研究了一下百度墨斗鱼文库创作中心源码。实现了后台自动完成任务并通知。
下面主要分析一下实现思路和难点
调用接口查询未回答的题目列表
合并多个tab下的题目
设置黑白名单,这里主要是筛选出好答的题目,提高通过率。
过滤出最适合回答的问题,根据题目去gpt等ai平台查询答案,为了提高通过率,只有200字以上的答案才进行上传,否则加入题目黑名单,下次不再检查。
将答案生成到word文档流中
上传文件,这里略微复杂,调用了3次上传接口。
提交文件,并发送钉钉消息。
获取个人信息:fetchmain
判断cookie是否有效:getfufeifulltryreadstatus
查询题目列表:getquerypacklist
文件预览:previewfile
获取文件上传配置:getbostoken
文件上传(参数不同调用了三次):upload
编译文件获取docid:completefile
保存文件: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欢迎交流
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。