API Google Spreadsheets с OAuth2.0 с использованием Javascript

Я пытаюсь получить доступ к закрытой электронной таблице Google, используя Javascript. Я успешно авторизовался с OAuth2.0 и могу видеть список всех моих документов Google Диска. То, что я не могу сделать, это попасть в конкретную электронную таблицу. Код выглядит следующим образом с соответствующим кодом электронной таблицы в функции «retrieveAllFiles». Многие из них отбираются из учебных пособий Google.

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('
    '); $.map(result, function(v,i){ $('.items').append('
  • ' + v.title + ':' + v.id + '
  • '); }); }

    Поэтому, чтобы быть ясным, конечный результат в настоящее время является списком всех моих документов Google Диска, но нет console.log для «получения данных». Я не получаю никаких сообщений об ошибках в консоли, поэтому я не могу сказать, что происходит.

    Благодарю.

    11
    nl ja de
    Не могли бы вы рассказать мне, как получить идентификатор clientID для SpreadSheets? Благодаря!
    добавлено автор VladL, источник
    Не могли бы вы рассказать мне, как получить идентификатор clientID для SpreadSheets? Благодаря!
    добавлено автор VladL, источник
    Перейдите в Консоль разработчиков Google . Либо создайте новый проект, либо войдите в существующий проект. На левой боковой панели перейдите в раздел под названием Credentials в API и auth . Он имеет раздел под названием ClientID , и вы должны быть в состоянии найти там больше.
    добавлено автор Josh, источник
    Перейдите в Консоль разработчиков Google . Либо создайте новый проект, либо войдите в существующий проект. На левой боковой панели перейдите в раздел под названием Credentials в API и auth . Он имеет раздел под названием ClientID , и вы должны быть в состоянии найти там больше.
    добавлено автор Josh, источник

    1 ответы

    Окончательное решение составлено из нескольких источников, надеюсь, это поможет кому-то.

    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);
        });
    }
    
    20
    добавлено
    Итак, я довольно далеко отношусь к этому примеру, но ограничения на междоменную защиту меня останавливают (т. Е. Заголовок «Нет» Access-Control-Allow-Origin »присутствует и т. Д.). Где вы запустили этот скрипт, чтобы предоставить свой JS-доступ к данным ответа?
    добавлено автор Eric Nguyen, источник
    Я снова начал получать ошибки «400 Bad Request», когда я впервые ввел auth_token. Это оказалось плохим рабочим листом. Он работал, когда я ввел значение gid = с URL-адреса docs.google.com для листа распространения. Я не пробовал полный URL-адрес для urlLocation. В документах API и большинстве других мест говорится, чтобы использовать значение key = из URL-адресов документов. Поэтому, если это docs.google.com/spreadsheet/ccc?key=blahblah&gid=5, то urlLocation = 'blahblah' и workheetId = 5, как в: ' spreadsheets.google.com/feeds/list/blahblah/5/private/…
    добавлено автор jla, источник
    JavaScript Jobs — чат
    JavaScript Jobs — чат
    8 336 участник(ов)

    JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

    JavaScript.ru
    JavaScript.ru
    7 932 участник(ов)

    Сообщество сайта JavaScript.ru в Slack.

    pro.js
    pro.js
    4 675 участник(ов)

    Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

    JavaScript — русскоговорящее сообщество
    JavaScript — русскоговорящее сообщество
    3 269 участник(ов)

    Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

    JavaScript Noobs — сообщество новичков
    JavaScript Noobs — сообщество новичков
    2 484 участник(ов)

    Чат для новичков

    javascript_ru
    javascript_ru
    915 участник(ов)

    Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

    jsChat
    jsChat
    603 участник(ов)

    Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

    JavaScript for Zombies Chat
    JavaScript for Zombies Chat
    492 участник(ов)

    Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

    All That JS
    All That JS
    417 участник(ов)

    JS на русском