当前位置: 动力学知识库 > 问答 > 编程问答 >

oauth 2.0 - Google Spreadsheets API with OAuth2.0 using Javascript

问题描述:

I'm trying to access a private Google Spreadsheet using Javascript. I have sucessfully authorized with OAuth2.0 and can see a listing of all my Google Drive docs. What I can't seem to do is get into a specific spreadsheet. Code is as follows with the relevant spreadsheet code in the function "retrieveAllFiles". A lot of this is culled from Google tutorials.

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>');

});

}

So to be clear, the end result currently is a listing of all my Google Drive docs, but no console.log for "get data processed". I'm not getting any error messages in the console, so I can't tell what is going on.

Thanks.

网友答案:

Final solution compiled from a bunch of different sources, hopefully this will help someone.

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);
    });
}
分享给朋友:
您可能感兴趣的文章:
随机阅读: