web-dev-qa-db-fra.com

obtenir le contenu des fichiers de Google Documents à l'aide de l'API Google Drive v3

existe-t-il un moyen d'obtenir le contenu des fichiers natifs (Google Documents) à l'aide de l'API Google Drive v3? Je sais que l'API v2 prend en charge cela avec la propriété exportLinks, mais cela ne fonctionne plus ou a été supprimé.

9
Johnny

Pour la v3 de l'API, vous pouvez utiliser la méthode d'exportation https://developers.google.com/drive/v3/reference/files/export

3
pinoyyid

Vous pouvez également télécharger des fichiers à contenu binaire (fichier non google drive) dans Drive à l'aide de l'attribut webContentLink d'un fichier. De https://developers.google.com/drive/v3/reference/files :

Un lien pour télécharger le contenu du fichier dans un navigateur. Cette option n'est disponible que pour les fichiers à contenu binaire dans Drive.

Un exemple (j'utilise la méthode get() pour récupérer le webContentLink de mon fichier):

gapi.client.drive.files.get({
    fileId: id,
    fields: 'webContentLink'
}).then(function(success){
    var webContentLink = success.result.webContentLink; //the link is in the success.result object
    //success.result    
}, function(fail){
    console.log(fail);
    console.log('Error '+ fail.result.error.message);
})

Avec les fichiers Google Drive, la méthode d'exportation peut être utilisée pour obtenir ces fichiers: https://developers.google.com/drive/v3/reference/files/export
Cette méthode nécessite un objet avec 2 attributs obligatoires (fileId et mimeType) comme paramètres. Une liste des mimeTypes disponibles peut être vue ici

Exemple:

gapi.client.drive.files.export({
    'fileId' : id,
    'mimeType' : 'text/plain'
}).then(function(success){
    console.log(success);
    //success.result    
}, function(fail){
    console.log(fail);
    console.log('Error '+ fail.result.error.message);
})

Vous pouvez lire le contenu d'un fichier doc non google (par exemple un fichier texte) avec gapi.client.drive.files.get avec alt:"media". exemple officiel . Mon exemple:

function readFile(fileId, callback) {
    var request = gapi.client.drive.files.get({
        fileId: fileId,
        alt: 'media'
    })
    request.then(function(response) {
        console.log(response); //response.body contains the string value of the file
        if (typeof callback === "function") callback(response.body);
    }, function(error) {
        console.error(error)
    })
    return request;
}
6
phuwin

Si vous utilisez files.export , vous n'obtiendrez aucun lien vous permettant de télécharger le fichier comme indiqué dans Guide de migration v .

Par exemple, en utilisant le try-it, je n'ai reçu qu'une réponse MiMetype mais pas de lien téléchargeable:

[application/vnd.oasis.opendocument.text data] 

Solution de contournement pour cela est un téléchargement direct. Remplacez simplement FILE_ID avec votre ID de fichier Google Doc et exécutez-le dans le navigateur. Grâce à cela, j'ai pu exporter des fichiers Google docs.

https://docs.google.com/document/d/FILE_ID/export?format=doc 

Crédits à guide de labnol pour la solution de contournement.

4
noogui