Вопрос по – OAuth 2.0 с Google Analytics API v3

28

Раньше я мог запрашивать API Google Analytics с помощью логина и аккаунта моей учетной записи. пароль. Google теперь использует OAuth для аутентификации, и это здорово ... Единственная проблема заключается в том, что мне нужен только один токен доступа. Я не хочу позволять другим пользователям получать свои аналитические данные.

Я просто хочу быть в состоянии получить мои данные. Можно ли сгенерировать токен доступа только для моего приложения или аналитической учетной записи?

Я знаю, что такие решения существуют ... Например, Twitter предоставляет то, что они называют «однопользовательским oauth». для приложений, для которых не требуется вход определенного пользователя.

Еще раз, все, что я пытаюсь сделать здесь, - это получить МОИ СОБСТВЕННЫЕ аналитические данные через API.

Есть ли способ сделать это правильно?

Ваш Ответ

5   ответов
7

Терри Сейдлер ответил это красиво для php. Я хочу добавитьjava пример кода

Api console setup

Начните с выполнения необходимых шагов в консоли Google API, как объяснил Терри:

Basically, you go to the Google API Console and create an App. Enable Google Analytics in the services tab. In the API Access tab, create a new OAuth ID (Create another client ID... button), select service account and download your private key (Generate new key... link). You'll have to upload the key to your web server later. On the API Access page, in the Service account section, copy the email address (@developer.gserviceaccount.com) and add a new user with this email address to your Google Analytics profile. If you do not do this, you'll get some nice errors

Get the necessary libraries

Загрузите Java-клиент Google Analytics с: https://developers.google.com/api-client-library/java/apis/analytics/v3

Или добавьте следующие зависимости maven:

    <dependency>
        <groupId>com.google.apis</groupId>
        <artifactId>google-api-services-analytics</artifactId>
        <version>v3-rev94-1.18.0-rc</version>
    </dependency>
    <dependency>
        <groupId>com.google.http-client</groupId>
        <artifactId>google-http-client-jackson</artifactId>
        <version>1.18.0-rc</version>
    </dependency>

Now for the code:

public class HellowAnalyticsV3Api {

private static final HttpTransport HTTP_TRANSPORT = new NetHttpTransport();
private static final JsonFactory JSON_FACTORY = new JacksonFactory();

public void analyticsExample() {

    // This is the .p12 file you got from the google api console by clicking generate new key
    File analyticsKeyFile = new File(<p12FilePath>);

    // This is the service account email address that you can find in the api console
    String apiEmail = <[email protected]>;

    GoogleCredential credential = new GoogleCredential.Builder()
        .setTransport(HTTP_TRANSPORT)
        .setJsonFactory(JSON_FACTORY)
        .setServiceAccountId(apiEmail)
        .setServiceAccountScopes(Arrays.asList(AnalyticsScopes.ANALYTICS_READONLY))
        .setServiceAccountPrivateKeyFromP12File(analyticsPrivateKeyFile).build();

    Analytics analyticsService = new Analytics.Builder(HTTP_TRANSPORT, JSON_FACTORY, credential)
        .setApplicationName(<your application name>)
        .build();


    String startDate = "2014-01-03";
    String endDate = "2014-03-03";
    String mertrics = "ga:sessions,ga:timeOnPage";

    // Use the analytics object build a query
    Get get = analyticsService.data().ga().get(tableId, startDate, endDate, mertrics);
    get.setDimensions("ga:city");
    get.setFilters("ga:country==Canada");
    get.setSort("-ga:sessions");

    // Run the query
    GaData data = get.execute();

    // Do something with the data
    if (data.getRows() != null) {
        for (List<String> row : data.getRows()) {
            System.out.println(row);
        }
    }

}
1

Здравствуйте, я нашел решение, у меня работает

Вы должны изменить это

immediate: true 

в

immediate: false

и похоже

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

Я добавляю ответ PHP - вы можете настроить его или преобразовать в код garb / ruby.

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

Create an app in the API Console
По сути, вы идете в Google API Console и создаете приложение.
Включите Google Analytics на вкладке служб.
На вкладке «Доступ к API» создайте новый идентификатор OAuth (кнопка «Создать другой идентификатор клиента ...»), выберитеservice account и загрузите свой закрытый ключ (Создать новый ключ ... ссылка). Вам придется загрузить ключ на ваш веб-сервер позже.

На странице доступа к API в разделе Учетная запись службы скопируйте адрес электронной почты (@ developer.gserviceaccount.com) и добавьте нового пользователя с этим адресом электронной почты в свой профиль Google Analytics.If you do not do this, you'll get some nice errors

Code
Загрузите последнюю версию Google PHP Client с SVN (из командной строкиsvn checkout http://google-api-php-client.googlecode.com/svn/trunk/ google-api-php-client-read-only).

Теперь вы можете получить доступ к API Analytics в коде:

require_once 'Google_Client.php';              
require_once 'contrib/Google_AnalyticsService.php';

$keyfile = 'dsdfdss0sdfsdsdfsdf44923dfs9023-privatekey.p12';

// Initialise the Google Client object
$client = new Google_Client();
$client->setApplicationName('Your product name');

$client->setAssertionCredentials(
    new Google_AssertionCredentials(
        '[email protected]',
        array('https://www.googleapis.com/auth/analytics.readonly'),
        file_get_contents($keyfile)
    )
);

// Get this from the Google Console, API Access page
$client->setClientId('11122233344.apps.googleusercontent.com');
$client->setAccessType('offline_access');
$analytics = new Google_AnalyticsService($client);

// We have finished setting up the connection,
// now get some data and output the number of visits this week.

// Your analytics profile id. (Admin -> Profile Settings -> Profile ID)
$analytics_id   = 'ga:1234';
$lastWeek       = date('Y-m-d', strtotime('-1 week'));
$today          = date('Y-m-d');

try {
    $results = $analytics->data_ga->get($analytics_id,
                        $lastWeek,
                        $today,'ga:visits');
    echo '<b>Number of visits this week:</b> ';
    echo $results['totalsForAllResults']['ga:visits'];
} catch(Exception $e) {
    echo 'There was an error : - ' . $e->getMessage();
}
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededstackoverflow.com/questions/13465689/…
Error: User Rate Limit Exceeded
3

Вы можете использовать токен обновления. Сохраните токен обновления в БД или в защищенном конфигурационном файле, а затем используйте его для отображения статистики.

Автономный доступ к API Google с помощью маркера обновления OAuth 2.0 даст вам представление о том, как перехватить и сохранить токен обновления.

Смотрите такжеИспользование OAuth 2.0 для приложений веб-сервера - автономный доступ

0

У Google есть «Сервисный аккаунт». (Вызывает API Google от имени вашего приложения, а не от конечного пользователя), но способ его работы несколько иной, поскольку вместо него будут использоваться токены доступа, а не закрытый ключ.

Вы можете найти более подробную информацию наhttps://developers.google.com/accounts/docs/OAuth2ServiceAccount

Error: User Rate Limit Exceeded

Похожие вопросы