class Embulk::Input::SearchAnalytics::Client

Public Class Methods

new(task, is_preview = false) click to toggle source
# File lib/embulk/input/search_analytics/client.rb, line 6
def initialize(task, is_preview = false)
  @task = task
  @is_preview = is_preview
end

Public Instance Methods

invoke() click to toggle source
# File lib/embulk/input/search_analytics/client.rb, line 11
def invoke
  response = []
  start_row = 0
  loop do
    response << self.query(@task["site_url"], {
      :row_limit => @task["row_limit"],
      :dimensions => @task["dimensions"],
      :dimension_filter_groups => @task["dimension_filter_groups"],
      :search_type => @task["search_type"],
      :start_date => @task["start_date"],
      :end_date => @task["end_date"],
      :start_row => start_row,
    })
    break if response.last.length < @task["row_limit"]
    start_row += @task["row_limit"]
  end
  response.flatten
end
query(site_url, params) click to toggle source
# File lib/embulk/input/search_analytics/client.rb, line 30
def query(site_url, params)
  unless params[:dimension_filter_groups].nil?
    params[:dimension_filter_groups] = JSON.parse(params[:dimension_filter_groups].to_json, symbolize_names: true)
  end
  self.service.query_search_analytics(site_url, params, {}).rows.collect do |row|
    item = {}
    @task["dimensions"].each_with_index do |dim, idx|
      item[dim] = row.keys[idx]
    end
    item["clicks"] = row.clicks.to_i
    item["impressions"] = row.impressions.to_i
    item["ctr"] = row.ctr.to_f
    item["position"] = row.position.to_f
    item
  end
end
service() click to toggle source
# File lib/embulk/input/search_analytics/client.rb, line 47
def service
  webmasters_service = ::Google::Apis::WebmastersV3::WebmastersService.new
  webmasters_service.authorization = Signet::OAuth2::Client.new({
    :token_credential_uri => @task["token_credential_uri"],
    :audience => @task["audience"],
    :client_id => @task["client_id"],
    :client_secret => @task["client_secret"],
    :refresh_token => @task["refresh_token"],
    :scope => @task["scope"],
  })
  webmasters_service.authorization.fetch_access_token!
  webmasters_service
end