2017-01-02 6 views
0

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

google-api-ruby-client похоже на хорошее место для начала, и я даже нашел useful sample code, который помогает много, но я фальсифицирую, чтобы правильно разрешать мои запросы.

В том же образце кода есть часть, которая shows how to do it, но я не знаю, где взять необходимые ключи.

То, что я сделал до сих пор:

  1. создал проект по https://console.developers.google.com
  2. Включено Analytics API
  3. на основе мастера, я создал и загрузить ключ учетной записи службы, выглядит следующим образом:

    { 
        "type": "service_account", 
        "project_id": "xxx" 
        "provate_key_id": "xxx", 
        "private_key": "xxx", 
        "client_email": "xxx", 
        "client_id": "xxx", 
        "auth_uri": "https://accounts.google.com/o/oauth2/auth", 
        "token_uri": "https://accounts.google.com/o/oauth2/token", 
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", 
        "client_x509_cert_url": "xxx" 
    } 
    

Bu t, я не могу понять, как его использовать. Возможно, я допустил ошибку, и мне нужно взять с собой другой ключ от Google?

ответ

1

В связи с природой API Google и требованиями безопасности предприятия это немного сложнее, чем ваш средний RESTful, API Silicon Valley. Мне нужно было сделать это в прошлом проекте, и я думаю, что это поможет.

Прежде всего, чтобы запросить нужные мне данные, я использовал Legato, который сам описывает себя как «Ruby Client для Google Analytics Core Reporting and Management API».

Чтобы получить работу Legato, вам необходимо получить токен OAuth от Google, срок действия которого истекает через некоторое время.

class AuthToken 
    def self.retrieve 
    new.retrieve 
    end 

    def retrieve(expires_in = 1.hour) 
    client = Google::APIClient.new(application_name: 'YOUR APP NAME', application_version: '0.1') 
    client.authorization = service_account('https://www.googleapis.com/auth/analytics.readonly', private_key).authorize 
    OAuth2::AccessToken.new(oauth_client, client.authorization.access_token, expires_in: expires_in) 
    end 

private 

    def oauth_client 
    OAuth2::Client.new('', '', { 
     authorize_url: authorize_url, 
     token_url: token_url 
    }) 
    end 

    def service_account(scope, key) 
    Google::APIClient::JWTAsserter.new(ENV['GOOGLE_SERVICE_EMAIL'], scope, key) 
    end 

    def private_key 
    @private_key ||= Google::APIClient::PKCS12.load_key(
     ENV['GOOGLE_PRIVATE_KEY_PATH'], 
     ENV['GOOGLE_PRIVATE_KEY_PASSPHRASE'] 
    ) 
    end 

    def authorize_url 
    'https://accounts.google.com/o/oauth2/auth' 
    end 

    def token_url 
    'https://accounts.google.com/o/oauth2/token' 
    end 
end 

Это предполагает, у вас есть три переменные среды, соответствующие данные аутентификации, которые Google предоставил вам:

  1. GOOGLE_SERVICE_EMAIL, который так же, как клиент электронной почты у вас есть свой объект JSON.
  2. GOOGLE_PRIVATE_KEY_PATH, который указывает на файл .p12, который вы должны были загрузить одновременно.
  3. GOOGLE_PRIVATE_KEY_PASSPHRASE, который должен буквально быть «notasecret».

Вы можете использовать услугу с легато, как так:

class ArticlePageviews 
    extend Legato::Model 
    metrics :pageviews 
    dimensions :page_path 
    filter(:only_articles) { contains :page_path, '/articles/' } 
end 

ga_user = Legato::User.new(AuthToken.retrieve) 
ga_profile = ga_user.profiles.first 

ArticlePageviews.only_articles.results(ga_profile) 

удачи!