2015-05-24 70 views
3

嗨,我這種情況困在這裏,我已經嘗試了許多不同的方法,但我不能讓我追求的。谷歌驅動器 - 如何列出所有文件中指定的文件夾

情況: 我在主持谷歌驅動器上的文件夾有大量的文件。 例如,報告的單個客戶端文件夾有2000-10000個文件(這隻會變得更大),我希望能夠列出帶有標題和文件ID以及父文件夾ID的這些文件,以便我可以創建直接鏈接到文件。 從我的理解,我能夠與谷歌驅動器要做到這一點:驅動器的API客戶端的PHP 我已經安裝了一個項目,有一個客戶端ID和客戶端祕密,我已經下載顛覆作曲家和谷歌API和驅動API - 客戶端PHP和使用XAMPP

我到目前爲止所做的: 我已經通過谷歌文檔和觀看教程視頻他們提供。 我已經嘗試過google sample他們有可用的網頁,這是我需要的開始。 這將列出的ID和標題或什麼都字段,你選擇的文件夾中的文件 - 這兩個問題在這裏是你不能指定你想要的結果,結果的最大數量爲1000。我是被限制的文件夾需要10,000。

我也看過一些谷歌應用程序腳本here,它似乎在excel中用於像vba一樣提取文件ID和標題等,但這也限於最大數量的結果,然後超時問題。這是我想要的侷限性的確切類型。

我的問題是: 我有什麼選項可以列出10000個文件ID與谷歌驅動器的指定文件夾中的標題以及從頭到尾的過程是什麼,因爲我覺得我可能會錯過早期的基本觀點正在影響我的結果可能性。 我對此非常靈活,我可以在提取數據後處理數據,首先獲取數據對我來說很重要。 期待您的回覆,非常感謝。 我希望這已經足夠清晰並且合理。

回答

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

嘗試在Google Apps腳本的代碼:你需要修改這個代碼,並替換您的文件夾ID。打開在谷歌雲端硬盤中的文件夾,然後在瀏覽器地址欄中,您會看到:

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

複製出來的文件夾ID,然後在下面的代碼替換它。高級Google服務必須在Apps Script和開發者控制檯內的兩個位置明確啓用。

//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編寫的代碼,則需要使用不同的代碼。

+0

桑迪嗨,這是偉大的優雅而簡單,並得到接近我所需要的。然而,記錄器得到太大,所以我有結果導出到谷歌表......現在我的問題是最大執行時間超過 –

+0

看起來它可能有潛力,但需要它從超時的地方循環,並從有... –

+0

函數runMe(){ var startTime =(new Date())。的getTime(); //在這裏做一些工作 var startRow = ScriptProperties.getProperty(「start_row」); (var ii = startRow; ii <= size; ii ++)var currTime =(new Date())。getTime(); 如果(currTime - 開始時間> = MAX_RUNNING_TIME){ ScriptProperties.setProperty( 「START_ROW」,ⅱ) ScriptApp.newTrigger( 「邵仁枚」) .timeBased() .AT(新日期(currTime + REASONABLE_TIME_TO_WAIT)) 。創建(); 休息; } else { doSomeWork(); }} //在這裏做一些更多的工作 } –

相關問題