class Embulk::Input::GoogleAdwords
Constants
- API_VERSION
Public Class Methods
resume(task, columns, count) { |task, columns, count| ... }
click to toggle source
# File lib/embulk/input/google_adwords.rb, line 59 def self.resume(task, columns, count, &control) task_reports = yield(task, columns, count) next_config_diff = {} return next_config_diff end
transaction(config, &control)
click to toggle source
# File lib/embulk/input/google_adwords.rb, line 10 def self.transaction(config, &control) # configuration code: task = { "adwords_api_options" => { "authentication" => { "method" => config.param("auth_method", :string), "oauth2_client_id" => config.param("auth_oauth2_client_id", :string), "oauth2_client_secret" => config.param("auth_oauth2_client_secret", :string), "developer_token" => config.param("auth_developer_token", :string), "client_customer_id" => config.param("auth_client_customer_id", :string), "user_agent" => config.param("auth_user_agent", :string), "oauth2_token" => { "access_token" => config.param("oauth2_access_token", :string), "refresh_token" => config.param("oauth2_refresh_token", :string), "issued_at" => config.param("oauth2_issued_at", :string), "expires_in" => config.param("oauth2_expires_in", :string), "id_token" => "" } }, "service" => { "environment" => "PRODUCTION" }, "connection" => { "enable_gzip" => false }, "library" => { "log_level" => config.param("log_level", :string, default: "INFO"), "skip_report_header" => true, "skip_column_header" => true, "skip_report_summary" => true } }, "request_timeout" =>config.param("request_timeout", :integer, default:60*60*2), # default 2 hours "report_type" => config.param("report_type", :string), "fields" => config.param("fields", :array), "conditions" => config.param("conditions", :array, default: []), "daterange" => config.param("daterange", :string, default: "") } raise ConfigError.new("The parameter report_type must not be empty.") if task["report_type"].empty? raise ConfigError.new("The parameter fields must not be empty array.") if task["fields"].empty? columns = task["fields"].map do |col_name| Column.new(nil, col_name, :string) end resume(task, columns, 1, &control) end
Public Instance Methods
init()
click to toggle source
TODO def self.guess(config)
sample_records = [ {"example"=>"a", "column"=>1, "value"=>0.1}, {"example"=>"a", "column"=>2, "value"=>0.2}, ] columns = Guess::SchemaGuess.from_hash_records(sample_records) return {"columns" => columns}
end
# File lib/embulk/input/google_adwords.rb, line 76 def init # initialization code: end
query_report_results(query, &block)
click to toggle source
# File lib/embulk/input/google_adwords.rb, line 116 def query_report_results(query, &block) # AdwordsApi::Api adwords = AdwordsApi::Api.new(task["adwords_api_options"]) # Get report utilities for the version. report_utils = adwords.report_utils(API_VERSION) # Allowing rows with zero impressions to show is not supported with AWQL. adwords.include_zero_impressions = false report_utils.get_stream_helper_with_awql(query, 'TSV').each_line do |line| row = line.split("\t") block.call row end end
run()
click to toggle source
# File lib/embulk/input/google_adwords.rb, line 80 def run selectors = task["fields"].join(", ") conditions = task["conditions"].join(" AND ") query = "SELECT " + selectors + " FROM " + task["report_type"] query << " WHERE " + conditions unless conditions.empty? query << " DURING " + task["daterange"] unless task["daterange"].empty? begin Timeout::timeout(task["request_timeout"]) do query_report_results(query) do |row| page_builder.add row end end # Authorization error. rescue AdsCommon::Errors::OAuth2VerificationRequired => e raise ConfigError.new(e.message) # HTTP errors. rescue AdsCommon::Errors::HttpError => e raise ConfigError.new(e.message) # API errors. rescue AdwordsApi::Errors::ReportError => e raise ConfigError.new(e.message) end page_builder.finish task_report = {} return task_report end