Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

能否添加对群、好友分享文件的操作功能 #73

Open
dave-yxw opened this issue Oct 16, 2021 · 4 comments
Open

能否添加对群、好友分享文件的操作功能 #73

dave-yxw opened this issue Oct 16, 2021 · 4 comments

Comments

@dave-yxw
Copy link

dave-yxw commented Oct 16, 2021

现在很多人都选择在百度网盘内建群或加好友来分享文件了,这样的好处是增加了资源被传播的难度,不能像分享链接一样只要分享出一串链接文本就可以了。

我通过chrome开发者工具对群和好友分享文件的操作request请求,我对网络编程不熟,您看一下能否把这一块加到项目中。

群、好友分享的数据结构

  • uk: 每个用户对应的user_id
  • gid: 一个群组会话id
  • from_uk, to_uk: 一个分享文件是由谁分享的,分享给谁。如果在群组中,文件是共享给群组成员的,没有to_uk
  • msg_id: 会话中的一次分享,绑定一个from_uk. 如果是好友间的会话,一个msg_id还有一个to_uk.
    一个msg_id下可能有多个分享文件/文件夹
  • fs_id: 对应一个文件或文件夹

群组接口

列出群组列表

列出对话Session

包括群会话和个人会话,没什么用

列出群组中的共享文件/文件夹

  • py: list_group_shares(group_id) -> List[PcsGroupShareFile]
  • web request
      {
          errno: 0,
          request_id: 8998245719243090000,
          has_more: 0,
          timestamp: 1634361543,
          records: {
              msg_count: 6,
              msg_list: [{
                      msg_id: "6217907761116094706",
                      group_id: "461057192968828484",
                      msg_type: 100,
                      file_list: [{
                          category: "6",
                          fs_id: "748932364151706",
                          isdir: "1",
                          path: "/星辰学院课程目录09.11更新",
                          server_filename: "星辰学院课程目录09.11更新",
                          size: "0",
                          ...
                      }],
                      uk: 29515193,
                      uname: "小田***88",
                  },
                  {...},
                  {...},
                  {...},
                  {...},
                  {...}
              ]
          }
      }
      

列出文件夹下的文件列表

  • py: list_group_share_file(PcsGroupShareFile) -> List[PcsGroupShareFile]
  • web request:
      {
          errno: 0,
          request_id: 8998394438598065000,
          records: [
              {
                  category: 4,
                  fs_id: 919955398128988,
                  isdir: 0,
                  path: "/星辰学院课程目录09.11更新/课程目录使用详解.docx",
                  server_filename: "课程目录使用详解.docx",
                  size: 316017,
                  dlink: "U2tyufKRM4ZbmoxP/ygY3HKUVdIIOb+ShnqZKjX/HlhrAcKoKCbF3kknM5D4itJERkqq4Jjm+W3+OenhgjYxaySneLYGTbuLwbApub10Q3Iu3g16y3g60CTLgiN2TUpDMONsOvfsMbCiiS5DOexTvYd8q5YIhKpf2vF3/DuLmL60gipByItjBjuHFwZd4IiUuq0C+QwIaWKsvcrel/AJev+ORmu7PdLiapMMRo97oWqme/fm/Bqs1uIhN7j0hjTvCPrG+ZGYGNv7D3aqxeMcyPye0gTr6fGSPy+XrR2hPOd6JdQeAwqHiXbZY3oKbB7bCZlOhjSY8Ny8g271vmNi0TIWEU7PheCPPyVZOxZ4bmgD/JMzlgbfFoG/uG3Udq5vhVEoPrPtvKVESP48WwU+HbaEpn5qhZXmouzo52NwuIoSzg9dW251CwIn00Kt3Gwatiaz7EtUI8f+06h7OeUs70apX3kIt1R1Ko01IdtrOlBEBGF0I/OLOaBU/SlQH0nlPOoX",
              },
              {...}
          ],
          timestamp: 1634362097,
          has_more: 0
      }
      

分享文件到群组

转存文件

  • py: transfer_group_file(List[PcsGroupShareFile], remote_save_dir)
  • web request:
      from_uk:29515193,
      msg_id:"6217907761116094706",
      path:/remote_save_dir,
      ondup:newcopy,
      async:1,
      type:2,
      gid:461057192968828484,
      fs_ids:"[59479004746095,29253795039390]"
      
    • 返回内容:
      {"errno":0,"request_id":8999504730235608174}
    • 在chrome中测试时,这个transfer接口偶尔会返回errno=4的错误(QPS达到上限),但实际文件却又是转存成功的。

下载文件

