2013-01-09 10 views
11

Sto tentando di accedere a un foglio di calcolo Google privato utilizzando Javascript. Ho autorizzato con successo con OAuth2.0 e posso visualizzare un elenco di tutti i miei documenti di Google Drive. Quello che non riesco a fare è entrare in un foglio di calcolo specifico. Il codice è il seguente con il relativo foglio di calcolo nella funzione "retrieve AllFiles". Molto di questo viene estratto dai tutorial di Google.API Google Spreadsheets con OAuth2.0 utilizzando Javascript

var clientId = 'working'; 
var apiKey = 'working'; 
var scopes = 'https://www.googleapis.com/auth/drive.file https://www.googleapis.com/auth/drive https://spreadsheets.google.com/feeds'; 

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

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

function handleAuthResult(authResult) { 
    console.log('inside handleAuthResult function'); 
    var authButton = document.getElementById('authButton'); 
    authButton.style.display = 'none'; 
    if (authResult && !authResult.error) { 
     //Access token has been succesfully retrieved, requests can be sent to the API. 
     apiCalls(); 
    } else { 
     //No access token could be retrieved, show the button to start the authorization flow. 
     authButton.style.display = 'block'; 
     authButton.onclick = function() { 
      gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult); 
     }; 
    } 
} 

function apiCalls() { 
    console.log('inside apiCalls function'); 
    gapi.client.load('drive', 'v2', function() { 
     retrieveAllFiles(callback); 
    }); 
} 

function retrieveAllFiles(callback) { 
    $.get('http://spreadsheets.google.com/feeds/spreadsheets/private/full', function(data) { 
     console.log('get request processed'); 
     console.log(data); 
    }); 
    console.log('inside retrieveAllFiles function'); 
    var retrievePageOfFiles = function(request, result) { 
     request.execute(function(resp) { 
     result = result.concat(resp.items); 
     var nextPageToken = resp.nextPageToken; 
     if (nextPageToken) { 
      request = gapi.client.drive.files.list({ 
       'pageToken': nextPageToken 
      }); 
      retrievePageOfFiles(request, result); 
     } else { 
      callback(result); 
     } 
     }); 
    } 
    var initialRequest = gapi.client.drive.files.list(); 
    retrievePageOfFiles(initialRequest, []); 
} 

function callback(result) { 
    console.log('all should be loaded at this point'); 
    console.log(result); 
    $('#drive-list').append('<ul class="items"></ul>'); 
    $.map(result, function(v,i){ 
     $('.items').append('<li>' + v.title + ':' + v.id + '</li>'); 
    }); 
} 

Quindi, per essere chiari, il risultato finale è attualmente un elenco di tutti i miei documenti di Google Drive, ma non console.log per "ottenere i dati elaborati". Non ricevo alcun messaggio di errore nella console, quindi non posso dire cosa sta succedendo.

Grazie.

+0

Potrebbe dirmi come ottenere il clientID per SpreadSheets? Grazie! – VladL

+0

Vai a [Google's Developers Console] (https://console.developers.google.com/project). Creare un nuovo progetto o accedere a un progetto esistente. Nella barra laterale sinistra, vai alla sezione "Credenziali" sotto "API e auth". Ha una sezione chiamata 'ClientID' e dovresti essere in grado di scoprirne di più. – Josh

risposta

20

Soluzione finale compilata da un gruppo di diverse fonti, speriamo che questo possa aiutare qualcuno.

var scopes = 'https://spreadsheets.google.com/feeds'; 
var clientId = 'working'; 
var apiKey = 'working'; 

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

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

function handleAuthResult(authResult) { 
    console.log('inside handleAuthResult function'); 
    console.log(gapi.auth.getToken()); 
    var authButton = document.getElementById('authButton'); 
    authButton.style.display = 'none'; 
    if (authResult && !authResult.error) { 
     //Access token has been successfully retrieved, requests can be sent to the API. 
     loadClient(); 
    } else { 
     //No access token could be retrieved, show the button to start the authorization flow. 
     authButton.style.display = 'block'; 
     authButton.onclick = function() { 
      gapi.auth.authorize({client_id: clientId, scope: scopes, immediate: false}, handleAuthResult); 
     }; 
    } 
} 

function loadClient() { 
    console.log('inside loadClient function'); 
    var token = gapi.auth.getToken().access_token; 
    var urlLocation = ''; //Get this from the URL of your Spreadsheet in the normal interface for Google Drive. 

    //This gives a spitout of ALL spreadsheets that the user has access to. 
    var url = 'https://spreadsheets.google.com/feeds/spreadsheets/private/full?access_token=' + token; 

    //This gives a list of all worksheets inside the Spreadsheet, does not give actual data 
    var url = 'https://spreadsheets.google.com/feeds/worksheets/' + urlLocation + '/private/full?access_token=' + token; 

    //This gives the data in a list view - change the word list to cells to work from a cell view and see https://developers.google.com/google-apps/spreadsheets/#working_with_cell-based_feeds for details 
    var url = 'https://spreadsheets.google.com/feeds/list/' + urlLocation + '/od6/private/full?access_token=' + token; 

    console.log(url); 
    $.get(url, function(data) { 
     console.log(data); 
    }); 
} 
+0

Ho iniziato a ricevere di nuovo gli errori "400 Bad Request" quando ho messo per la prima volta in auth_token. Si è rivelato un cattivo foglio di lavoro. Ha funzionato quando ho inserito il valore di gid = dall'URL docs.google.com per il foglio di calcolo. Non ho provato l'URL completo per urlLocation. I documenti API e molti altri luoghi dicono di usare il valore chiave = dall'URL dei documenti. Pertanto, se è docs.google.com/spreadsheet/ccc?key=blahblah&gid=5, urlLocation = 'blahblah' e worksheetId = 5 come in: 'https://spreadsheets.google.com/feeds/list/blahblah/ 5/private/full? Access_token = '+ token – jla

+1

Quindi, sono abbastanza avanti con questo esempio, ma le restrizioni di sicurezza tra domini mi fermano (cioè "No" è presente l'intestazione Access-Control-Allow-Origin "ecc.) Da dove hai eseguito questo script per dare il tuo accesso JS ai dati di risposta? –

Problemi correlati