百度网盘, 用官方的方法提速 6MB 每秒

牙叔教程 简单易懂

之前发了一篇教程 百度网盘5MB每秒-你本来就很快

浏览量还可以, 所以写个续集,

不懂原理的可以看之前的教程,


上一篇教程中采用的方法是扫描二维码授权, 今天我们用另外一种方法授权;

我们封装一下方法, 使用的语言是

  • Node.js

其他语言可以使用 ChatGPT4 , 把Nodejs修改为其他语言


最后整合的代码中, 有下载进度, 就是我用 ChatGPT4 优化的.


步骤

一共有两步

  1. 获取用户授权
  2. 下载文件


授权模式介绍

当前百度网盘开放平台支持三种授权模式:授权码模式(Authorization Code)、简化模式(Implicit Grant)、设备码模式(Device Code)。您可以根据自身业务,选择合适的授权模式,实现用户授权。

三种模式主要区别如下:

授权模式

描述

授权码模式
(Authorization Code)

用户授权后生成授权码 Code,开发者应用通过 Code 换取 Access Token。

简化模式
(Implicit Grant)

无需通过 Code 换取 Access Token,直接获取 Access Token。

设备码模式
(Device Code)

获取设备码,用户授权后,开发者应用通过设备码换取 Access Token。

前两种都要绑定自己的域名, 我没有域名, 所以我选择第三个 设备码模式


设备码模式(Device Code)

对于弱输入设备,不支持浏览器或输入受限的设备(如儿童手表),推荐使用设备码模式接入授权。

开发者获取设备码,用户授权成功后,开发者通过设备码成功换取 Access Token。

用户授权有两种方式:一种是扫描二维码方式,另一种是输入用户码方式。关于用户码,在开发者获取设备码的同时,会返回用户码。

我们看最后一句话, 用户授权有两种方法

  • 扫描二维码
  • 输入用户码

为了实现更方便的自动化下载文件, 我们采用输入用户码的模式


授权时序图

这是百度网盘官方的图片


代码就不讲了, 我就只贴一下,

懂的就懂, 不懂的讲了也不懂, 不费那个劲


获取用户码

这些代码都是用 ChatGPT 写的

有图为证

const axios = require("axios");
const { AppID, Appkey, Secretkey, Signkey } = require("./config.js");async function getDeviceCode() {try {const response = await axios.get("https://openapi.baidu.com/oauth/2.0/device/code", {params: {response_type: "device_code",client_id: Appkey,scope: "basic,netdisk",},headers: {"User-Agent": "pan.baidu.com",},});console.log(response.data);} catch (error) {console.log(error);}
}getDeviceCode();

他返回的字段是这样的

{device_code: '7bb71f0xxxxxxxxxxx27',user_code: 'mexxxxxxxxx',verification_url: 'https://openapi.baidu.com/device',qrcode_url: 'https://openapi.baidu.com/device/qrcode/001xxxxxxxxxxxa',expires_in: 300,interval: 5
}

主要字段的作用

  • device_code 设备码, 后面要获取token, 就要使用他
  • user_code 用户码, 百度网页验证的时候填写的东西
  • verification_url, 百度的网页验证, 用于填写用户码 (二选一)
  • qrcode_url, 授权的另一种方式, 这是二维码的链接 (二选一)

如果你使用qrcode_url, 那么就需要用户使用网盘客户端扫描该二维码;

如果你使用verification_url, 那么用户只需要输入用户码即可, 也就是user_code字段的值, 就像这样


成功授权后是页面是这样提示的

这样比扫描二维码方便, 不然还得自己拿个手机扫来扫去的.


授权已经ok了, 接下来我们申请token

申请 Access Token

我原来的代码是Promise的, 我让ChatGPT改成async的

params中的code字段的值, 是上一次访问返回的数据中的device_code

