2013-11-20 3 views
1

Я пытаюсь использовать эту Ruby Google Analytics API Dashing widget которого рубин файлОшибка с рубином Google Analytics API

require 'google/api_client' 
require 'date' 


    # Update these to match your own apps credentials 
    service_account_email = '[YOUR SERVICE ACCOUNT EMAIL]' # Email of service account 
    key_file = 'path/to/your/keyfile.p12' # File containing your private key 
    key_secret = 'notasecret' # Password to unlock private key 
    profileID = '[YOUR PROFILE ID]' # Analytics profile ID. 

    # Get the Google API client 
    client = Google::APIClient.new(:application_name => '[YOUR APPLICATION NAME]', 
     :application_version => '0.01') 

    # Load your credentials for the service account 
    key = Google::APIClient::KeyUtils.load_from_pkcs12(key_file, key_secret) 
    client.authorization = Signet::OAuth2::Client.new(
     :token_credential_uri => 'https://accounts.google.com/o/oauth2/token', 
     :audience => 'https://accounts.google.com/o/oauth2/token', 
     :scope => 'https://www.googleapis.com/auth/analytics.readonly', 
     :issuer => service_account_email, 
     :signing_key => key) 

    # Start the scheduler 
    SCHEDULER.every '1m', :first_in => 0 do 

     # Request a token for our service account 
     client.authorization.fetch_access_token! 

     # Get the analytics API 
     analytics = client.discovered_api('analytics','v3') 

     # Start and end dates 
     startDate = DateTime.now.strftime("%Y-%m-01") # first day of current month 
     endDate = DateTime.now.strftime("%Y-%m-%d") # now 

     # Execute the query 
     visitCount = client.execute(:api_method => analytics.data.ga.get, :parameters => { 
     'ids' => "ga:" + profileID, 
     'start-date' => startDate, 
     'end-date' => endDate, 
     # 'dimensions' => "ga:month", 
     'metrics' => "ga:visitors", 
     # 'sort' => "ga:month" 
     }) 

     # Update the dashboard 
     send_event('visitor_count', { current: visitCount.data.rows[0][0] }) 
    end 

Однако я получаю ошибку Undefined method '[]' for nil:NilClass для второй последней строки. Может ли кто-нибудь пролить свет на то, что здесь происходит?

EDIT: Теперь я знаю, что visitCount.data - это массив объектов NIL. Есть ли какая-либо диагностика, которую я могу выполнить, чтобы убедиться, что API правильно подключен? Может ли кто-нибудь предположить возможную причину, почему это происходит?

+0

Либо 'visitCount.data.rows', либо' visitCount.data.rows [0] 'возвращает' nil'. Первый шаг - выяснить, что и почему. –

+0

Похоже, что visitCount.data.rows - объект Array, а visitCount.data.rows [0] - объект NilClass. – user1893354

ответ

2

Попробуйте это, перед потоковой передачей событию

if visitCount.data.rows[0].empty? 
    # assign some default 
    output = -1 
else 
    output = visitCount.data.rows[0][0] 
end 

# Update the dashboard 
send_event('visitor_count', { current: output }) 
+0

Я пробовал это, и он возвратил ту же ошибку, что означает, что visitCount не равен нулю. Однако, согласно моему комментарию, visitCount.data.rows [0] - это нулевой объект. – user1893354

+0

Как насчет выше, используя пустой? – sam

0

OK оказывается, что я был дан неправильный идентификатор профиля. Удивительно, что не было ошибки, говорящей что-то вроде «Этот идентификатор профиля не существует». Это было бы более полезно. В любом случае у меня есть правильный идентификатор профиля, и он работает. В случае, если кому-то интересно, чтобы найти идентификатор профиля, вы переходите к интересующему вас аналитическому профилю, а конец URL-адреса имеет что-то вроде pXXXXXXXX, где X - ваш идентификатор вашего профиля.

Смежные вопросы