Javascript API Google Analytics: ошибка 403 - PullRequest
1 голос
/ 11 декабря 2011

Ради боба, кто-нибудь, пожалуйста, помогите мне ...

Я пытаюсь использовать Google Analytics API (библиотека Javascript), чтобы получить некоторую информацию об аналитике.Я зарегистрировал свое приложение и настроил oauth2.Я могу вернуть токен доступа jsut нормально, но когда я пытаюсь отправить запрос, чтобы фактически получить информацию об аналитике, он возвращает ошибку 403.Вот мой код:

function auth() {
    var config = {
        'client_id': '[my_client_id]',
        'scope': 'https://www.googleapis.com/auth/analytics.readonly'
    };
    gapi.auth.authorize(config, function() {
        var retObj = gapi.auth.getToken();
        makeRequest(retObj.access_token);
    });
}

function makeRequest(accessToken) {
    var restRequest = gapi.client.request({
        'path': '/analytics/v3/data/ga',
        'params': {
            'access_token': accessToken,
            'ids': 'ga:[table_number]',
            'metrics': 'ga:pageviews,ga:uniquePageviews',
            'start-date': '2011-11-01',
            'end-date' : '2011-12-01'               
        }
    });
    restRequest.execute(function(resp) { console.log(resp); });
}

Функция auth () выполняется нажатием кнопки, и, как я уже сказал, получение токена доступа не является проблемой.Когда я выполняю функцию makeRequest, я получаю ошибку 403.Кто-нибудь имеет какое-либо представление о том, что здесь происходит?

Спасибо всем, кто ответит заранее !!

Ответы [ 2 ]

2 голосов
/ 28 февраля 2012

В моем случае я получал 403 Forbidden, потому что в моем браузере я вошел в Google с учетной записью, у которой не было разрешения на профиль GA, к которому я пытался получить доступ.Перед обнаружением этой проблемы у меня были проблемы с tableID, для которого Aksival опубликовал решение выше.

Вот мой рабочий код для справки:

<script type="text/javascript">
    //GET THESE HERE https://code.google.com/apis/console/
    var clientId = 'YOURCLIENTIDHERE';
    var apiKey = 'YOURAPIKEYHERE';

    //GET THIS HERE http://code.google.com/apis/analytics/docs/gdata/v3/gdataAuthorization.html
    var scopes = 'https://www.googleapis.com/auth/analytics.readonly';

    //INITIALIZE
    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) {
        if (authResult) {
            makeApiCall();
        } else {            
            requestAuth();
        }
    }

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

    function makeApiCall() {
        gapi.client.load('analytics', 'v3', function() {
            var request = gapi.client.analytics.data.ga.get({
                'ids':'ga:YOURTABLEIDHERE', 'start-date':'2012-01-01', 'end-date':'2012-02-01', 'metrics':'ga:visits', 'metrics':'ga:visits', 'start-index':1, 'max-results':1000
            });
            request.execute(function(resp) { console.log(resp.totalsForAllResults); });
        });
    }
</script>
<script src="https://apis.google.com/js/client.js?onload=handleClientLoad"></script>
1 голос
/ 14 декабря 2011

У меня была такая же проблема.Оказывается, я неправильно указал [table_number].

Вам нужно запросить

accounts/[account-id]/webproperties/[webproperties-id]/profiles

и использовать поле 'id' соответствующего свойства.(Сначала я использовал internalWebPropertyId из запроса webproperties, поэтому он не удался.)

Теперь работает как шарм.

...