Nodejs实现的一个百度网盘命令行工具
Nodejs实现的一个百度网盘命令行工具
还不是很成熟,使用之前需要到 http://demoapi.duapp.com/wiki/index.php 授权一下 =.=
安装 npm install -g baohe
使用 baohe use baidu
会提示输入用户密码
然后 baohe cp /path/to/your/file
接着 baohe ls
就能看到已经上传到网盘的文件
打开 pan.baidu.com 可以在 我的应用数据 > 测试应用
里面找到上传文件
Nodejs 实现的一个百度网盘命令行工具
摘要
本文将介绍如何使用 Node.js 开发一个简单的百度网盘命令行工具。通过这个工具,你可以方便地进行文件的上传、下载、查看等操作。
准备工作
在开始之前,你需要先到 百度云开放平台 进行授权并获取 API Key 和 Secret Key。这些信息将会用于身份验证和调用百度网盘 API。
安装
首先,确保你已经安装了 Node.js 和 npm(Node 包管理器)。然后可以通过以下命令全局安装该工具:
npm install -g baohe
使用说明
安装完成后,你可以使用以下命令来初始化并登录:
baohe use baidu
系统会提示你输入从百度云开放平台获取的用户名和密码。输入后,你就可以开始使用命令行工具进行操作了。
文件上传
上传本地文件到百度网盘:
baohe cp /path/to/your/file
查看文件列表
查看当前百度网盘中的文件列表:
baohe ls
示例代码
下面是一个简化的示例代码片段,展示如何使用 Node.js 调用百度网盘 API 进行文件上传和列表查询:
const axios = require('axios');
const fs = require('fs');
// 获取 API Key 和 Secret Key
const apiKey = 'YOUR_API_KEY';
const secretKey = 'YOUR_SECRET_KEY';
// 百度网盘 API 的基础 URL
const baseUrl = 'https://pan.baidu.com/rest/2.0/xpan/file';
// 文件上传函数
async function uploadFile(filePath) {
const fileData = fs.readFileSync(filePath);
const formData = new FormData();
formData.append('file', fileData, filePath);
try {
const response = await axios.post(`${baseUrl}?method=upload`, formData, {
headers: formData.getHeaders(),
params: {
access_token: 'YOUR_ACCESS_TOKEN',
},
});
console.log('Upload successful:', response.data);
} catch (error) {
console.error('Error uploading file:', error.response ? error.response.data : error.message);
}
}
// 文件列表查询函数
async function listFiles() {
try {
const response = await axios.get(`${baseUrl}?method=list`, {
params: {
access_token: 'YOUR_ACCESS_TOKEN',
},
});
console.log('File list:', response.data);
} catch (error) {
console.error('Error listing files:', error.response ? error.response.data : error.message);
}
}
// 示例调用
uploadFile('/path/to/your/file');
listFiles();
总结
以上代码展示了如何使用 Node.js 实现一个简单的百度网盘命令行工具。通过调用百度网盘 API,我们可以轻松地完成文件上传和列表查询等功能。希望这个示例能够帮助你快速上手开发自己的命令行工具。
这个帖子描述了一个用 Node.js 实现的百度网盘命令行工具。为了实现这个工具,你需要通过百度开放平台获取相应的 API Key 和 Secret Key,并且对这些密钥进行授权以便于你的应用程序能够访问百度网盘的 API。
示例代码
首先,你需要一个基本的框架来处理百度网盘的 API 调用。这里提供一个简单的示例,展示如何使用 request
库来上传文件到百度网盘:
const request = require('request');
const fs = require('fs');
const qs = require('querystring');
// 你的百度网盘的API key和secret key
const ACCESS_TOKEN_URL = 'https://openapi.baidu.com/oauth/2.0/token';
const UPLOAD_URL = 'https://c.pcs.baidu.com/rest/2.0/pcs/file';
function getAccessToken(client_id, client_secret) {
return new Promise((resolve, reject) => {
request.post({
url: ACCESS_TOKEN_URL,
form: {
grant_type: 'client_credentials',
client_id: client_id,
client_secret: client_secret
}
}, (error, response, body) => {
if (!error && response.statusCode === 200) {
resolve(JSON.parse(body).access_token);
} else {
reject(error);
}
});
});
}
async function uploadFile(filePath, accessToken) {
const formData = {
method: 'upload',
path: '/test/' + filePath.split('/').pop(),
access_token: accessToken
};
const fileStream = fs.createReadStream(filePath);
const requestOptions = {
uri: UPLOAD_URL,
method: 'POST',
formData: formData,
headers: {
'Content-Type': 'multipart/form-data'
},
formData: {
file: fileStream
}
};
return new Promise((resolve, reject) => {
request(requestOptions, (err, res, body) => {
if (err) {
reject(err);
} else {
resolve(body);
}
});
});
}
(async () => {
try {
const accessToken = await getAccessToken('YOUR_CLIENT_ID', 'YOUR_CLIENT_SECRET');
const result = await uploadFile('/path/to/your/file', accessToken);
console.log(result);
} catch (error) {
console.error(error);
}
})();
解释
- getAccessToken: 这个函数负责通过百度的 OAuth 2.0 获取访问令牌。
- uploadFile: 这个函数用于上传文件到百度网盘。它接受文件路径和访问令牌作为参数,并使用百度网盘的 API 来执行文件上传操作。
- 主程序: 在主程序中,我们首先获取访问令牌,然后调用
uploadFile
函数来上传文件。
使用方法
- 安装依赖项:
npm install request
- 替换
'YOUR_CLIENT_ID'
和'YOUR_CLIENT_SECRET'
为从百度开放平台获得的实际值。 - 运行脚本:
node script.js
以上代码仅供参考,实际部署时可能需要根据具体需求进行调整。