百度网盘
在windows操作系统当中,当安装了百度网盘之后,BaiduYunCacheFileV0当中会保存百度网盘的所有文件信息以及文件下载上传记录,即时没办法登录百度网盘也能够通过BaiduYunCacheFileV0获取全部信息。以下将展示基于python实现的百度网盘信息获取。
代码实现
下面是对代码的详细解释
获取百度网盘安装目录:
1
   | users_path = os.path.join(self.get_baidu_pan_install_dir(), "users")
   | 
 
这行代码调用 get_baidu_pan_install_dir 方法获取百度网盘的安装目录,并拼接上 “users” 文件夹的路径,得到用户文件夹的路径。
遍历用户文件夹:
1 2 3 4 5
   | for md5 in os.listdir(users_path):     md5_path = os.path.join(users_path, md5)     if not os.path.isdir(md5_path):         continue     for i in os.listdir(md5_path):
   | 
 
这段代码遍历用户文件夹中的每个子文件夹(以 MD5 值命名),并进一步遍历每个子文件夹中的文件和文件夹。
处理用户文件夹:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | if i!= "AutoBackupFileList" and os.path.isdir(os.path.join(md5_path, i)):     source_data = {         "Name": i,         "FilePath": "/{}".format(i),         "ParentPath": "",         "Size": "",         "Md5": "",         "iconMd5": "folder",         "UpdateTime": "",         "User": i     }     user_path = "/{}".format(i)     clean_data = get_line(self, source_data, self.display)     data = json.dumps(clean_data, ensure_ascii=False)     write_file(self.file, data)
   | 
 
这段代码处理用户文件夹,如果文件夹名不是 “AutoBackupFileList”,则创建一个包含文件夹信息的 source_data 字典,并将其写入到输出文件中。
判断数据库文件是否存在:
1 2 3
   | all_file_db = os.path.join(md5_path, "BaiduYunCacheFileV0.db") if not os.path.exists(all_file_db):     break
   | 
 
这段代码检查每个用户文件夹中是否存在名为 “BaiduYunCacheFileV0.db” 的数据库文件,如果不存在,则跳过该用户文件夹。
读取数据库文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
   | try:     conn = sqlite3.connect(all_file_db)     conn.row_factory = self.dict_factory     cursor = conn.cursor()          for item in cursor.execute("select * from cache_file"):         parent_path = item.get("parent_path")         server_filename = item.get("server_filename")         try:             iconMd5 = server_filename.split(".", maxsplit=1)[1]         except:             iconMd5 = "folder"         source_data = {             "Name": server_filename,             "FilePath": user_path + os.path.join(parent_path, server_filename),             "ParentPath": user_path + parent_path[:-1:],             "Size": item.get("file_size"),             "Md5": item.get("md5"),             "iconMd5": iconMd5,             "ServerMtime": item.get("server_mtime"),             "LocalMtime": item.get("local_mtime"),             "User": i         }         clean_data = get_line(self, source_data, self.display)         data = json.dumps(clean_data, ensure_ascii=False)         write_file(self.file, data) except Exception as e:     setting.log.error(e)     break
   | 
 
这段代码尝试连接到数据库文件,并读取其中的 “cache_file” 表中的所有数据。对于每一条数据,它创建一个包含文件信息的 source_data 字典,并将其写入到输出文件中。如果在处理过程中遇到异常,它会记录错误信息并跳过当前用户文件夹。