Methods
D
E
G
M
Class Public methods
downloadCsvReport(wrapper, job_id, report_xml=nil)

Extension method — Download and return report data in CSV format.

Warning: this method is blocking for the calling thread.

Args:

  • wrapper: the service wrapper object for any API methods that need to be called
  • job_id: the job id for the report to be downloaded
  • xml: optional parameter used for testing and debugging

Returns: The CSV data for the report (as a string)

# File lib/adwords4r/apiextensions.rb, line 121
    def self.downloadCsvReport(wrapper, job_id, report_xml=nil)
      # Get XML report data.
      report_xml = downloadXmlReport(wrapper, job_id) if report_xml.nil?

      begin
        # Construct DOM object.
        doc = REXML::Document.new(report_xml)

        # Get data columns.
        columns = []
        doc.elements.each('report/table/columns/column') do |column_elem|
          name = column_elem.attributes['name']
          columns << name unless name.nil?
        end

        # Get data rows.
        rows = []
        doc.elements.each('report/table/rows/row') do |row_elem|
          rows << row_elem.attributes unless row_elem.attributes.nil?
        end

        # Build CSV
        csv = ''
        CSV::Writer.generate(csv) do |writer|
          writer << columns
          rows.each do |row|
            row_values = []
            columns.each { |column| row_values << row[column] }
            writer << row_values
          end
        end

        return csv
      rescue REXML::ParseException => e
        # Error parsing XML
        raise AdWords::Error::Error,
            "Error parsing report XML: %s\nSource: %s" % [e, e.backtrace.first]
      end
    end
downloadXmlReport(wrapper, job_id)

Extension method — Download and return report data in XML format.

Warning: this method is blocking for the calling thread.

Args:

  • wrapper: the service wrapper object for any API methods that need to be called
  • job_id: the job id for the report to be downloaded

Returns: The xml for the report (as a string)

# File lib/adwords4r/apiextensions.rb, line 74
    def self.downloadXmlReport(wrapper, job_id)
      sleep_interval = 30

      # Repeatedly check the report status until it is finished.
      # 'Pending' and 'InProgress' statuses indicate the job is still being run.
      status = wrapper.getReportJobStatus(job_id).getReportJobStatusReturn
      while status != 'Completed' && status != 'Failed'
        sleep(sleep_interval)
        status = wrapper.getReportJobStatus(job_id).getReportJobStatusReturn
      end

      if status == 'Completed'
        report_url =
            wrapper.getReportDownloadUrl(job_id).getReportDownloadUrlReturn

        # Download the report via the HTTPClient library and return its
        # contents. The report is an XML document; the actual element names vary
        # depending on the type of report run and columns requested.
        begin
          client = HTTPClient.new
          return client.get_content(report_url)
        rescue Errno::ECONNRESET, SOAP::HTTPStreamError, SocketError => e
          # This exception indicates a connection-level error.
          # In general, it is likely to be transitory.
          raise AdWords::Error::Error, "Connection Error: %s\nSource: %s" %
              [e, e.backtrace.first]
        end
      else
        # Reports that pass validation will normally not fail, but if there is
        # an error in the report generation service it can sometimes happen.
        raise AdWords::Error::Error, 'Report generation failed.'
      end
    end
extensions()

Return list of all extension methods, indexed by version and service.

# File lib/adwords4r/apiextensions.rb, line 46
    def self.extensions
      return @@extensions
    end
getClientUnitsUsage(wrapper, start_date, end_date)

Extension method — Gets the quota usage per child of the entire account tree below the root user. That is, for each child that is a client manager, all units below that client manager are summed upwards. The result is very useful for invoicing sub-MCCs that may have many clients that units may be spent on.

Note: unit data is not available in real time.

Args:

  • wrapper: the service wrapper object for any API methods that need to be called
  • start_date: starting date for unit spend count (as a Date)
  • end_date: starting date for unit spend count (as a Date)

Returns:

  • Hash of account to unit usage,
 { 'account1@domain.tld' => 10,
   'account2@domain.tld' => 0, ...}
  • List of double counted children (account emails)
# File lib/adwords4r/apiextensions.rb, line 214
    def self.getClientUnitsUsage(wrapper, start_date, end_date)
      # Create a new AdWords::API object to ensure thread-safety (we'll need to
      # change the clientEmail)
      adwords = AdWords::API.new(wrapper.api.credentials.dup)
      adwords.credentials.set_header('clientEmail', '')
      # Call unit_adder on the main user
      unit_map = client_unit_adder(adwords, start_date, end_date)
      # Pass back the spent unit information to the main AdWords::API object
      wrapper.api.mutex.synchronize do
        wrapper.api.last_units = adwords.total_units
        wrapper.api.total_units += adwords.total_units
      end
      return unit_map
    end
getMethodUsage(wrapper, start_date, end_date)

Extension method — Get a mapping between API methods and the number of units used through them for a given amount of time.

Running this helper method will consume 71 units.

Note: unit data is not available in real time.

Args:

  • wrapper: the service wrapper object for any API methods that need to be called
  • start_date: starting date for unit spend count (as a Date)
  • end_date: starting date for unit spend count (as a Date)

Returns: Hash of service.method to the number of units used, e.g.,

 { 'AccountService.getAccountInfo' => 10,
   'AccountService.getClientAccountInfos' => 0, ...}
# File lib/adwords4r/apiextensions.rb, line 179
    def self.getMethodUsage(wrapper, start_date, end_date)
      op_rates = AdWords::Utils.get_operation_rates
      usage = {}

      op_rates.each do |op|
        version, service, method = op
        if version == 'v13'
          usage[service + '.' + method] = wrapper.getUnitCountForMethod(service,
              method, start_date, end_date).getUnitCountForMethodReturn
        end
      end

      return usage
    end
methods()

Return the parameter list for every extension method.

# File lib/adwords4r/apiextensions.rb, line 51
    def self.methods
      return @@methods
    end