1、用户需要修改代码中以下变量的值:
(1)dir:dir为百度网盘的目录结构,例如:“%2F自学课%2FVue%2F资料”,可以在路径中path参数的值获取。如下图所示。 (2)BDTOKEN :在百度网盘的根目录处点击F12打开检查窗口,选择Network,再选择XHR,点击刷新,找到下图③所示的文件,点击后,在右侧header选项卡中出现的信息找到Param,就可以找到bdstoken的值。 (3)COOKIE :和上文的BDTOKEN 找的方式相同,在此只附一张图片: (4)PATTERN :要被替换的内容,比如说:PATTERN =“考研”,意思是,把所有dir目录下的文件的文件名中“考研”两字会被REPLACE 的内容所替换,此变量支持使用正则表达式。 (5)REPLACE :替换为的内容,比如说:REPLACE =“我能行”,意思是,把所有dir目录下的文件的文件名中PATTERN 内容会被替换为 “我能行”。
2、代码:
import requests
import json
import time
import re
import urllib.parse
# 配置信息
# 操作的百度云目录
dir = ''
# # 是否urlencode都可以
# dir = '/六级真题/2018年12月CET6/第二套'
# BDTOKEN可在请求的params中找到
BDTOKEN = ''
# COOKIE可在请求的headers中找到
COOKIE = ''
# PATTERN和REPLACE分别为要替换的字符和替换成的字符
PATTERN = '考研'
REPLACE = '我能行'
headers = {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
'Cookie': COOKIE,
'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36',
}
def list_name_desc(dir):
"""
查询指定dir的文件,以列表方式返回文件信息
input - dir
return - file_info_list
"""
dir = urllib.parse.unquote(dir)
apilist_url = 'https://pan.baidu.com/api/list'
params = {
'dir': dir,
}
response = requests.get(apilist_url, params=params, headers=headers)
response.raise_for_status()
if response.json()['errno'] == 0:
file_list = response.json()['list']
file_info_list = []
for file in file_list:
server_filename = file['server_filename']
isdir = file['isdir']
path = file['path']
if 'dir_empty' in file.keys():
dir_empty = file['dir_empty']
else:
dir_empty = 0
each_file_info = {
'server_filename': server_filename,
'isdir': isdir,
'path': path,
'dir_empty': dir_empty
}
file_info_list.append(each_file_info)
return file_info_list
def baiduyun_rename(rename_list):
'''
按rename_list向接口https://pan.baidu.com/api/filemanager发送重命名请求
input - rename_list
print - result
rename_list格式[{"path":PATH,"newname":NEWNAME},{"path":PATH,"newname":NEWNAME},]
特别注意用rename_list构造post请求的data时,rename_list需要json.dumps转成字符串
'''
try_max = 5
try_count = 0
params = {
'opera': 'rename',
'async': '2',
'onnest': 'fail',
'channel': 'chunlei',
'web': '1',
'app_id': '250528',
'bdstoken': BDTOKEN,
# 'logid':get_logid() ,
'clienttype': '0',
}
if not rename_list == []:
# ensure_ascii=False 加不加都可以,但key "filelist" 对应的 value 必须用json.dumps()转成字符串类型
data = {"filelist": json.dumps(rename_list, ensure_ascii=False)}
url = 'https://pan.baidu.com/api/filemanager'
response = requests.post(url, params=params, data=data, headers=headers)
response.raise_for_status()
errno = response.json()['errno']
if errno == 0:
print('[info] : rename successfully!')
elif errno == 12:
print('[warning]: 批量处理错误,5s后重试')
try_count += 1
if try_count |