BaiduPCS API & App 百度网盘客户端

Overview

BaiduPCS-Py

PyPI version Build

A BaiduPCS API and An App

BaiduPCS-Py 是百度网盘 pcs 的非官方 api 和一个命令行运用程序。

也是 https://github.com/PeterDing/iScript/blob/master/pan.baidu.com.py 的重构版。

安装

需要 Python 版本大于或等于 3.7

pip3 install BaiduPCS-Py

API

BaiduPCS-Py 的百度网盘 API 只依赖 requests,方便用户开发自己的运用。

from baidupcs_py.baidupcs import BaiduPCSApi

api = BaiduPCSApi(bduss=bduss, cookies=cookies)

用法

BaiduPCS-Py --help

命令别名

可以用下面的命令别名代替原来的命令名。

别名 原名
w who
uu updateuser
su su
ul userlist
ua useradd
ek encryptkey
ud userdel
l ls
f search
md mkdir
mv move
rn rename
cp copy
rm remove
d download
p play
u upload
sn sync
S share
sl shared
cs cancelshared
s save
a add
t tasks
ct cleartasks
cct canceltasks
sv server

添加用户

BaiduPCS-Py 目前不支持用帐号登录。需要使用者在 pan.baidu.com 登录后获取 cookies 和其中的 bduss 值,并用命令 useradd 为 BaiduPCS-Py 添加一个用户。

使用者可以用下面的方式获取用户的 cookies 和 bduss 值。

  1. 登录 pan.baidu.com
  2. 打开浏览器的开发者工具(如 Chrome DevTools)。
  3. 然后选择开发者工具的 Network 面板。
  4. 在登录后的页面中任意点开一个文件夹。
  5. 在 Network 面板中找到 list?.... 一行,然后在右侧的 Headers 部分找到 Cookie: 所在行,复制 Cookie: 后的所有内容作为 cookies 值,其中的 BDUSS=...;... (没有最后的字符;)作为 bduss 值。

cookies

现在找到了 cookies 和 bduss 值,我们可以用下面的命令添加一个用户。

交互添加:

BaiduPCS-Py useradd

或者直接添加:

BaiduPCS-Py useradd --cookies "cookies 值" --bduss "bduss 值"

你也可以只添加 bduss,省去 cookies (或 cookies 中没有 STOKEN 值),但这会让你无发使用 sharesave 命令来转存其他用法的分享文件。

BaiduPCS-Py 支持多用户,你只需一直用 useradd 来添加用户即可。

设置文件加密密钥和盐

BaiduPCS-Py 支持“无感的”文件加密。

BaiduPCS-Py 可以加密上传文件,在下载的时候自动解密,让使用者感觉不到加密解密的过程。

如果使用者需要将保密文件上传至百度网盘保存,可以使用这个方法。即使帐号被盗,攻击者也无法还原文件内容。

BaiduPCS-Py 支持以下加密方法:

  • Simple 一种简单的加密算法。根据密钥生成一个字节对照表来加密解密文件。 速度快,但不安全,不建议加密重要文件。 因为这种算法加解密不需要知道上下文信息,所以,下载时支持分段下载,如果是媒体文件则支持拖动播放。 推荐用于加密不重要的媒体文件。
  • ChaCha20 工业级加密算法,速度快,推荐用于加密重要文件。不支持分段下载。
  • AES265CBC 工业级加密算法,推荐用于加密重要文件。不支持分段下载。

注意:用命令 encryptkey 设置的密钥和盐只是为当前用户的。

为当前用户设置加密密钥和盐:

交互添加:

BaiduPCS-Py encryptkey

或者直接添加:

BaiduPCS-Py encryptkey --encrypt-key 'my-encrypt-key' --salt 'some-salt'

上传并加密文件:

上传和同步文件时只需要指定加密算法就可。如果不指定就不加密。

# 默认使用上面设置的 `encrypt-key`
BaiduPCS-Py upload some-file.mp4 some-dir/ /to/here --encrypt-type AES265CBC

下载并用上面设置的 encrypt-key 自动解密文件:

