2012-12-24 21 views
7

I file nel dominio Google che amministro si sono trovati in uno stato negativo; ci sono migliaia di file che si trovano nella directory principale. Voglio identificare questi file e spostarli in una cartella sotto "I miei file".API Google Drive: elenca i file senza genitore

Quando utilizzo l'API per elencare i genitori per uno di questi file orfani, il risultato è un array vuoto. Per determinare se un file è orfano, posso scorrere tutti i file nel mio dominio e richiedere l'elenco dei genitori per ciascuno. Se la lista è vuota, so che il file è orfano.

Ma questo è orribilmente lento.

Esiste comunque l'utilizzo dell'API di Drive per cercare file privi di genitori?

Il campo "genitori" per il parametro q non sembra essere utile per questo, in quanto è possibile solo specificare che l'elenco dei genitori contiene un ID.

Aggiornamento:

Sto cercando di trovare un modo rapido per individuare gli elementi che sono veramente alla radice della gerarchia del documento. Cioè, sono fratelli di "My Drive", non figli di "My Drive".

+0

Sembra un bug, non dovremmo consentire ai file di non avere genitori. –

+2

L'interfaccia utente dell'unità consente esplicitamente di spostare i file in questa situazione, ma sconsiglia di eseguirla. Sarebbe bello poter richiedere questi file. – snae

+0

Hai mai trovato una soluzione? – casolorz

risposta

3

In Java:

List<File> result = new ArrayList<File>(); 
Files.List request = drive.files().list(); 
request.setQ("'root'" + " in parents"); 

FileList files = null; 
files = request.execute(); 

for (com.google.api.services.drive.model.File element : files.getItems()) { 
    System.out.println(element.getTitle()); 
} 

'root' è la cartella principale, se il file o la cartella si trova nella radice

+0

Trova i file e le cartelle in "Il mio Drive", che in realtà non è la radice, anche se, confusamente, la cartella "Il mio Drive" ha la proprietà isRoot = true. Sto cercando di trovare un modo per individuare rapidamente gli elementi nella radice effettiva della gerarchia del documento, ovvero i fratelli di "I miei file". Ho aggiornato la mia domanda per riflettere questo. – FishesCycle

+0

@Jasper puoi darmi il link alla libreria che hai usato perché non riesco a trovare nessuna funzione execute() – Prakhar

+0

Puoi ottenere la richiesta usando 'com.google.api.services.drive.Drive', che può essere creato usando 'com.google.api.services.drive.Drive.Builder.Builder (HttpTransport, JsonFactory, HttpRequestInitializer)'. – BrunoJCM

1

bruta, ma semplice e funziona ..

do { 
     try { 
      FileList files = request.execute(); 

      for (File f : files.getItems()) { 
       if (f.getParents().size() == 0) { 
         System.out.println("Orphan found:\t" + f.getTitle()); 

       orphans.add(f); 
       } 
      } 

      request.setPageToken(files.getNextPageToken()); 
     } catch (IOException e) { 
      System.out.println("An error occurred: " + e); 
      request.setPageToken(null); 
     } 
    } while (request.getPageToken() != null 
      && request.getPageToken().length() > 0); 
0

Prova a utilizzare questo nella tua query:

'root' in parents 
+0

https://gsuite-developers.googleblog.com/2012/08/5-things-you-didnt-know-you-could-do.html –

0

documentation consiglia la seguente query: is:unorganized owner:me.

Problemi correlati