本文来源吾爱破解论坛
本帖最后由 天空宫阙 于 2019-12-22 21:09 编辑 登录信息配置.jpg (32.08 KB, 下载次数: 1)
下载附件
保存到相册
BDTOKEN.jpg (79.36 KB, 下载次数: 1)
下载附件
保存到相册
COOKIE.jpg (110.55 KB, 下载次数: 2)
下载附件
保存到相册
dir位置.jpg (19.31 KB, 下载次数: 1)
下载附件
保存到相册
百度网盘文件批量重命名脚本
1.使用cookie登录
2.支持递归到最深一层文件夹,重命名文件夹中文件,但不重名文件夹
3.使用正则表达式,随心所欲重命名
登录信息配置
BDTOKEN可在请求的params中找到
COOKIE可在请求的headers中找到
dir为操作文件的目录,谨慎设置为根目录,否则后果自负例如dir = '%2F我的资源%2F烦人xiu仙转(大灰狼)[1631回]32Kbps'可在地址栏path='''找到,同时支持urldecode后的
如dir = '/六级真题/2018年12月CET6/第二套'
PATTERN和REPLACE分别为要替换的字符和替换成的字符pattern支持正则表达式
完整代码
[Python] 纯文本查看 复制代码
# [Callback] 百度网盘errno错误代码汇总对照表 https://blog.leiyun.org/mix/baiduerrno.html import requests import json import time import re import urllib.parse # 配置信息 # 操作的百度云目录 dir = '%2F我的资源%2F烦人xiu仙转(大灰狼)[1631回]32Kbps' # # 是否urlencode都可以 # dir = '/六级真题/2018年12月CET6/第二套' # BDTOKEN可在请求的params中找到 BDTOKEN = '' # COOKIE可在请求的headers中找到 COOKIE = '' # PATTERN和REPLACE分别为要替换的字符和替换成的字符 PATTERN = '烦人xiu仙转' 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 <=try_max: time.sleep(5) baiduyun_rename(rename_list) else: print('[error] : 批量处理错误且达到最大重试上限') else: print(response.json()) else: pass # print('[error] : rename_list is empty') def rename_file_in_dir(dir,renameDirChildren=True): """ 调用函数list_name_desc(dir)查询 调用函数baiduyun_rename(rename_list)重命名 renameDirChildren=True 如果为文件夹将会迭代,即按相同的规则重命名文件夹中的文件 """ file_info_list = list_name_desc(dir) rename_list = [] for each in file_info_list: if each['isdir'] == 0: rename_dict = { 'path': each['path'], 'newname':create_new_name(old_name=each['server_filename'],pattern=PATTERN,replace=REPLACE) , } rename_list.append(rename_dict) if renameDirChildren and each['isdir'] == 1 and each['dir_empty'] ==0: time.sleep(2) rename_file_in_dir(each['path'],renameDirChildren=True) baiduyun_rename(rename_list) def create_new_name(old_name,prefix=None,extension_name=None,pattern=None,replace=None): # old_name必要参数 # prefix 用于添加前缀 # extension_name 用于改扩展名 # pattern和replace 用于正则替换 ''' old_name = 'mytest.doc' # 添加前缀test newname1 = create_new_name(old_name,prefix='test') # 改扩展名为pdf newname1 = create_new_name(old_name,extension_name='pdf') # 正则替换 test 改为 aemon newname2 = create_new_name(old_name,pattern='test',replace='aemon') ''' new_name = '' if old_name: if prefix: new_name = prefix + old_name elif extension_name: new_name = old_name[:-3] + extension_name elif pattern: new_name = re.sub(pattern,replace,old_name,re.S) if not new_name =='': return new_name else: raise Exception('create_new_name error') else: raise Exception('old_name 缺失') if __name__ == "__main__": # for file in list_name_desc(dir): # print(file) # renameDirChildren=True 如果为文件夹将会迭代,即按相同的规则重命名文件夹中的文件 rename_file_in_dir(dir,renameDirChildren=True)
py文件下载地址 :https://www.lanzous.com/i87lhbe
练手之作就不封装了,必定有许多不完善的地方,欢迎大佬指点其实这个功能已经有人做过软件了(更加简单易用),这次用python写一遍算是练习吧
百度云的文件管理api和文件查询apihttps://pan.baidu.com/api/filemanagerhttps://pan.baidu.com/api/list做的不错,返回了内容也比较人性化并且验证的信息不多,本来logid我已经从js中扣出来了发现没有也行。另外https://pan.baidu.com/api/filemanager也可以用来批量删除文件,没有这样的需求就没有写
看在我注释写这么详细的份上,免费评下分鼓励一下吧
最后感谢这位大佬的文章 [Callback] 百度网盘errno错误代码汇总对照表 https://blog.leiyun.org/mix/baiduerrno.html
效果
效果.jpg (131.36 KB, 下载次数: 1)
下载附件 保存到相册
版权声明:
本站所有资源均为站长或网友整理自互联网或站长购买自互联网,站长无法分辨资源版权出自何处,所以不承担任何版权以及其他问题带来的法律责任,如有侵权或者其他问题请联系站长删除!站长QQ754403226 谢谢。
- 上一篇: 笔趣阁小说下载
- 下一篇: Python实现markdown文件批量转换为word