这里的方法得到的下载链接在chrome中只对小文件有效(测试文件<20M),可以直接在浏览器中下载。对大文件(测试文件>80M),得到的
下载链接在浏览器打开返回错误码。对文件夹未测试,估计无效。

  • web request:
      encrypt:0,
      uk:4263942265,
      product:mbox,
      primaryid:6217907761116094706,
      fid_list:[780363705487750],
      extra:{"type":"group","gid":"461057192968828484"}
      
    • 返回内容
      {
          errno: 0
          list: [{
              category: 4
              context: "uk=4263942265&primaryid=6217907761116094706&fid_list=[780363705487750]&product=mbox&extra=%7B%22type%22%3A%22group%22%2C%22gid%22%3A%22461057192968828484%22%2C%22from_uk%22%3A29515193%7D&token=8dba38dfe062e693b47b486a0050316f"
              dlink: "https://d.pcs.baidu.com/file/393165686c0aab0613f2883d6043a016?fid=29515193-250528-780363705487750&dstime=1634369746&rt=sn-gp&sign=FDtAERVYJoK-DCb740ccc5511e5e8fedcff06b081203-o5Cbpy3aPKC4PX%2F5X4OtFqZEIA0%3D&expires=8h&chkv=1&chkbd=0&chkpc=et&dp-logid=9000447706778851077&dp-callid=0&shareid=6217907761116094706&r=308706202&vuk=4263942265&file_type=0"
              fs_id: 780363705487750
              isdir: 0
              md5: "393165686c0aab0613f2883d6043a016"
              path: "/星辰学院课程目录09.11更新/课程目录使用详解.pdf"
              server_filename: "课程目录使用详解.pdf"
              size: 376978
              ...
          }]
          request_id: 9000447706778851000
          server_time: 1634369746
      }
      

好友接口

好友接口与群组接口只相差一点点,在具体代码实现时可以考虑合并到一起。

列出好友列表

列出好友的共享文件/文件夹

  • py: list_friend_shares(from_uk) -> List[PcsFriendShareFile]
  • web request1
    • url: https://pan.baidu.com/mbox/msg/sessioninfo?to_uk=1100959212114&type=2
    • type: get
    • 返回内容: 可以看到好友中的所有分享msg_list,每次分享对应一个msg_id,msg的from_uk和to_uk, 一个msg_id下有一个List[fs_ids]。
      这里第一次请求得到的是对方分享给我的文件,has_more字段指示还有更多文件,cursor用于拼写请求更多文件的url。
      {
          errno: 0,
          request_id: 8999975063782876000,
          records: {
              list: [{
                  filelist: {
                      list: [{
                          category: "6",
                          fs_id: "669116894181201",
                          isdir: "1",
                          path: "/星辰学院已压缩/洋葱数学",
                          server_filename: "洋葱数学",
                          size: "0",
                      }],
                      total: 1
                  },
                  msg_id: "6066366433724808064",
                  from_uk: 1100959212114,
                  to_uk: 4263942265,
                  from_uname: "竹节**翠6",
                  to_uname: "ya***nbd",
                  msg_type: 100,
                  is_share: "1"
              }],
              has_more: 1,
              cursor: "MTYzNDM2NzUxMDc3NCYxNjM0MzY3NTEwNzc0"
          }
      }
      
  • web request2
      {
          errno: 0,
          request_id: 8999910272200854000,
          records: {
              list: [{
                  filelist: {
                      list: [{
                          category: "6",
                          fs_id: "553185097408759",
                          isdir: "1",
                          path: "/tmp/蜀山战纪",
                          server_filename: "蜀山战纪",
                          size: "0",
                      }],
                      total: 1
                  },
                  msg_id: "630301755343958566",
                  from_uk: 4263942265,
                  to_uk: 1100959212114,
                  from_uname: "ya***nbd",
                  to_uname: "竹节**翠6",
                  msg_type: 100,
                  is_share: "1"
              }],
              has_more: 0,
              cursor: "MTYzNDM2NzQxODUyMiYxNjM0MzY3NTEwNzc0"
          }
      }
      

列出文件夹下的文件列表

转存文件

  • py: transfer_friend_file(List[PcsFriendShareFile], remote_save_dir)
  • web request:
      from_uk:1100959212114
      to_uk:4263942265
      msg_id:6066366433724808064
      path:/remote_save_dir
      ondup:newcopy
      async:1
      type:1
      fs_ids:["669116894181201"]
      
    • 返回内容:
      {"errno":0,"request_id":9000190836497545056}

下载文件

@photkey
Copy link

photkey commented Oct 16, 2021

同求!最近在找类似的开源项目,github来回翻了好几遍 也没找到。

@silegon
Copy link

silegon commented Nov 17, 2021

这部分工作我自行开发了,存在一些复杂的地方,已经不是光这个项目能覆盖的了,可能需要对应的持久化管理。
难点:
1.以前的操作都是单步操作。而将群组里的文件眷村到自己的文件夹涉及到几步操作。分别是:1.列出信息列表;2.定位群组信息;拉去对应群的信息;3.定位文件分享消息,拉取其中的文件夹列表,逐个复制。(可以突破文件转存数量限制)
2.在操作操作的过程中,需要将以前的异步操作转化为同步操作。不然可能会出现多个命令操作同一个文件夹的情况,出现错误。
3.操作频率高了也会出现错误,这些都需要每一步判断处理,否则影响下一步的操作基础要素。
4.这些都是网络操作。可能要应对网络通信问题。

总而言之,这些操作涉及到 网络、批量、多步操作的问题。需要花时间调试处理。
另外最终的产品形态以及使用方法也不会简单。

@albert285957606
Copy link

下载文件的fid_list是什么,我使用文件的fs_id,但返回出的结果还是error

@albert285957606
Copy link

这个真不好搞,有没有辅助app,那个验证过一会儿就失效了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants