【问题标题】:Google API query files in multiple folders with php使用 php 查询多个文件夹中的 Google API 文件
【发布时间】:2020-04-20 00:04:40
【问题描述】:

我正在尝试使用多个文件夹 ID 查询 google 驱动器。

这是我的查询

 $optParams = array(
 'pageSize' => 1000
    ,'fields' => 'nextPageToken, files(contentHints/thumbnail,fileExtension,iconLink,id,name,size,thumbnailLink,webContentLink,webViewLink,mimeType,parents, kind, trashed, owners, modifiedTime)'
    ,[q] => "trashed=false and ('folder-id-1' in parents or 'folder-id-2' in parents or 'folder-id-3' in parents or 'folder-id-4' in parents or 'folder-id-5' in parents)"
   );                

 $service = new \Google_Service_Drive($this->GoogleClient);
 $results = $service->files->listFiles($optParams);

但它只返回前 2 个文件夹中的文件


编辑有关我的查询和返回结果的更多详细信息。文件夹 ID 已被匿名化。

    $fldrs = [];
    $fldrs[] = "folder-id-1"; // Toolkit 3 folders (Shared with me)
    $fldrs[] = "folder-id-2"; // Untitled folder 1 file (mine)
    $fldrs[] = "folder-id-3"; // Logos 14 files (not mine)
    $fldrs[] = "folder-id-4"; // Posters (8 files - not mine)
    $fldrs[] = "folder-id-5"; // Promo Assets (11 files not mine)

    $q = "trashed=false and (";
    $MaxFolders = 5;
    for ($i=0;$i<$MaxFolders;$i++)
    {
        if ($i > 0) $q .= " or ";
        $q .= "'{$fldrs[$i]}' in parents";
    }

    $q .= ")";

    $optParams = array(
         'pageSize' => 1000
        ,'fields' => 'nextPageToken, files(contentHints/thumbnail,fileExtension,iconLink,id,name,size,thumbnailLink,webContentLink,webViewLink,mimeType,parents, kind, trashed, owners, modifiedTime, driveId)'
        ,q => $q
      );                

    $service = new \Google_Service_Drive($this->GoogleClient);
    $results = $service->files->listFiles($optParams);

    ------

$optParams(来自调试)

    array(3) (
      [pageSize] => (int) 1000
      [fields] => (string) nextPageToken, files(contentHints/thumbnail,fileExtension,iconLink,id,name,size,thumbnailLink,webContentLink,webViewLink,mimeType,parents, kind, trashed, owners, modifiedTime, driveId)
      [q] => (string) trashed=false and ('folder-id-1' in parents or 'folder-id-2' in parents or 'folder-id-3' in parents or 'folder-id-4' in parents or 'folder-id-5' in parents)
    )

这只返回 5 个文件(文件夹 3 和 4,以及 3 个文件:文件夹 2 中的 1 个文件,文件夹 3 中的 1 个文件,文件夹 5 中的 1 个文件)

如果我完成并只做第一个文件夹,我会返回 3 个文件夹。 如果我做 2 个文件夹,我会得到 2 个文件夹和 1 个文件 如果我做 3 个文件夹,我会得到 2 个文件夹和 2 个文件 如果我有 4 个文件夹,我会得到 2 个文件夹和 2 个文件(与 3 个文件夹相同)

如果我只选择文件夹 3(徽标),我会得到所有 14 个文件。

大多数文件不是我自己的。它们与我共享。

【问题讨论】:

  • 我认为您的搜索查询是正确的。那么我能问一下你使用[q]而不是'q'的原因吗?比如你把,[q] =&gt; "trashed=false,,,修改成,'q' =&gt; "trashed=false,,,,你会得到什么结果?在我的环境中,当我使用,[q] =&gt; 时,我可以确认返回了我不期望的文件列表。我不确定这是否是您问题的直接解决方案。所以我将此作为评论发布。
  • 谢谢 - 我认为这是因为将它拼凑在一起的问题。实际上,我在脚本的下方添加了 q 参数,例如 $optParama['q'] = and ('folder-id-1' in parents 或.....我现在正在尝试如你所说的那样,并且初始测试没有任何区别。我会尽快确认这一点。
  • 感谢您的回复。当我测试您的搜索查询时,我可以确认它有效。因此,如果即使您在测试修改时也出现同样的问题,您能否提供整个脚本?通过这个,我想检查一下。
  • 谢谢 - 我已经在问题中添加了更多信息,因为它不适合评论和格式。我应该注意,很多文件是与我共享的,而不是我自己的。但是,如果我只使用相同的查询选择一个文件夹,则无论所有权如何,都会返回所有文件
  • 感谢您的回复。当我测试您的附加脚本时,我可以确认可以从示例 5 文件夹中检索到正确数量的文件。例如,我可以问一下您正在使用的范围吗?例如,如果您使用https://www.googleapis.com/auth/drive.file,那么使用https://www.googleapis.com/auth/drive.metadata.readonlyhttps://www.googleapis.com/auth/drive.readonlyhttps://www.googleapis.com/auth/drive 怎么样?

标签: php google-api google-drive-api google-api-php-client


【解决方案1】:

参数不是数组。试试这个。

 $optParams = array(
 'pageSize' => 1000
    ,'fields' => 'nextPageToken, files(contentHints/thumbnail,fileExtension,iconLink,id,name,size,thumbnailLink,webContentLink,webViewLink,mimeType,parents, kind, trashed, owners, modifiedTime)'
    ,'q' => "trashed=false and ('folder-id-1' in parents or 'folder-id-2' in parents or 'folder-id-3' in parents or 'folder-id-4' in parents or 'folder-id-5' in parents)"
   );  

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2016-02-26
    • 2020-11-30
    • 2022-06-10
    • 1970-01-01
    • 2016-04-24
    • 2014-08-09
    相关资源
    最近更新 更多