9 месяцев назад я написал небольшой проект, и одной из его функций был поиск определенной папки в корневой или внутренней папке на диске Google и возвращение ее идентификатора. Имя папки может быть латинским или кириллическим. До июля или августа 2017 года все работало нормально, но через два месяца он начал возвращать пустой массив, когда я пытался искать папки с кириллическими именами и создал недавно (младше 2 месяца). Если я создаю папку с латинским именем — все работает нормально.
Это мой старый код для поиска в корне диска:
$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» и т. Д.
Документы Google API V3 говорят, что для поиска точного имени используется name =, так что я в замешательстве.
Оказывается, это известный ошибка в Google Drive API, описанная здесь.
На данный момент обходной путь должен использовать фильтр содержимого и вручную искать правильный результат, например так:
getFileByName(name) {
files = GoogleDriveAPI.searchFiles('title contains "%name"')
for(file in files) {
if(file.getName() === name)
return file
}
return null
}
Других решений пока нет …