user1893354
user1893354

Reputation: 5938

Error with Ruby Google Analytics API

I am trying to use this Ruby Google Analytics API Dashing widget whose Ruby file is

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

However I am getting the error Undefined method '[]' for nil:NilClass for the second last line. Can anyone shed some light on what is going on here?

EDIT: I now know that visitCount.data is an array of NIL objects. Are there any diagnostics I can perform to make sure that that the API is connecting correctly? Can anyone suggest a possible reason why this is happening?

Upvotes: 1

Views: 572

Answers (2)

user1893354
user1893354

Reputation: 5938

OK it turns out that I was given the incorrect profile ID. It's kind of surprising that there was no error saying something like "This profile ID does not exist". That would have been way more helpful. Anyways I have the correct profile ID now and it works. In case anyone was wondering, to find the profile ID, you navigate to the analytics profile that you are interested in and the end of the url has something like pXXXXXXXX where the X's are your profile ID.

Upvotes: 0

sam
sam

Reputation: 335

Try this, before streaming the event

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 })

Upvotes: 2

Related Questions