Сервисный аккаунт Google Analytics OAuth AccessType = Offline C # - PullRequest
11 голосов
/ 20 февраля 2012

У меня есть учетные данные для доступа к Google Analytics,

Я хочу использовать API аналитики Core Reporting http://code.google.com/apis/analytics/docs/gdata/home.html

Я нашел примеры, которые используют имя пользователя / пароль, вызывающие setUserCredentials, но видели комментарии, которые менее безопасны / имеют низкий предел запросов (и не существует в последнем клиенте).

Кроме того, я, кажется, примеры, которые используют oauth, но требуют взаимодействия с пользователем и предоставить доступ к учетной записи Google пользователей.

Однако я хочу запустить службу, которая не требует взаимодействия с пользователем и подключается к предопределенной учетной записи Google (не связанной с пользователем, просматривающим ее).

Затем я могу сохранить результаты в базе данных, и конечные пользователи могут запрашивать результаты из базы данных.

Я видел информацию об использовании AccessType = Offline при первом входе в систему, который затем возвращает токен доступа и тэг обновления. http://code.google.com/apis/accounts/docs/OAuth2WebServer.html#offline

В моем примере конечный пользователь никогда не войдет в приложение. Могу ли я иметь отдельное приложение администратора, которое получает токен обновления и сохраняет токен обновления в таблице config / lookup? Затем основное приложение может использовать токен обновления, извлеченный из таблицы config / lookup, и получить токен доступа, чтобы иметь возможность запрашивать учетную запись Google Analytics.

Я ищу пример C #, в котором используется AccessType = Offline и отдельно выбирается токен обновления и токен обновления, чтобы получить токен доступа для запроса учетной записи Google Analytics.

Ответы [ 4 ]

16 голосов
/ 21 февраля 2012

Создайте ваше приложение https://code.google.com/apis/console/

Для вашего приложения включите доступ к Google Analytics и создайте идентификатор клиента OAuth 2.0 для своего веб-сайта.

Просмотр:

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id=YOUR_APP_ID.apps.googleusercontent.com&access_type=offline&scope=https://www.googleapis.com/auth/analytics.readonly&redirect_uri=HTTP://YOUR_CALL_BACK_URL

Изменив YOUR_APP_ID , YOUR_CALL_BACK_URL на соответствующие значения.

Важно включить access_type = offline .

Нажмите Предоставить доступ, он будет перенаправлен на HTTP://YOUR_CALL_BACK_URL?code=THIS_IS_YOUR_CODE. Скопируйте код в URL.

С помощью кода запросите маркер обновления с помощью приглашения CMD.

curl -d "code=THIS_IS_YOUR_CODE&client_id=YOUR_APP_ID.apps.googleusercontent.com&client_secret=YOUR_APPS_SECRET_CODE&redirect_uri=HTTP://YOUR_CALL_BACK_URL&grant_type=authorization_code" https://accounts.google.com/o/oauth2/token

Изменив THIS_IS_YOUR_CODE , YOUR_APP_ID , YOUR_APPS_SECRET_CODE , YOUR_CALL_BACK_URL на соответствующие значения.

Записать refresh_token возвращено.

Загрузите последнюю версию .net библиотеки Core Reporting V3.0 .net http://code.google.com/p/google-api-dotnet-client/wiki/Downloads

В текущей версии Google.Apis.Analytics.v3.cs есть ошибка, из-за которой эта копия кода из этого файла исправляется в вашем локальном решении (и не ссылайтесь на Google.Apis.Analytics.v3.bin ) http://code.google.com/p/google-api-dotnet-client/source/browse/Services/Google.Apis.Analytics.v3.cs?repo=samples&name=20111123-1.1.4344-beta

И измените свойство Dimensions с List<system.string> на string.

Или вы получите ошибку, как я, и этот парень сделал http://www.evolutiadesign.co.uk/blog/using-the-google-analytics-api-with-c-shar/

Затем вы можете использовать свой токен обновления, чтобы сгенерировать токен доступа без участия пользователя, и использовать токен доступа, чтобы создать отчет для Google Analytics.

using System;
using DotNetOpenAuth.OAuth2;
using Google.Apis.Authentication.OAuth2;
using AnalyticsService = Google.Apis.Analytics.v3.AnalyticsService;

class Program
    {
        public static void Main()
        {
            var client = new WebServerClient(GoogleAuthenticationServer.Description, "YOUR_APP_ID.apps.googleusercontent.com", "YOUR_APPS_SECRET_CODE");
            var auth = new OAuth2Authenticator<WebServerClient>(client, Authenticate);
            var asv = new AnalyticsService(auth);
            var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID");
            request.Dimensions = "ga:pagePath";
            request.Sort = "-ga:visitors";
            request.MaxResults = 5;
            var report =  request.Fetch();
            Console.ReadLine();
        }

        private static IAuthorizationState Authenticate(WebServerClient client)
        {
            IAuthorizationState state = new AuthorizationState(new string[]{}) { RefreshToken = "REFRESH_TOKEN" };

            client.RefreshToken(state);
            return state;
        }
    }
4 голосов
/ 05 июня 2012

Отличный ответ Ян, и это помогло мне начать движение в правильном направлении больше, чем любой другой ответ, который я мог найти в Интернете.Что-то должно было измениться в объекте AnalyticsService, потому что строка:

var request = asv.Report.Get("2012-02-20", "2012-01-01", "ga:visitors", "ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID");

не работает для меня, и мне пришлось использовать следующее:

var request = asv.Data.Ga.Get("ga:YOUR_GOOGLE_ANALYTICS_ACCOUNT_ID", "2012-01-01", "2012-02-20", "ga:visitors");

Надеюсь, это поможет другим, таким как вашОтвет помог мне.Спасибо!

1 голос
/ 17 августа 2012

Ответ Яна мне очень помог, но я продолжал получать ошибку при запуске команды curl.Провел некоторые исследования и обнаружил, что шаги для получения кода доступа и токена обновления можно упростить, перейдя к https://code.google.com/oauthplayground/ и проверив настройки конфигурации oAuth.Справа вверху страницы есть кнопка настроек.выбрано «Использовать собственные учетные данные OAuth».Вы можете получить свой код доступа и запросить токен обновления.

Надеюсь, это поможет.

0 голосов
/ 12 февраля 2015

Вы можете вручную получить токен обновления с OAuth Playground . Если вам нужен обновленный токен для учетной записи службы, как я, убедитесь, что вы

  1. Нажмите на настройки справа.
  2. Проверьте Используйте свои собственные учетные данные OAuth
  3. Заполните свой идентификатор клиента и секрет
  4. Закрыть настройки
  5. Нажмите кнопку Обновить на шаге 2
  6. Затем сохраните маркер обновления для использования в вашем приложении
...