Учетная запись службы Google Analytics OAuth AccessType = Offline С#

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

Я ищу, чтобы использовать API отчетов Core Analytics 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.

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

Ответ 1

Создайте приложение 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.

Загрузите последнюю версию библиотек 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 от a List<system.string> до a 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;
        }
    }

Ответ 2

Великий ответ Ян, и это помогло мне получить правильное направление больше, чем любой другой ответ, который я мог найти в Интернете. Что-то должно измениться в объекте 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");

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

Ответ 3

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

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

Ответ 4

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

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