Google Drive — Как вывести список всех файлов в указанной папке

Привет, я застрял здесь с этой ситуацией, я пробовал несколько разных подходов, но я не могу получить то, что я после.

Ситуация:
У меня есть большое количество файлов в папках, размещенных на диске Google.
Например, одна папка клиента для отчетов содержит от 2000 до 10000 файлов (это будет только больше), я хочу иметь возможность перечислять эти файлы с указанием заголовка и идентификатора файла, а также идентификатора родительской папки, чтобы я мог создавать прямые ссылки на файлы ,
Насколько я понимаю, я могу сделать это с Google Drive: Drive-Api-Client-PHP
Я настроил проект и у меня есть идентификатор клиента и секрет клиента, я скачал compverser subversion и google-api и drive-api-client-php и использую XAMPP

Что я сделал до сих пор:
Я просматривал документацию по Google и смотрю видео-уроки, которые они предлагают.
Я попробовал образец Google у них есть доступная там веб-страница, и это начало того, что мне нужно.
При этом будут перечислены файлы в папке с идентификатором и названием или какими-либо полями, которые вы выберете. Здесь две проблемы: вы не можете указать папку, для которой хотите получить результаты, а максимальное количество результатов ограничено 1000. Я в нужно 10000.

Я также посмотрел на некоторые скрипты приложений Google Вот, который, похоже, используется как vba в Excel для получения идентификаторов файлов, заголовков и т. д., но это также ограничено максимальным количеством результатов и затем проблемами с тайм-аутом. Это именно тот тип результата, который я хочу, просто без ограничений.

Мой вопрос:
Какие у меня есть варианты при перечислении 10000 идентификаторов файлов с заголовками в указанной папке на диске Google и каков процесс от начала до конца, так как я чувствую, что рано могу упустить основополагающий момент, который влияет на мои результаты.
Я гибок в этом, и я могу работать с данными после их извлечения, просто получение данных является ключевым для меня в первую очередь.
с нетерпением жду вашего ответа, большое спасибо.
Я надеюсь, что это достаточно ясно и имеет смысл.

3

Решение

Попробуйте этот код в Apps Script: вам нужно отредактировать этот код и заменить идентификатор папки. Откройте папку на Google Диске, и в адресной строке браузера вы увидите:

https://drive.google.com/drive/folders/Your_Folder_ID_Here

Скопируйте идентификатор папки и замените его в коде ниже. Расширенные службы Google должны быть явно включены в двух местах: внутри скрипта приложений и в консоли разработчика.

//This requires the Drive API To be turned on in the Advanced Google Services
function listFilesInFolder() {
var query = 'trashed = false and ' +
"'Your Folder ID Here' in parents";

var filesInFolder, pageToken;

do {
filesInFolder = Drive.Files.list({
q: query,
maxResults: 100,
pageToken: pageToken
});
if (filesInFolder.items && filesInFolder.items.length > 0) {
for (var i = 0; i < filesInFolder.items.length; i++) {
var thisFile = filesInFolder.items[i];
//Logger.log('%s (ID: %s)', thisFile.title, thisFile.id);
//To Do - Output content to file
. . . . Code to output content . . . .
}
} else {
Logger.log('No files found.');
}
pageToken = filesInFolder.nextPageToken;
} while (pageToken);
}

Если вы ищете код, написанный на PHP, вам нужно использовать что-то другое.

1

Другие решения

Это то, что я придумал, благодаря помощи приведенного выше кода и некоторого другого кода, который я нашел, соединил их вместе, и он делает то, что мне нужно.
Это может быть полезно для кого-то еще.

Спасибо

function listFilesInFolder() {
var MAX_FILES = 2000; //use a safe value, don't be greedy
var id = 'FOLDER_ID_HERE';
var scriptProperties = PropertiesService.getScriptProperties();
var lastExecution = scriptProperties.getProperty('LAST_EXECUTION');
var sheet = SpreadsheetApp.getActiveSheet();
var data;
if( lastExecution === null )
lastExecution = '';

var continuationToken = scriptProperties.getProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
var iterator = continuationToken == null ?
DriveApp.getFolderById(id).getFiles() : DriveApp.continueFileIterator(continuationToken);


try {
for( var i = 0; i < MAX_FILES && iterator.hasNext(); ++i ) {
var file = iterator.next();
var dateCreated = formatDate(file.getDateCreated());
if(dateCreated > lastExecution)
processFile(file);
data = [
i,
file.getName(),
file.getId()
];

sheet.appendRow(data);
}
} catch(err) {
Logger.log(err);
}

if( iterator.hasNext() ) {
scriptProperties.setProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN', iterator.getContinuationToken());
} else { // Finished processing files so delete continuation token
scriptProperties.deleteProperty('IMPORT_ALL_FILES_CONTINUATION_TOKEN');
scriptProperties.setProperty('LAST_EXECUTION', formatDate(new Date()));
}
}

function formatDate(date) { return Utilities.formatDate(date, "GMT", "yyyy-MM-dd HH:mm:ss"); }

function processFile(file) {
var id = file.getId();
var name = file.getName();
//your processing...
Logger.log(name);

}
1

По вопросам рекламы [email protected]