我正在使用适用于Python的Google Drive API客户端库。
我想仅为“我的云端硬盘”中的当前文件提取元数据。 但是,使用service.files()。list()。execute()会生成一个列表,不仅包括当前显示在“我的驱动器”中的文件,还包括以前删除的文件以及存储在'中的文件。谷歌照片'和'最近'。
如何过滤收到的文件列表,以便只检索安装了Google云端硬盘同步的客户端上下载的文件?
答案 0 :(得分:1)
<强>更新强>
我找到了更好的方法来获取&#34;我的云端硬盘&#34;中的项目列表。 <{3}}取代file.list
,而change.list
更适合我们的用例。
通过将includeDeleted
和includeSubscribed
设置为false
,change.list
会返回一个更改列表,其中包含严格位于用户驱动器中的文件(否) 最近和与我共享)。但是,它确实包含了已删除的项目。
这个响应更容易使用,因为我们只需要过滤标记为thrashed的项目。它仍然不完美,但至少它为我们节省了构建树的麻烦。
原始答案
我找到的最接近的方式是'me' in owners and trashed = false
root
。此查询将返回&#34;我的云端硬盘&#34;中的所有文件(不幸的是)&#34;与我共享&#34;中的一些文件。然后,您可以从'root' in parents
文件夹构建一个树,并删除那些孤立的树。
另一方面,最干净的方法是查询not sharedWithMe
并逐层遍历树。但这并不是那么有效。
注意:查询sharedWithMe = false
或using 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的可用值的更多信息。