BaiduPCS-Py download /to/here/some-file.mp4 /to/here/some-dir/

也可以使用临时的 encrypt-key

BaiduPCS-Py upload some-file.mp4 some-dir/ /to/here --encrypt-type Simple --encrypt-key 'onlyyou'

但在使用临时的 encrypt-key 后,cat、下载和播放这些文件时需要指定 encrypt-key,但不需要指定加密算法,程序会自动检查加密算法:

# 下载
BaiduPCS-Py download /to/here/some-file.mp4 /to/here/some-dir/  --encrypt-key 'onlyyou'

# 开启本地服务并播放
BaiduPCS-Py play /to/here/some-file.mp4 --encrypt-key 'onlyyou' --use-local-server

显示当前用户的密钥和盐:

BaiduPCS-Py who --show-encrypt-key

BaiduPCS-Py 下载时默认会解密文件,如果想要下载但不解密文件,需要加 --no-decrypt

BaiduPCS-Py download some-file --no-decrypt

显示当前用户的信息

BaiduPCS-Py who

或者:

BaiduPCS-Py who user_id

指明显示用户 id 为 user_id 的用户信息。

选项

Option Description
-K, --show-encrypt-key 显示加密密钥

更新用户信息

默认更新当前用户信息。

BaiduPCS-Py updateuser

也可指定多个 user_id

BaiduPCS-Py updateuser user_id

显示所有用户

BaiduPCS-Py userlist

切换当前用户

BaiduPCS-Py su

删除一个用户

BaiduPCS-Py userdel

文件操作

BaiduPCS-Py 操作网盘中的文件可以使用文件的绝对路径或相对路径(相对与当前目录 pwd)。

每一个用户都有自己的当前工作目录(pwd),默认为 / 根目录。

使用者可以用 cd 命令来切换当前的工作目录(pwd)。

下面所有涉及网盘路径的命令,其中如果网盘路径用的是相对路径,那么是相对于当前工作目录(pwd)的。 如果是网盘路径用的是绝对路径,那么就是这个绝对路径。

显示当前工作目录

BaiduPCS-Py pwd

切换当前工作目录

切换到绝对路径:

BaiduPCS-Py cd /to/some/path

切换到相对路径:

# 切换到 (pwd)/../path
BaiduPCS-Py cd ../path

列出网盘路径下的文件

BaiduPCS-Py ls [OPTIONS] [REMOTEPATHS]...

BaiduPCS-Py ls /absolute/path

# or
BaiduPCS-Py ls relative/path

选项

Option Description
-r, --desc 逆序排列文件
-n, --name 依名字排序
-t, --time 依时间排序
-s, --size 依文件大小排序
-R, --recursive 递归列出文件
-I, --include TEXT 筛选包含这个字符串的文件
--include-regex, --IR TEXT 筛选包含这个正则表达式的文件
-E, --exclude TEXT 筛选 包含这个字符串的文件
--exclude-regex, --ER TEXT 筛选 包含这个正则表达式的文件
-f, --is-file 筛选 目录文件
-d, --is-dir 筛选目录文件
--no-highlight, --NH 取消匹配高亮
-S, --show-size 显示文件大小
-D, --show-date 显示文件创建时间
-M, --show-md5 显示文件 md5
-A, --show-absolute-path 显示文件绝对路径

搜索文件

搜索包含 keyword 的文件

BaiduPCS-Py search [OPTIONS] KEYWORD [REMOTEDIR]

# 在当前工作目录中搜索
BaiduPCS-Py search keyword

# or
BaiduPCS-Py search keyword /absolute/path

# or
BaiduPCS-Py search keyword relative/path

选项

Option Description
-R, --recursive 递归搜索文件
-I, --include TEXT 筛选包含这个字符串的文件
--include-regex, --IR TEXT 筛选包含这个正则表达式的文件
-E, --exclude TEXT 筛选 包含这个字符串的文件
--exclude-regex, --ER TEXT 筛选 包含这个正则表达式的文件
-f, --is-file 筛选 目录文件
-d, --is-dir 筛选目录文件
--no-highlight, --NH 取消匹配高亮
-S, --show-size 显示文件大小
-D, --show-date 显示文件创建时间
-M, --show-md5 显示文件 md5