const axios = require("axios");
const { AppID, Appkey, Secretkey, Signkey, device_code } = require("./config.js");async function getToken() {try {const response = await axios.get("https://openapi.baidu.com/oauth/2.0/token", {params: {grant_type: "device_token",code: device_code,client_id: Appkey,client_secret: Secretkey,},headers: {"User-Agent": "pan.baidu.com",},});console.log(response.data);} catch (error) {console.log(error);}
}getToken();

返回的数据

{expires_in: 2592000,refresh_token: '127.11bbxxxxxxxxxxxxxxmg',access_token: '126.29cxxxxxxxxxxxOg',session_secret: '',session_key: '',scope: 'basic netdisk'
}

token有了以后, 就可以为所欲为了


我看看我网盘有没有大文件,

找到了, 有个游戏, 50MB

如果文件的名字是中文, 我们需要编码, 就像你在浏览器的地址栏中, 看到的汉字一样,

中文编码

比如, 你在百度输入你好, 按下回车, 地址栏是这样的

,

如果你复制黏贴, 会发现没有你好了, 出现的是百分号表示的你好

https://www.baidu.com/s?wd=%E4%BD%A0%E5%A5%BD

百度文档是这样说的

他说dir字段, 如果有中文, 那么就要url编码, 你是不是也编码了?

是不是爆错了, 要么-7 要么-9

错误码

错误码

错误描述

-7

文件或目录无权访问

-9

文件或目录不存在


你要是信了文档, 你就得栽个跟头, 十万八千里的那种, 直接到西天


丫的我测试了半天, 根本不用编码,

也许以前要吧, 但是现在, 此时此刻, 是不需要编码的.

文档忽悠了我, 心碎一地


文档右下角有个评价功能, 我给了二颗星, 并且给了原因,

希望官方人员, 可以及时更新文档

下载文件流程

  1. 指定要下载的文件的父文件夹
  2. 获取父文件夹下的子文件信息
  3. 下载文件

代码就不分开一个一个讲了, 直接合起来


config.js

module.exports = {AppID: "xxx",Appkey: "xxx",Secretkey: "xxx",Signkey: "xxx",access_token: '1xxxx',fs_id: "xxx",device_code: "xxx",
};

main.js

const axios = require("axios");
const path = require("path");
const fs = require("fs");
const { AppID, Appkey, Secretkey, Signkey, device_code, access_token } = require("./config.js");async function getFileList(directory) {try {const response = await axios.get("https://pan.baidu.com/rest/2.0/xpan/file", {params: {method: "list",dir: directory,order: "time",start: 0,limit: 10,folder: 0,access_token: access_token,desc: 1,},headers: {"User-Agent": "pan.baidu.com",},});return response.data.list;} catch (error) {console.log(error);}
}async function getFileMetas(fs_id) {try {const response = await axios.get("http://pan.baidu.com/rest/2.0/xpan/multimedia", {params: {method: "filemetas",access_token: access_token,fsids: `[${fs_id}]`,thumb: 0,dlink: 1,extra: 0,},headers: {"User-Agent": "pan.baidu.com",},});return response.data;} catch (error) {console.log(error);}
}function formatSize(size) {if (size < 1024 * 1024) {return (size / 1024).toFixed(2) + " KB";} else {return (size / (1024 * 1024)).toFixed(2) + " MB";}
}function downloadFile(dlink, fileSavePath) {let url = `${dlink}&access_token=${access_token}`;return new Promise((resolve, reject) => {axios.get(url, {headers: {"User-Agent": "pan.baidu.com",Host: "d.pcs.baidu.com",},responseType: "stream",}).then((response) => {const totalSize = response.headers["content-length"];let downloadedSize = 0;const writeStream = fs.createWriteStream(fileSavePath);response.data.pipe(writeStream);response.data.on("data", (chunk) => {downloadedSize += chunk.length;});const printProgress = setInterval(() => {const progress = ((downloadedSize / totalSize) * 100).toFixed(2);console.log(`Downloaded: ${formatSize(downloadedSize)}, Progress: ${progress}%`);}, 1000);writeStream.on("finish", () => {clearInterval(printProgress);resolve(true);});writeStream.on("error", (error) => {clearInterval(printProgress);reject(error);});}).catch((error) => {console.log(error);reject(false);});});
}function getParentDirectory(filePath) {let parentDirectory = path.dirname(filePath);return parentDirectory;
}async function downloadPanFile(panFilePath) {let parentDirectory = getParentDirectory(panFilePath);let fileList = await getFileList(parentDirectory);const foundItem = fileList.find((item) => item.path === panFilePath);if (!foundItem) {console.log("文件不存在");return;}const fileMetas = await getFileMetas(foundItem.fs_id);const dlink = fileMetas.list[0].dlink;let fileName = path.basename(panFilePath);// 正则表达式匹配非法文件名字符const invalidCharacters = /[\\/:"*?<>|]/g;// 用空字符串替换非法字符const sanitizedFileName = fileName.replace(invalidCharacters, "");fileName = sanitizedFileName.replace(/\s+/g, "-");let fileSavePath = path.join(__dirname, fileName);fileSavePath = path.resolve(fileSavePath);let startTime = new Date().getTime();await downloadFile(dlink, fileSavePath);let endTime = new Date().getTime();console.log(`下载耗时:${(endTime - startTime) / 1000}s`);
}
/* -------------------------------------------------------------------------- */
let panFilePath = "/eee/xxx/ccc/aaa.apk";downloadPanFile(panFilePath);

