2012-07-03 16 views
13

Ich versuche, das Google-Laufwerk zum Auflisten von Dateien verwenden.Google Drive API Javascript

Mit der Antwort in https://stackoverflow.com/a/11280257 fand ich ein Problem, dass ich den Grund nicht finden kann.

var clientId = '*********.apps.googleusercontent.com'; 
var apiKey = '##########'; 
var scopes = 'https://www.googleapis.com/auth/drive'; 


function handleClientLoad() { 
    gapi.client.setApiKey(apiKey); 
    window.setTimeout(checkAuth,1); 
} 

function checkAuth() { 
    gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: true},handleAuthResult); 
} 

function handleAuthResult(authResult) { 
    var authorizeButton = document.getElementById('authorize-button'); 

    if (authResult && !authResult.error) { 
     authorizeButton.style.visibility = 'hidden'; 
     makeApiCall(); 
    } 
    else { 
     authorizeButton.style.visibility = ''; 
     authorizeButton.onclick = handleAuthClick; 
    } 
} 

function handleAuthClick(event) { 
    gapi.auth.authorize({client_id: clientId, scope: [scopes], immediate: false}, handleAuthResult); 
    return false; 
} 

function makeApiCall() { 
    gapi.client.load('drive', 'v2', makeRequest); 
} 

function makeRequest() 
{ 
    var request = gapi.client.drive.files.list({'maxResults': 5 }); 

    request.execute(function(resp) {   
     for (i=0; i<resp.items.length; i++) { 
      var titulo = resp.items[i].title; 
      var fechaUpd = resp.items[i].modifiedDate; 
      var userUpd = resp.items[i].lastModifyingUserName; 
      var userEmbed = resp.items[i].embedLink; 
      var userAltLink = resp.items[i].alternateLink; 

      var fileInfo = document.createElement('li'); 
      fileInfo.appendChild(document.createTextNode('TITLE: ' + titulo + ' - LAST MODIF: ' + fechaUpd + ' - BY: ' + userUpd));     
      document.getElementById('content').appendChild(fileInfo); 
     } 
    });  
} 

Ich habe diesen Fehler:

Uncaught TypeError: Cannot read property 'files' of undefined 

in der Linie

var request = gapi.client.drive.files.list({'maxResults': 5 }); 

Antwort

23

Mit

var request = gapi.client.request({ 
     'path': '/drive/v2/files', 
     'method': 'GET', 
     'params': {'maxResults': '1'} 
     }); 

statt

var request = gapi.client.drive.files.list({'maxResults': 5 }); 

löste das Problem!

+1

Thanks for sharing! Das funktioniert für mich. Ich finde es seltsam, dass Code, der als Beispiel in der API-Dokumentation veröffentlicht wurde, nicht wie erwartet funktioniert ... – Nielsm

7

Der Code sieht OK aus und Sie warten ordnungsgemäß, bis gapi.client.load abgeschlossen ist. Könnte nur ein Fehler beim Laden der Drive JS-Dateien oder eines anderen Problems (möglicherweise schlechte JS-Datei zwischengespeichert) sein. Ich änderte Ihr Beispiel ein wenig auf jsfiddle laufen, bei http://jsfiddle.net/Rbg44/4/ für das vollständige Beispiel einen Blick:

HTML:

<button id="authorize-button">Authorize</button> 
<div id="content">Files:</div> 

JS:

var CLIENT_ID = '...'; 
var API_KEY = '...'; 
var SCOPES = '...'; 

function handleClientLoad() { 
    gapi.client.setApiKey(API_KEY); 
    window.setTimeout(checkAuth,1); 
} 

function checkAuth() { 
    var options = { 
     client_id: CLIENT_ID, 
     scope: SCOPES, 
     immediate: true 
    }; 
    gapi.auth.authorize(options, handleAuthResult); 
} 

function handleAuthResult(authResult) { 
    var authorizeButton = document.getElementById('authorize-button'); 

    if (authResult && !authResult.error) { 
     authorizeButton.style.visibility = 'hidden'; 
     makeApiCall(); 
    } else { 
     authorizeButton.style.visibility = ''; 
     authorizeButton.onclick = handleAuthClick; 
    } 
} 

function handleAuthClick(event) { 
    var options = { 
     client_id: CLIENT_ID, 
     scope: SCOPES, 
     immediate: false 
    }; 
    gapi.auth.authorize(options, handleAuthResult); 
    return false; 
} 

function makeApiCall() { 
    gapi.client.load('drive', 'v2', makeRequest); 
} 

function makeRequest() { 
    var request = gapi.client.drive.files.list({'maxResults': 5 }); 
    request.execute(function(resp) {   
     for (i=0; i<resp.items.length; i++) { 
      var titulo = resp.items[i].title; 
      var fechaUpd = resp.items[i].modifiedDate; 
      var userUpd = resp.items[i].lastModifyingUserName; 
      var userEmbed = resp.items[i].embedLink; 
      var userAltLink = resp.items[i].alternateLink; 

      var fileInfo = document.createElement('li'); 
      fileInfo.appendChild(document.createTextNode('TITLE: ' + titulo + 
       ' - LAST MODIF: ' + fechaUpd + ' - BY: ' + userUpd));     
      document.getElementById('content').appendChild(fileInfo); 
     } 
    });  
} 

$(document).ready(function() { 
    $('#authorize-button').on('click', handleAuthClick); 
    $.getScript('//apis.google.com/js/api.js', function() { 
    gapi.load('auth:client', handleClientLoad); 
    }); 
}); 

Können Sie in Ihrem Browser überprüfen Entwickler-Tools, wenn es irgendwelche Probleme in der Anfrage gibt, wenn Sie gapi.client.load() aufrufen?

4

Sie müssen dies schreiben:

gapi.client.load('drive', 'v2', null); 
+1

Dies ist eine hilfreiche Antwort. Es macht den Beispielcode von Google funktioniert. –