Google Drive API - 仅为“我的云端硬盘”

时间:2015-09-17 10:40:51

标签: google-drive-api

我正在使用适用于Python的Google Drive API客户端库。

我想仅为“我的云端硬盘”中的当前文件提取元数据。 但是,使用service.files()。list()。execute()会生成一个列表,不仅包括当前显示在“我的驱动器”中的文件,还包括以前删除的文件以及存储在'中的文件。谷歌照片'和'最近'。

如何过滤收到的文件列表,以便只检索安装了Google云端硬盘同步的客户端上下载的文件?

2 个答案:

答案 0 :(得分:1)

<强>更新

我找到了更好的方法来获取&#34;我的云端硬盘&#34;中的项目列表。 <{3}}取代file.list,而change.list更适合我们的用例。

通过将includeDeletedincludeSubscribed设置为falsechange.list会返回一个更改列表,其中包含严格位于用户驱动器中的文件(否) 最近与我共享)。但是,它确实包含了已删除的项目。

这个响应更容易使用,因为我们只需要过滤标记为thrashed的项目。它仍然不完美,但至少它为我们节省了构建树的麻烦。

原始答案

我找到的最接近的方式是'me' in owners and trashed = false root。此查询将返回&#34;我的云端硬盘&#34;中的所有文件(不幸的是)&#34;与我共享&#34;中的一些文件。然后,您可以从'root' in parents文件夹构建一个树,并删除那些孤立的树。

另一方面,最干净的方法是查询not sharedWithMe并逐层遍历树。但这并不是那么有效。

注意:查询sharedWithMe = falseusing System; using System.Linq; using SQLite.Net; using Xamarin.Forms; using System.Collections.Generic; namespace XamarinSqliteSample { public class StudentDB { private SQLiteConnection _sqlconnection; public StudentDB () { _sqlconnection = DependencyService.Get<ISQLite> ().GetConnection (); _sqlconnection.CreateTable<Student> (); } public IEnumerable<Student> GetStudents() { return (from t in _sqlconnection.Table<Student> () select t).ToList (); } public Student GetStudent (int id) { return _sqlconnection.Table<Student> ().FirstOrDefault (t => t.Id == id); } public void DeleteStudent(int id) { _sqlconnection.Delete<Student>(id); } public void AddStudent(Student student) { _sqlconnection.Insert(student); } } } 会产生400,否则将是最佳解决方案。

答案 1 :(得分:0)

您可以同时使用父资源和子资源,以清楚地识别“我的云端硬盘”作为文件夹的内容。此外,您可以使用files.list方法,同时包含一个查询以排除已删除的项目。只需包含'q'参数,并将查询列为字符串:

param = {}
if page_token:
    param['pageToken'] = page_token
param['q'] = 'trashed = false'
files = service.files().list(**param).execute()

您可以找到有关查询here的可用值的更多信息。