我目前正在开发一个可以在Google云端硬盘中获取文件/文件夹路径的小程序(例如:' MyDrive / Folder1 / Folder2 / Folder3'),并对其进行一些操作(列表,上传,下载,复制等。)
文件夹路径是用户输入的字符串(一个用户,也就是我)。
根据Google Drive API的规定,大多数操作都需要文件/文件夹ID,因此在给定用户的文件路径时,我需要找出文件/文件夹ID。我想要的是一种有效的方法来查找文件/ folderID。注意:在Google云端硬盘中,每个文件都有1个ID(字符串)和1个标题(例如:' folder3',' folder1')。 ID是唯一的。每个文件还有一个父母的名单。
由于调用Google Drive API需要花费大量时间,因此我尝试限制API调用的数量。
现在,在我接受用户输入之前,(1)我调用service.files()。list(),它返回我的Google云端硬盘中所有文件的列表。 (2)循环遍历列表以构造3个字典:FileName-FileID,FileID-FileName,FileID-Parents。
鉴于用户输入:' MyDrive / Folder1 / Folder2',我可以: (1)查找' Folder2'的ID,然后查找其父母的ID。 (2)查找' Folder1'的ID,然后查找其父母的ID。检查" Folder1"的ID是否在' Folder2'的ParentsID中。 (3)查找MyDrive'的ID。检查MyDrive的ID是否在' Folder1'的ID中。
检查后,我可以确保' Folder2的ID是我要查找的ID。
我的问题: 1,你能否提出一个更好的方法来查找我的ID?
2,现在,我想我可以信任用户的输入,只查找Folder2的ID。如果Folder2有超过1个父项,那么我将执行上述过程(遍历路径)。如果Folder2有1个父级,我会停止检查。这对用户是否过于信任?
我对编程很陌生,你能帮助我吗?感谢您的时间和帮助!
答案 0 :(得分:1)
我不确定它是否最好,但您可以尝试拆分文件夹路径(“myFolder / folder1 / folder2 / ...”)并获取最后一项File resource。资源文件将具有parents[]
值(但我不知道它是否包含其文件夹的父项以及通向My Drive root的内容)。
要考虑的另一件事是优化响应,以便更快,更简洁地使用当前的实现。
尝试通过添加过滤器来优化files.list
(您可以指定您只打算列出文件夹)。另一个项目是partial responses。这可以通过指定fields
参数来完成。
希望这有帮助!
答案 1 :(得分:1)
这是一个很好的起点:
path = 'sample_folder'
folder_query = "title = '%s' and mimeType = '%s'" % (path,
"application/vnd.google-apps.folder")
folder_list = drive_service.files().list(q=folder_query).execute()
folder_id = folder_list['items'][0]['id']
#(note: this just returns the first search result)
如果路径中有多个文件夹,则需要拆分路径并迭代(例如,获取Folder1的folder_id,然后使用此id获取Folder2的folder_id等)