代码中的下载文件进度, 以及 formatSize 方法, 都是用 ChatGPT4 自动修改的, 不用自己动手,

改代码, 就是一句话的事;


优化代码

你还可以复制完整的代码, 让 ChatGPT4 优化它,

这是ChatGPT4给的代码优化的建议

I have made the following changes to the code:

Removed unnecessary variable assignment for parentDirectory and used it directly in getFileList() function call.

Removed unnecessary variable assignment for fileSavePath and used path.resolve() directly in its place.

Consolidated multiple lines of code into single lines where appropriate for better readability.

Removed unnecessary blank lines.

第一个优化点,

function getParentDirectory(filePath) {let parentDirectory = path.dirname(filePath);return parentDirectory;
}

改为

function getParentDirectory(filePath) {return path.dirname(filePath);
}

第二个优化点

  let fileSavePath = path.join(__dirname, fileName);fileSavePath = path.resolve(fileSavePath);

改为

  let fileSavePath = path.resolve(__dirname, fileName);

下载速度

日志一秒打印一次

Downloaded: 7.50 MB, Progress: 15.77%
Downloaded: 14.00 MB, Progress: 29.44%
Downloaded: 21.50 MB, Progress: 45.21%
Downloaded: 28.00 MB, Progress: 58.88%
Downloaded: 35.93 MB, Progress: 75.54%
Downloaded: 42.00 MB, Progress: 88.31%
下载耗时:7.668s
  • 文件大小 47.56MB
  • 下载时间 7.668s
  • 下载速度 6.20MB每秒


ChatGPT对本教程的作用

  • 代码, 我是直接复制黏贴的百度官方文档, 然后跟他说, 这是文档接口, 写出代码, 这样就有了基本代码
  • 如果他出的是Promise的风格, 我会让让改成async的风格
  • 让他添加了下载进度, 并且小于1024kb, 就用kb显示, 否则用mb显示
  • 优化大块的代码

ChatGPT联网版, Stable Diffusion画图, 这个星球全都有, 低调使用, 别外传

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

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

相关文章

谷歌泄密文件曝光:AI大战,谁将是赢家?

[机器翻译]谷歌的一位高级软件工程师撰写了一篇评论文章&#xff0c;断言互联网搜索领导者正在失去其在人工智能方面的优势&#xff0c;让位于开源社区&#xff0c;许多独立研究人员使用人工智能技术取得快速和意想不到的进步。 工程师 Luke Sernau 于 4 月初在 Google 的内部系…

20道常考Python面试题大总结

