1

I am trying to access the AdSense Management API using ruby. They recommend using their generic Google-API client library:

http://code.google.com/p/google-api-ruby-client/#Google_AdSense_Management_API

This hasn't been very helpful and I have run into errors:

Faraday conflicts in google_drive and google-api-client

Where should I start in order to get access to my AdSense data?

Thanks in advance.

Community
  • 1
  • 1
Richard Burton
  • 2,230
  • 6
  • 34
  • 49

1 Answers1

3

Unfortunately, we haven't prepared any sample code for the AdSense Management API... yet! As you point out, though, the client library is generic, and should work with any of the newer Google APIs, so some of the other samples may help.

If you're running into any specific issues, please create a question focused on those and point me to it, and I'll do my best to help.

If you want a quick sample to get started, I can cook that up for you, but we should make sure the issues you're running into have to do with the AdSense Management API itself, and not just the client library, as the one you were linking to.

[Edit] Here's a quick sample, based on Sinatra:

#!/usr/bin/ruby
require 'rubygems'
require 'sinatra'
require 'google/api_client'

FILENAME = 'auth.obj'
OAUTH_CLIENT_ID = 'INSERT_OAUTH2_CLIENT_ID_HERE'
OAUTH_CLIENT_SECRET = 'INSERT_OAUTH2_CLIENT_SECRET_HERE'

before do
  @client = Google::APIClient.new
  @client.authorization.client_id = OAUTH_CLIENT_ID
  @client.authorization.client_secret = OAUTH_CLIENT_SECRET
  @client.authorization.scope = 'https://www.googleapis.com/auth/adsense'
  @client.authorization.redirect_uri = to('/oauth2callback')
  @client.authorization.code = params[:code] if params[:code]

  # Load the access token here if it's available
  if File.exist?(FILENAME)
    serialized_auth = IO.read(FILENAME)
    @client.authorization = Marshal::load(serialized_auth)
  end
  if @client.authorization.refresh_token && @client.authorization.expired?
    @client.authorization.fetch_access_token!
  end
  @adsense = @client.discovered_api('adsense', 'v1.1')
  unless @client.authorization.access_token || request.path_info =~ /^\/oauth2/
    redirect to('/oauth2authorize')
  end
end

get '/oauth2authorize' do
  redirect @client.authorization.authorization_uri.to_s, 303
end

get '/oauth2callback' do
  @client.authorization.fetch_access_token!
  # Persist the token here
  serialized_auth = Marshal::dump(@client.authorization)
  File.open(FILENAME, 'w') do |f|
    f.write(serialized_auth)
  end
  redirect to('/')
end

get '/' do

  call = {
    :api_method => @adsense.reports.generate,
    :parameters => {
      'startDate' => '2011-01-01',
      'endDate' => '2011-08-31',
      'dimension' => ['MONTH', 'CUSTOM_CHANNEL_NAME'],
      'metric' => ['EARNINGS', 'TOTAL_EARNINGS']
    }
  }

  response = @client.execute(call)
  output = ''

  if response && response.data && response.data['rows'] &&
      !response.data['rows'].empty?
    result = response.data

    output << '<table><tr>'
    result['headers'].each do |header|
      output << '<td>%s</td>' % header['name']
    end
    output << '</tr>'

    result['rows'].each do |row|
      output << '<tr>'
      row.each do |column|
        output << '<td>%s</td>' % column
      end
      output << '</tr>'
    end

    output << '</table>'
  else
    output << 'No rows returned'
  end

  output
end
Sérgio Gomes
  • 720
  • 5
  • 14
  • Hi Sérgio. I think the problem I am having right now is with the Faraday conflicts. However I would **really** appreciate any guidance code on how I could use the AdSense API to get all individual revenue totals by channel. Would it be possible to show me how to get started? – Richard Burton Jul 26 '12 at 09:56
  • 2
    Added a sample to the response. – Sérgio Gomes Jul 26 '12 at 11:48
  • Thanks so much Sérgio. I don't want to pin you to a date but are there any rough estimates on Rails examples? – Richard Burton Jul 26 '12 at 19:09
  • 1
    Just a quick reply to say we now have proper Ruby samples in our [samples GitHub repository](https://github.com/googleads/googleads-adsense-examples/tree/master/ruby/v1.x). Still no Rails, I'm afraid... – Sérgio Gomes Jun 05 '14 at 12:47