当前位置:   article > 正文

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

百度墨斗鱼源码

前言

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

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

一,实现思路

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

合并多个tab下的题目

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

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

将答案生成到word文档流中

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

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

二,关键接口

  1. 获取个人信息:fetchmain

  2. 判断cookie是否有效:getfufeifulltryreadstatus

  3. 查询题目列表:getquerypacklist

  4. 文件预览:previewfile

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

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

  7. 编译文件获取docid:completefile

  8. 保存文件:addpublicdoc

  1. package com.g7go.reverse.mdy.service;
  2. import com.g7go.reverse.mdy.entity.*;
  3. import java.util.Map;
  4. /**
  5. * 百度墨斗鱼
  6. *
  7. * @author liwenchao
  8. */
  9. public interface BaiDuMdyService {
  10. /**
  11. * 获取个人信息
  12. */
  13. FetchmainResult fetchmain();
  14. /**
  15. * 获取付费全部读取状态
  16. */
  17. FufeifulltryreadstatusResult getfufeifulltryreadstatus();
  18. /**
  19. * @param cid 栏目id
  20. * @param pn 页数
  21. * @param rn 条数
  22. * @param tab 传1
  23. */
  24. GetquerypacklistResult getquerypacklist(int cid, int pn, int rn, int tab);
  25. /**
  26. * 文件预览
  27. */
  28. PreviewfileResult previewfile(String filename, String identifier, String totalSize, String fileExt, String token);
  29. /**
  30. * 获取上传文件配置
  31. */
  32. BosTokenResult getbostoken(String filename, String identifier, String totalSize, String fileExt);
  33. /**
  34. * 上传文件1
  35. */
  36. UploadOneResult upload(String securityToken, String ak, String sk, String bucket, String key);
  37. /**
  38. * 上传文件2
  39. */
  40. void upload2(String securityToken, String ak, String sk, String bucket, String key, String uploadId, String totalSize, byte[] bytes);
  41. /**
  42. * 上传文件3
  43. */
  44. UploadThreeResult upload3(String securityToken, String ak, String sk, String bucket, String key, String uploadId, String identifier);
  45. /**
  46. * 完整文件获取docid
  47. */
  48. CompletefileResult completefile(String filename, String identifier, String totalSize, String fileExt, String token);
  49. /**
  50. * 保存文档
  51. */
  52. AddpublicdocResult addpublicdoc(String filename, String docId, String identifier, String queryId, String foldId, String token);
  53. /**
  54. * 定时完成任务
  55. */
  56. void execTask() throws InterruptedException;
  57. /**
  58. * 查询有效cookie列表,并删除无效cookie
  59. */
  60. Map<String, String> queryCookie();
  61. /**
  62. * 设置新的cookie
  63. */
  64. void saveCookie(String cookie);
  65. /**
  66. * 删除cookie
  67. */
  68. void removeCookie(String cookie);
  69. }

三,项目难点

上传文件接口签名算法

  1. r.prototype.generateAuthorization = function(e, t, n, r, a, s, c) {
  2. var f = a ? new Date(1e3 * a) : new Date
  3. , u = i.format("bce-auth-v1/%s/%s/%d", this.ak, f.toISOString().replace(/\.\d+Z$/, "Z"), s || 1800);
  4. o("rawSessionKey = %j", u);
  5. var d = this.hash(u, this.sk)
  6. , h = this.uriCanonicalization(t)
  7. , l = this.queryStringCanonicalization(n || {})
  8. , p = this.headersCanonicalization(r || {}, c)
  9. , b = p[0]
  10. , m = p[1];
  11. o("canonicalUri = %j", h),
  12. o("canonicalQueryString = %j", l),
  13. o("canonicalHeaders = %j", b),
  14. o("signedHeaders = %j", m);
  15. var v = i.format("%s\n%s\n%s\n%s", e, h, l, b);
  16. o("rawSignature = %j", v),
  17. o("sessionKey = %j", d);
  18. var g = this.hash(v, d);
  19. return m.length ? i.format("%s/%s/%s", u, m.join(";"), g) : i.format("%s//%s", u, g)
  20. }

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

 代码已上传gitee欢迎交流

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/139633
推荐阅读
相关标签
  

闽ICP备14008679号