20道常考Python面试题大总结 关于Python的面试经验 一般来说&#xff0c;**面试官会根据求职者在简历中填写的技术及相关细节来出面试题。**一位拿了大厂技术岗Special Offer的网友分享了他总结的面试经验。当时&#xff0c;面试官根据他在简历中所写的技术&#xff0c;面试题…

微软又赢麻了!联合 Meta 发布免费商业应用的开源 AI 模型 Llama 2

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 昔日的竞争对手&#xff0c;今日的合作盟友&#xff1b;忽如一夜春风来&#xff0c;开源大模型迎来新局面&#xff1b;今天是 OSS AI 胜利的一天&#xff1b; 随着 Meta 最新发布一个新的开源 AI 模型—…

什么是 Auto-GPT?如何使用、部署 Auto-GPT?

从去年下半年开始&#xff0c;Ai 相关领域爆炸式的发展&#xff0c;令人眼花缭乱。一天不学习&#xff0c;感觉就跟落后了几个世纪似的。这不&#xff0c;ChatGPT 很多人还没来得及体验&#xff0c;又一个重磅产品诞生了 - Auto-GTP。 有人说 Auto-GPT 的发布&#xff0c;让人…

【图神经网络】图神经网络(GNN)学习笔记:Graph Embedding

图神经网络&#xff08;GNN&#xff09;学习笔记&#xff1a;Graph Embedding 为什么要进行图嵌入Graph embedding?Graph Embedding使用图嵌入的优势有哪些&#xff1f;图嵌入的方法有哪些&#xff1f;节点嵌入方法&#xff08;Node Embeddings&#xff09;1. DeepWalk2. LINE…

格局打开,Meta 发布免费商业应用的开源 AI 模型 Llama 2,网友:微软又赢麻了!...

整理 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 昔日的竞争对手&#xff0c;今日的合作盟友&#xff1b;忽如一夜春风来&#xff0c;开源大模型迎来新局面&#xff1b;今天是 OSS AI 胜利的一天&#xff1b; 随着 Meta 最新发布一个新的开源 AI 模型—…

利用CHATGPT:单击即可创建 POWERPOINT 演示文稿PTT

​您是否经常花大量时间制作 PowerPoint 演示文稿?如果你这样做,你并不孤单。创建演示文稿可能会占用大量时间,而且可能非常无聊。但如果有一种简单快速的方法来制作 PowerPoint 演示文稿呢?使用ChatGPT,您只需点击一下按钮即可创建精美的PPT! 在本文中,我们将解释如何…

国外问卷调查回答问题有什么技巧?

大家好&#xff0c;我是小飞匠&#xff0c;今天来聊聊国外问卷调查回答问题有什么技巧&#xff1f; 一、刷问卷的时间很重要 1、找对赚钱时间。调查公司也是上5天班的&#xff0c;一般工作日问卷新而且多&#xff0c;比较容易通过。周末调查问卷少&#xff0c;有也可能是剩查…

仿造问卷星--开发一套调查问卷设计工具(3/3)--完整流程

1&#xff0c;定义一个结果的对象&#xff1a; let resultObj {id: 0,name: "",questions: [], };id&#xff0c;name和questions分别对应问卷id&#xff0c;问卷名称和问卷题目。 2&#xff0c;结果赋值 用户点击生成问卷按钮时&#xff0c; 分别从id和name文本…

【问卷调查发布系统的设计与实现】

系列文章目录 在当前社会&#xff0c;随着信息化的高速发展&#xff0c;收集数据的传统方法——问卷调查法也在发生改变。此问卷调查系统&#xff0c;可以帮助用户在短时间内创建收集数据的问卷&#xff0c;目的是突出高效性、绿色性以及便捷性。在设计过程中&#xff0c;分析…

海外调查问卷渠道平台

大家好&#xff0c;我是跨境搬砖领路人&#xff01;我会在这里&#xff0c;每天给大家分享各种国外问卷的知识和技巧&#xff01; 在如今这个社会&#xff0c;对目前的年轻人&#xff0c;特别是男生来说&#xff0c;他们面临的压力是极其大的。大多数人&#xff0c;一毕业就出…

