0

Je veux afficher les métadonnées de fichier disqueItère fichiers Google Drive à l'aide de l'API pour les métadonnées

« iconLink », « thumbnailLink »

de chacun des fichiers dans le lecteur, mais obtenir la sortie des champs comme genre, id, nom, mimeType uniquement. Alors que les autres champs ne sont pas affichés.

function loadDriveApi() { 
    gapi.client.load('drive', 'v3', listFiles); 
} 

function listFiles() { 
    var request = gapi.client.drive.files.list({}); 

    request.execute(function(resp) { 
     var files = resp.files; 
     if (files && files.length > 0) { 
      for (var i = 0; i < files.length; i++) { 
       var file = files[i]; 
       appendPre(file.iconLink); 
      } 
     } else { 
      appendPre('No files found.'); 
     } 
    }); 
} 

Répondre

1

au moins vous aurez besoin du champ: https://www.googleapis.com/auth/drive.metadata.readonly + OAuth (API-Key & Client-ID)

vous pouvez le tester à: https://developers.google.com/drive/v3/reference/files/list

dans l'entrée "champs" ajouter: fichiers (iconLink, thumbnailLink)

si vous utilisez https://apis.google.com/js/api.js, assurez-vous d'ajouter votre domaine à API-Key -> HTTP-Référent & client-ID -> JavaScript Source & Forwarding-URI (@https://console.developers.google.com/apis/credentials)

vous pouvez trouver un échantillon d'utilisation GAPI de base ici: https://github.com/google/google-api-javascript-client/blob/51aa25bed4f6c36d8e76fd3b9f7e280ded945c98/samples/loadedDiscovery.html

Je promisified le client GAPI un peu il y a quelque temps, parce que je détestais le mélange des callbacks et thenables dans les méthodes .. cela a fonctionné pour moi (en supposant que api.js était déjà chargé), mais seulement contenir 100 entrées de fichiers dans la réponse.

window.gapiPromisified = { 
    apiKey: 'XXXXXXXXXXX', 
    clientId: 'XXXXX-XXXXXX.apps.googleusercontent.com' 
} 

window.gapiPromisified.init = function init() { 
    return new Promise(resolve => { 
    gapi.load('client:auth2',() => { 
     if (!document.getElementById('gapiAuthButton')) { 
     let authButton = document.createElement('button') 
     authButton.id = 'gapiAuthButton' 
     authButton.style.display = 'none' 
     authButton.style.marginLeft = 'auto' 
     authButton.style.marginRight = 0 
     document.body.insertBefore(authButton, document.body.firstChild) 
     authButton.addEventListener('click',() => { 
      let GoogleAuth = gapi.auth2.getAuthInstance() 
      if (GoogleAuth.isSignedIn.get()) { 
      GoogleAuth.signOut() 
      } else { 
      GoogleAuth.signIn() 
      } 
     }) 
     } 
     gapi.client.setApiKey(this.apiKey) 
     gapi.auth2.init({ client_id: this.clientId }) 
     .then(() => resolve()) 
    }) 
    }) 
} 

window.gapiPromisified.signIn = function signIn() { 
    return new Promise(resolve => { 
    let GoogleAuth = gapi.auth2.getAuthInstance() 
    // Listen for sign-in state changes 
    GoogleAuth.isSignedIn.listen(isSignedIn => { 
     let authButton = document.getElementById('gapiAuthButton') 
     if (isSignedIn) { 
     authButton.textContent = 'Sign-out' 
     resolve() 
     } else { 
     authButton.textContent = 'Sign-in' 
     } 
    }) 
    // Handle the initial sign-in state 
    let authButton = document.getElementById('gapiAuthButton') 
    let isSignedIn = GoogleAuth.isSignedIn.get() 
    authButton.textContent = (isSignedIn) ? 'Sign-out' : 'Sign-in' 
    document.getElementById('gapiAuthButton').style.display = 'block' 
    if (isSignedIn) { 
     resolve() 
    } else { 
     GoogleAuth.signIn() 
    } 
    }) 
} 

window.gapiPromisified.getReady = function getReady() { 
    if (!gapi.hasOwnProperty('auth2')) { 
    return this.init() 
    .then(() => this.signIn()) 
    } else { 
    if (gapi.auth2.getAuthInstance().isSignedIn.get()) { 
     return Promise.resolve() 
    } else { 
     return this.signIn() 
    } 
    } 
} 

window.gapiPromisified.getScopes = function getScopes (scopes) { 
    return new Promise((resolve, reject) => { 
    let GoogleUser = gapi.auth2.getAuthInstance().currentUser.get() 
    if (GoogleUser.hasGrantedScopes(scopes)) { 
     resolve() 
    } else { 
     // method returns goog.Thenable 
     GoogleUser.grant({ 'scope': scopes }) 
     .then(onFulfilled => { 
     resolve(onFulfilled) 
     }, onRejected => { 
     reject(onRejected) 
     }) 
    } 
    }) 
} 

window.gapiPromisified.loadAPI = function loadAPI (urlOrObject) { 
    return new Promise((resolve, reject) => { 
    // method returns goog.Thenable 
    gapi.client.load(urlOrObject) 
    .then(onFulfilled => { 
     resolve(onFulfilled) 
    }, onRejected => { 
     reject(onRejected) 
    }) 
    }) 
} 

window.gapiPromisified.metadata = function metadata() { 
    return new Promise((resolve, reject) => { 
    this.getReady() 
    .then(() => this.getScopes('https://www.googleapis.com/auth/drive.metadata.readonly')) 
    .then(() => this.loadAPI('https://www.googleapis.com/discovery/v1/apis/drive/v3/rest')) 
    .then(() => { 
     gapi.client.drive.files.list({ 
     fields: 'files(iconLink,thumbnailLink)' 
     }) 
     .then(onFulfilled => { 
     resolve(onFulfilled) 
     }, onRejected => { 
     reject(onRejected) 
     }) 
    }) 
    }) 
} 

window.gapiPromisified.metadata() 
.then(res => { 
    res.result.files.forEach(file => { 
    console.log(file.iconLink) 
    console.log(file.thumbnailLink) 
    }) 
}) 
0

Dans la version 3, vous devez spécifier les champs que vous souhaitez inclure dans la réponse aux métadonnées. Voir le paramètre fields=