谷歌驱动的PHP API V3:不能使用西里尔名称搜索文件夹

谷歌驱动的PHP API V3:不能使用西里尔名称搜索文件夹

问题描述:

10个月前一个我写了一个小的项目和它的一个特点是,以搜索在谷歌驱动器的根或内部文件夹中的特定文件夹,并返回其ID。文件夹名称可以是拉丁文或西里尔文。直到七月或2017年8月,一切运行良好,但两个月以来它开始返回时,我试图寻找用西里尔字母名称的文件夹和最近创建(年龄2个月)空数组。如果我用拉丁文名称创建文件夹 - 一切正常。谷歌驱动的PHP API V3:不能使用西里尔名称搜索文件夹

这是我在驱动器的根目录搜索旧代码:

$driveService->files->listFiles([ 
       'q' => "mimeType='application/vnd.google-apps.folder' and 'root' in parents and name = 'Новая Папка' and trashed = false" 
      ]); 

这是行不通的。如果我创建一个名为“新建文件夹”的文件夹,一切都可以正常工作,无需更改

但是,如果我改变 '名称=' 到 '名称中包含'

$driveService->files->listFiles([ 
       'q' => "mimeType='application/vnd.google-apps.folder' and 'root' in parents and name contains 'Новая Папка' and trashed = false" 
      ]); 

一切完美的作品。但是这个代码是危险的 - 我想,该代码将返回只有一个文件夹,但如果此文件夹附近将创建与名称的文件夹“Новаяпапка1”,“Новаяпапка2”,“Новаяпапка10”等。

谷歌API V3文档说,使用“NAME =”搜索确切名称,所以我难倒。

+0

使用Android版云端硬盘SDK时遇到同样的问题今天。目前,我们正在讨论使用包含过滤器,并进一步事后结果进行过滤。恕我直言,这应该由谷歌修复。 –

事实证明这是一个已知bug in the Google Drive APIs documented here

对于现在的解决方法是使用含有过滤器和手动查找正确的结果之后是这样的:

getFileByName(name) { 
    files = GoogleDriveAPI.searchFiles('title contains "%name"') 
    for(file in files) { 
    if(file.getName() === name) 
     return file 
    } 
    return null 
}