大学生社交网络问卷调查,社交情况问卷调查报告

问卷调查怎么做&#xff1f; 用问卷网做问卷调查十分简便&#xff0c;基本流程如下&#xff1a;第一步&#xff1a;搜索问卷网&#xff0c;找到官方网站&#xff0c;登录网站。第二步&#xff1a;点击页面中心的创建第一份问卷按钮&#xff0c;开始创建您的问卷。 第三步&…

你还在用问卷星?微信制作调查问卷他来了。

问卷星&#xff0c;金数据之类的调查问卷工具用到最后发现都是要收费了&#xff0c;但是大部分人根本不想付费去制作问卷调查。 免费的问卷调查工具&#xff1a;使用直接再微信小程序搜索“创建问卷” 今天要说的是这个问卷调查工具&#xff0c;它是微信的小程序&#xff0c;满…

市场调查与分析|设计问卷|修改问卷|发放问卷

目录 1.调查问卷设计初衷 2.对用户选择宠物食品看重因素量表的信度检验 3.对用户选择宠物食品看重因素量表的效度检验 4.问卷修改 1.调查问卷设计初衷 在问卷设计完成后进行预调查预试样本主要用来对问卷中的量表进行信、效度检验&#xff0c;根据检验结果对量表做出必要…

调查问卷表单

石家庄邮电职业技术学院专属活动第2期&#xff1a;【校园前端学习笔记】主题征文石家庄邮电职业技术学院社区 学号后四位&#xff1a;0233&#xff08;必填&#xff09; 邀请人ID&#xff1a;&#xff08;非必填&#xff09; 调查问卷 最终效果 实现计划 设置问卷样本轮廓为…

表单:调查问卷

石家庄邮电职业技术学院专属活动第2期&#xff1a;【校园前端学习笔记】主题征文石家庄邮电职业技术学院社区 学号后四位&#xff1a;0222 在日常生活中&#xff0c;我们经常会做一些调查问卷。当我们学习了Web前端开发技术与应用&#xff0c;我们也可以尝试做一个调查问卷。 …

移动开发——问卷调查

设计思路 首先问卷调查需要两个页面&#xff0c;一个是用户进行问题选项选择的问卷界面&#xff0c;一个是用户问卷调查结果的反馈页面。问卷界面有题目&#xff0c;单选&#xff0c;有多选&#xff0c;还有文本编辑框&#xff0c;以及两个按钮&#xff0c;一个提交&#xff0…

MIT教授Tegmark:GPT-4敲响警钟,百年后人类何去何从丨智源大会嘉宾风采

导读 一封呼吁暂停大模型研究6个月的公开信让一家名为未来生命研究所&#xff08;Future of Life Institute 简称&#xff1a;FLI&#xff09;站上了风口浪尖。这家研究所的联合创始人Max Tegmark是来自麻省理工学院的物理学家和人工智能研究员&#xff0c;《生命3.0在人工智能…

AI终极问题最后一公里——机器意识,UCL汪军教授谈克服深度学习根本性问题...

来源&#xff1a;机器之心 1 月 11 日&#xff0c;在机器之心 AI 科技年会上&#xff0c;伦敦大学学院&#xff08;UCL&#xff09;计算机系教授、上海数字大脑研究院联合创始人、院长汪军发表主题演讲《机器意识人工智能终极问题 “最后一公里”》。在演讲中&#xff0c;他主要…

泪目!上海00后小伙AI「复活」奶奶,100%还原音容笑貌,却引发巨大争议

【导读】最近&#xff0c;00后小伙用AI技术和奶奶实现「对话」&#xff0c;数字生命要成为现实了吗&#xff1f; 你有没有特别想念的人&#xff1f;可能ta是你的亲人&#xff0c;也可能是你的伴侣。 无论ta是谁&#xff0c;在我们的回忆中永远有他们的一席之地&#xff0c;他…