显示文件内容

BaiduPCS-Py cat [OPTIONS] REMOTEPATH

选项

Option Description
-e, --encoding TEXT 文件编码,默认自动解码
--no-decrypt, --ND 不解密
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的

创建目录

BaiduPCS-Py mkdir [OPTIONS] [REMOTEDIRS]...

选项

Option Description
-S, --show 显示目录

移动文件

移动一些文件到一个目录中。

BaiduPCS-Py move [OPTIONS] [REMOTEPATHS]... REMOTEDIR

选项

Option Description
-S, --show 显示结果

文件重命名

BaiduPCS-Py rename [OPTIONS] SOURCE DEST

选项

Option Description
-S, --show 显示结果

拷贝文件

拷贝一些文件到一个目录中。

BaiduPCS-Py move [OPTIONS] [REMOTEPATHS]... REMOTEDIR

选项

Option Description
-S, --show 显示结果

删除文件

BaiduPCS-Py remove [OPTIONS] [REMOTEPATHS]...

下载文件

BaiduPCS-Py download [OPTIONS] [REMOTEPATHS]...

选项

Option Description
-o, --outdir TEXT 指定下载本地目录,默认为当前目录
-R, --recursive 递归下载
-f, --from-index INTEGER 从所有目录中的第几个文件开始下载,默认为 0(第一个)
-I, --include TEXT 筛选包含这个字符串的文件
--include-regex, --IR TEXT 筛选包含这个正则表达式的文件
-E, --exclude TEXT 筛选 不 包含这个字符串的文件
--exclude-regex, --ER TEXT 筛选 不 包含这个正则表达式的文件
-s, --concurrency INTEGER 下载同步链接数,默认为 5。数子越大下载速度越快,但是容易被百度封锁
-k, --chunk-size TEXT 同步链接分块大小
-q, --quiet 取消第三方下载应用输出
--out-cmd, --OC 输出第三方下载应用命令
-d, --downloader [ me | aget_py | aget_rs | aria2 ] 指定下载应用

默认为 me (BaiduPCS-Py 自己的下载器,支持断续下载)
me 使用多文件并发下载。

除 me 外,其他下载器,不使用多文件并发下载,使用一个文件多链接下载。
如果需要下载多个小文件推荐使用 me,如果需要下载少量大文件推荐使用其他下载器。对于 SVIP 用户,用那个下载器都很快。

aget_py (https://github.com/PeterDing/aget) 默认安装
aget_rs (下载 https://github.com/PeterDing/aget-rs/releases)
aria2 (下载 https://github.com/aria2/aria2/releases)
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的

播放媒体文件

BaiduPCS-Py play [OPTIONS] [REMOTEPATHS]...

注意: 大于 100MB 的媒体文件无法直接播放,需要加 -s 使用本地服务器播放。

选项

Option Description
-R, --recursive 递归播放
-f, --from-index INTEGER 从所有目录中的第几个文件开始播放,默认为 0(第一个)
-I, --include TEXT 筛选包含这个字符串的文件
--include-regex, --IR TEXT 筛选包含这个正则表达式的文件
-E, --exclude TEXT 筛选 不 包含这个字符串的文件
--exclude-regex, --ER TEXT 筛选 不 包含这个正则表达式的文件
--player-params, --PP TEXT 第三方播放器参数
-m, --m3u8 获取 m3u8 文件并播放
-q, --quiet 取消第三方播放器输出
--shuffle, --sf 随机播放
--out-cmd, --OC 输出第三方播放器命令
-p, --player [mpv] 指定第三方播放器

默认为 mpv (https://mpv.io)
-s, --use-local-server 使用本地服务器播放。大于 100MB 的媒体文件无法直接播放,需要使用本地服务器播放
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的

上传文件

上传一些本地文件或目录到网盘目录。

上传过程中,按 “p” 可以暂停或继续上传。

BaiduPCS-Py upload [OPTIONS] [LOCALPATHS]... REMOTEDIR

选项

Option Description
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的
-e, --encrypt-type [No | Simple | ChaCha20 | AES265CBC] 文件加密方法,默认为 No 不加密
-w, --max-workers INTEGER 同时上传文件数
--no-ignore-existing, --NI 上传已经存在的文件
--no-show-progress, --NP 不显示上传进度

同步本地目录到远端

同步本地目录到远端。

如果本地文件 md5 和远端不同则上传文件。对于本地不存在的文件但远端存在则删除远端文件。

BaiduPCS-Py sync [OPTIONS] LOCALDIR REMOTEDIR

选项

Option Description
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的
-e, --encrypt-type [No | Simple | ChaCha20 | AES265CBC] 文件加密方法,默认为 No 不加密
-w, --max-workers INTEGER 同时上传文件数
--no-show-progress, --NP 不显示上传进度

分享文件

注意:使用这个命令需要 cookies 中含有 STOKEN 值。

BaiduPCS-Py share [OPTIONS] [REMOTEPATHS]...

选项

Option Description
-p, --password TEXT 设置秘密,4 个字符。默认没有秘密

列出分享链接

BaiduPCS-Py shared

选项

Option Description
-S, --show-all 显示所有分享的链接,默认只显示有效的分享链接

取消分享链接

BaiduPCS-Py cancelshared [OPTIONS] [SHARE_IDS]...

保存其他用户分享的链接

注意:使用这个命令需要 cookies 中含有 STOKEN 值。

保存其他用户分享的链接到远端目录。

BaiduPCS-Py save [OPTIONS] SHARED_URL REMOTEDIR

选项

Option Description
-p, --password TEXT 链接密码,如果没有不用设置
--no-show-vcode, --NV 不显示验证码,如果需要验证码则报错

添加离线下载任务

BaiduPCS-Py add [TASK_URLS]... REMOTEDIR

列出离线下载任务

# 列出所有离线下载任务
BaiduPCS-Py tasks

# 也可列出给定id的任务。
BaiduPCS-Py tasks [TASK_IDS]...

清除已经下载完和下载失败的任务

BaiduPCS-Py cleartasks

取消下载任务

BaiduPCS-Py canceltasks [TASK_IDS]...

删除所有离线下载任务

BaiduPCS-Py purgetasks

选项

Option Description
--yes 确定直接运行

开启 HTTP 服务

在远端 ROOT_DIR 目录下开启 HTTP 服务。

ROOT_DIR 默认为 /

BaiduPCS-Py BaiduPCS-Py server [OPTIONS] [ROOT_DIR]

如果需要设置认证,使用下面的选项设置用户名和密钥:

BaiduPCS-Py BaiduPCS-Py server [ROOT_DIR] --username 'foo' --password 'bar'

选项

Option Description
-h, --host TEXT 监听 host
-p, --port INTEGER 监听 port
-w, --workers INTEGER 进程数
--encrypt-key, --ek TEXT 加密密钥,默认使用用户设置的
--username TEXT HTTP Basic Auth 用户名
--password TEXT HTTP Basic Auth 密钥
Owner
Peter Ding
Peter Ding
API Basica per a synologys Active Backup For Buissiness

Synology Active Backup for Business API-NPP Informació Per executar el programa

Nil Pujol 0 May 13, 2022
Bitcoin-chance-wheel - Try your luck at getting bitcoins

Program Features - ✍️ Why did we name this tool the Lucky Wheel? - ✍️ This tool

hack4lx 20 Dec 22, 2022
ANKIT-OS/STYLISH-TEXT is a special repository. Its Is A Telegram Bot Which Can Translate Your Text Into 100+ Language

🔥 ᴳᴼᴼᴳᴸᴱ⁻ᵀᴿᴬᴺᔆᴸᴬᵀᴱᴿ 🔥 The owner would not be responsible for any kind of bans due to the bot. • ⚡ INSTALLING ⚡ • • 🛠️ Lᴀɴɢᴜᴀɢᴇs Aɴᴅ Tᴏᴏʟs 🔰 • If

ANKIT KUMAR 1 Dec 23, 2021
Retrieve information from DBLP and update BibTex files automatically

Rebib TLDR: This script retrieves information from DBLP to update your BibTex files. python rebib.py --bibfile xxx.bib It first parses the bib entries

Shangtong Zhang 49 Jan 01, 2023
An iCal file to transport you to a new place every day until you die

everydayvirtualvacation An iCal file to transport you to a new place every day until you die The library is closed 😔 😔 including a video of the plac

Jacob Chapman 33 Apr 19, 2022
a script to bulk check usernames on multiple site. includes proxy & threading support.

linked-bulk-checker bulk checks username availability on multiple sites info people have been selling these so i just made one to release dm my discor

krul 9 Sep 20, 2021
Zendesk Ticket Viewer is a lightweight commandline client for fetching and displaying tickets from a Zendesk account provided by the user

Zendesk Ticket Viewer is a lightweight commandline client for fetching and displaying tickets from a Zendesk account provided by the user.

Parthesh Soni 1 Jan 24, 2022
An attempt to make a bot that can auto-archive Danganronpa KG RPs on Discord.

Danganronpa Killing Game Archiving Bot An attempt to make a bot that can auto-archive Danganronpa KG RPs on Discord. The final format is meant to look

Astrea 1 Nov 30, 2021
Hostapd-mac-monitor - Setup a hostapd AP to conntrol the connections of specific MACs

A brief explanation This script provides way to setup a monitoring service of sp

2 Feb 03, 2022
CryptoBar - A simple MenuBar app that shows the price of 3 cryptocurrencies

CryptoBar A very simple MenuBar app that shows the price of the following crypto

4 Jul 04, 2022
A Python API wrapper for the Twitter API!

PyTweet PyTweet is an api wrapper made for twitter using twitter's api version 2! Installation Windows py3 -m pip install PyTweet Linux python -m pip

TheFarGG 1 Nov 19, 2022
Набор утилит для Discord с использованием языка программирования Python.

Discord Tools v0.1 Functions: WebHook spamer Spotify account generator (What?) QR Code Token stealer Token generator Discord nitro gen/check Discor to

Максим Скризов 3 Aug 23, 2022
Texting service to receive current air quality conditions and maps, powered by AirNow, Twilio, and AWS

The Air Quality Bot is generally available by texting a zip code (and optionally the word "map") to (415) 212-4229. The bot will respond with the late

Alex Laird 8 Oct 16, 2022
Um simples bot escrito em Python usando a lib pyTelegramBotAPI

Telegram Bot Python Um simples bot escrito em Python usando a lib pyTelegramBotAPI Instalação Windows: Download do Python 3 Aqui Download do ZIP do Có

Sr_Yuu 1 May 07, 2022
PR Changes Matrix Builder

Pr-changes-matrix-builder - A Github Action that will output a variable to be used in a matrix strategy job based on a PR&'s changes

Kyle James Walker (he/him) 21 Oct 04, 2022
Repo-cloner - Script takes user public liked repos and clone it to a local folder

Liked repos cloner Script takes user public liked repos and clone it to a local

Aleksei 2 Jun 18, 2022
Fast IP address lookup

ipscoop Fast IP Scoop Table of Contents Installation CLI Getting Started Ref Installation To install ipscoop, simply: $ python3 -m pip install -U git+

6 Mar 16, 2022
Script for polybar to display and control media(not only Spotify) using DBus.

polybar-now-playing Script for polybar to display and control media(not only Spotify) using DBus Python script to display and control current playing

Dope Wizard 48 Dec 31, 2022
AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications

AWS Serverless Application Model (AWS SAM) The AWS Serverless Application Model (SAM) is an open-source framework for building serverless applications

Amazon Web Services 8.9k Dec 31, 2022
An async python wrapper to interact with the Steam API and its CMs

steam.py A modern, easy to use, and async ready package to interact with the Steam API. Heavily inspired by discord.py and borrowing functionality fro

James Hilton-Balfe 90 Dec 15, 2022