google-adwords-api 1.5.0 → 1.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/COPYING +0 -0
- data/ChangeLog +4 -0
- data/README.md +9 -236
- data/lib/adwords_api.rb +2 -234
- metadata +8 -134
- data/adwords_api.yml +0 -53
- data/lib/adwords_api/api_config.rb +0 -221
- data/lib/adwords_api/batch_job_utils.rb +0 -334
- data/lib/adwords_api/credential_handler.rb +0 -96
- data/lib/adwords_api/errors.rb +0 -110
- data/lib/adwords_api/incremental_upload_helper.rb +0 -75
- data/lib/adwords_api/query_utils/query_builder.rb +0 -41
- data/lib/adwords_api/query_utils/report_query.rb +0 -30
- data/lib/adwords_api/query_utils/report_query_builder.rb +0 -82
- data/lib/adwords_api/query_utils/service_query.rb +0 -62
- data/lib/adwords_api/query_utils/service_query_builder.rb +0 -83
- data/lib/adwords_api/query_utils/where_builder.rb +0 -97
- data/lib/adwords_api/report_header_handler.rb +0 -80
- data/lib/adwords_api/report_stream.rb +0 -70
- data/lib/adwords_api/report_utils.rb +0 -383
- data/lib/adwords_api/utils.rb +0 -56
- data/lib/adwords_api/utils_reporter.rb +0 -58
- data/lib/adwords_api/v201809/account_label_service.rb +0 -46
- data/lib/adwords_api/v201809/account_label_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_customizer_feed_service.rb +0 -46
- data/lib/adwords_api/v201809/ad_customizer_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_ad_service.rb +0 -62
- data/lib/adwords_api/v201809/ad_group_ad_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_bid_modifier_service.rb +0 -54
- data/lib/adwords_api/v201809/ad_group_bid_modifier_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_criterion_service.rb +0 -62
- data/lib/adwords_api/v201809/ad_group_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_extension_setting_service.rb +0 -54
- data/lib/adwords_api/v201809/ad_group_extension_setting_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_feed_service.rb +0 -54
- data/lib/adwords_api/v201809/ad_group_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_group_service.rb +0 -62
- data/lib/adwords_api/v201809/ad_group_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_param_service.rb +0 -46
- data/lib/adwords_api/v201809/ad_param_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/ad_service.rb +0 -46
- data/lib/adwords_api/v201809/ad_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/adwords_user_list_service.rb +0 -62
- data/lib/adwords_api/v201809/adwords_user_list_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/asset_service.rb +0 -46
- data/lib/adwords_api/v201809/asset_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/batch_job_service.rb +0 -54
- data/lib/adwords_api/v201809/batch_job_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/bidding_strategy_service.rb +0 -54
- data/lib/adwords_api/v201809/bidding_strategy_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/budget_order_service.rb +0 -54
- data/lib/adwords_api/v201809/budget_order_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/budget_service.rb +0 -54
- data/lib/adwords_api/v201809/budget_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_bid_modifier_service.rb +0 -54
- data/lib/adwords_api/v201809/campaign_bid_modifier_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_criterion_service.rb +0 -54
- data/lib/adwords_api/v201809/campaign_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_extension_setting_service.rb +0 -54
- data/lib/adwords_api/v201809/campaign_extension_setting_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_feed_service.rb +0 -54
- data/lib/adwords_api/v201809/campaign_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_group_performance_target_service.rb +0 -46
- data/lib/adwords_api/v201809/campaign_group_performance_target_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_group_service.rb +0 -46
- data/lib/adwords_api/v201809/campaign_group_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_service.rb +0 -62
- data/lib/adwords_api/v201809/campaign_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/campaign_shared_set_service.rb +0 -54
- data/lib/adwords_api/v201809/campaign_shared_set_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/constant_data_service.rb +0 -110
- data/lib/adwords_api/v201809/constant_data_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/conversion_tracker_service.rb +0 -54
- data/lib/adwords_api/v201809/conversion_tracker_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/custom_affinity_service.rb +0 -62
- data/lib/adwords_api/v201809/custom_affinity_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/customer_extension_setting_service.rb +0 -54
- data/lib/adwords_api/v201809/customer_extension_setting_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/customer_feed_service.rb +0 -54
- data/lib/adwords_api/v201809/customer_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/customer_negative_criterion_service.rb +0 -54
- data/lib/adwords_api/v201809/customer_negative_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/customer_service.rb +0 -62
- data/lib/adwords_api/v201809/customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/customer_sync_service.rb +0 -38
- data/lib/adwords_api/v201809/customer_sync_service_registry.rb +0 -47
- data/lib/adwords_api/v201809/data_service.rb +0 -94
- data/lib/adwords_api/v201809/data_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/draft_async_error_service.rb +0 -46
- data/lib/adwords_api/v201809/draft_async_error_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/draft_service.rb +0 -54
- data/lib/adwords_api/v201809/draft_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/feed_item_service.rb +0 -54
- data/lib/adwords_api/v201809/feed_item_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/feed_item_target_service.rb +0 -54
- data/lib/adwords_api/v201809/feed_item_target_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/feed_mapping_service.rb +0 -54
- data/lib/adwords_api/v201809/feed_mapping_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/feed_service.rb +0 -54
- data/lib/adwords_api/v201809/feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/label_service.rb +0 -54
- data/lib/adwords_api/v201809/label_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/location_criterion_service.rb +0 -46
- data/lib/adwords_api/v201809/location_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/managed_customer_service.rb +0 -78
- data/lib/adwords_api/v201809/managed_customer_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/media_service.rb +0 -54
- data/lib/adwords_api/v201809/media_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/offline_call_conversion_feed_service.rb +0 -38
- data/lib/adwords_api/v201809/offline_call_conversion_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/offline_conversion_adjustment_feed_service.rb +0 -38
- data/lib/adwords_api/v201809/offline_conversion_adjustment_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/offline_conversion_feed_service.rb +0 -38
- data/lib/adwords_api/v201809/offline_conversion_feed_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/offline_data_upload_service.rb +0 -46
- data/lib/adwords_api/v201809/offline_data_upload_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/report_definition_service.rb +0 -38
- data/lib/adwords_api/v201809/report_definition_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/shared_criterion_service.rb +0 -54
- data/lib/adwords_api/v201809/shared_criterion_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/shared_set_service.rb +0 -54
- data/lib/adwords_api/v201809/shared_set_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/targeting_idea_service.rb +0 -38
- data/lib/adwords_api/v201809/targeting_idea_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/traffic_estimator_service.rb +0 -38
- data/lib/adwords_api/v201809/traffic_estimator_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/trial_async_error_service.rb +0 -46
- data/lib/adwords_api/v201809/trial_async_error_service_registry.rb +0 -46
- data/lib/adwords_api/v201809/trial_service.rb +0 -54
- data/lib/adwords_api/v201809/trial_service_registry.rb +0 -46
- data/lib/adwords_api/version.rb +0 -24
|
@@ -1,82 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2018, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Class with methods to aid in building AWQL for reports.
|
|
19
|
-
|
|
20
|
-
require 'adwords_api/query_utils/query_builder'
|
|
21
|
-
require 'adwords_api/query_utils/report_query'
|
|
22
|
-
|
|
23
|
-
module AdwordsApi
|
|
24
|
-
class ReportQueryBuilder < QueryBuilder
|
|
25
|
-
def initialize(api)
|
|
26
|
-
super(api)
|
|
27
|
-
@select = nil
|
|
28
|
-
@from = nil
|
|
29
|
-
@during_range = nil
|
|
30
|
-
@during_start = nil
|
|
31
|
-
@during_end = nil
|
|
32
|
-
yield self if block_given?
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def configure()
|
|
36
|
-
yield self
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def select(*fields)
|
|
40
|
-
@select = fields
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def from(report_name)
|
|
44
|
-
@from = report_name
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def during_date_range(date_range)
|
|
48
|
-
@during_range = date_range
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
def during(start_date, end_date)
|
|
52
|
-
@during_start = start_date
|
|
53
|
-
@during_end = end_date
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def build()
|
|
57
|
-
raise ArgumentError,
|
|
58
|
-
'Must specify SELECT clause for valid AWQL' if @select.nil?
|
|
59
|
-
raise ArgumentError,
|
|
60
|
-
'Must specify FROM clause for valid AWQL' if @from.nil?
|
|
61
|
-
if !@during_range.nil? && (!@during_start.nil? || !@during_end.nil?)
|
|
62
|
-
raise ArgumentError,
|
|
63
|
-
'Cannot specify both date range and start/end dates.'
|
|
64
|
-
end
|
|
65
|
-
result = sprintf('SELECT %s', @select.join(', '))
|
|
66
|
-
result += sprintf(' FROM %s', @from)
|
|
67
|
-
result += build_where()
|
|
68
|
-
if !@during_range.nil?
|
|
69
|
-
result += sprintf(' DURING %s', @during_range)
|
|
70
|
-
elsif !@during_start.nil? || !@during_end.nil?
|
|
71
|
-
if @during_start.nil?
|
|
72
|
-
raise ArgumentError, 'Cannot specify end date without start date.'
|
|
73
|
-
elsif @during_end.nil?
|
|
74
|
-
raise ArgumentError, 'Cannot specify start date without end date.'
|
|
75
|
-
end
|
|
76
|
-
result += sprintf(' DURING %s,%s', @during_start, @during_end)
|
|
77
|
-
end
|
|
78
|
-
@api.utils_reporter.report_query_builder_used()
|
|
79
|
-
return ReportQuery.new(result)
|
|
80
|
-
end
|
|
81
|
-
end
|
|
82
|
-
end
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2018, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Class to hold a generated AWQL query and aid in paging for services.
|
|
19
|
-
|
|
20
|
-
module AdwordsApi
|
|
21
|
-
class ServiceQuery
|
|
22
|
-
def initialize(query, start_index, page_size)
|
|
23
|
-
@query = query
|
|
24
|
-
@start_index = start_index
|
|
25
|
-
@page_size = page_size
|
|
26
|
-
end
|
|
27
|
-
|
|
28
|
-
def has_next(page)
|
|
29
|
-
raise ArgumentError,
|
|
30
|
-
'Cannot page through query with no LIMIT clause.' if @start_index.nil?
|
|
31
|
-
return @start_index + @page_size < page[:total_num_entries]
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
# Determining whether another page exists when dealing with bid landscapes
|
|
35
|
-
# is different from other types of queries. Use this method for those cases.
|
|
36
|
-
def has_next_landscape_page(page)
|
|
37
|
-
raise ArgumentError,
|
|
38
|
-
'Cannot page through query with no LIMIT clause.' if @start_index.nil?
|
|
39
|
-
return false unless page[:entries]
|
|
40
|
-
total_landscape_points_in_page = 0
|
|
41
|
-
page[:entries].each do |landscape|
|
|
42
|
-
total_landscape_points_in_page += landscape[:landscape_points].size
|
|
43
|
-
end
|
|
44
|
-
return total_landscape_points_in_page >= @page_size
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def next_page()
|
|
48
|
-
raise ArgumentError,
|
|
49
|
-
'Cannot page through query with no LIMIT clause.' if @start_index.nil?
|
|
50
|
-
@start_index += @page_size
|
|
51
|
-
return self
|
|
52
|
-
end
|
|
53
|
-
|
|
54
|
-
def to_s()
|
|
55
|
-
query = @query
|
|
56
|
-
unless @start_index.nil?
|
|
57
|
-
query += sprintf(' LIMIT %s,%s', @start_index, @page_size)
|
|
58
|
-
end
|
|
59
|
-
return query
|
|
60
|
-
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2018, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Class with methods to aid in building AWQL for services.
|
|
19
|
-
|
|
20
|
-
require 'adwords_api/query_utils/query_builder'
|
|
21
|
-
require 'adwords_api/query_utils/service_query'
|
|
22
|
-
require 'set'
|
|
23
|
-
|
|
24
|
-
module AdwordsApi
|
|
25
|
-
class ServiceQueryBuilder < QueryBuilder
|
|
26
|
-
def initialize(api)
|
|
27
|
-
super(api)
|
|
28
|
-
@select = nil
|
|
29
|
-
@order = []
|
|
30
|
-
@start_index = nil
|
|
31
|
-
@page_size = nil
|
|
32
|
-
yield self if block_given?
|
|
33
|
-
end
|
|
34
|
-
|
|
35
|
-
def configure()
|
|
36
|
-
yield self
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def select(*fields)
|
|
40
|
-
@select = Set[*fields]
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
def order_by_asc(field)
|
|
44
|
-
@order << {
|
|
45
|
-
:field => field,
|
|
46
|
-
:direction => 'ASC'
|
|
47
|
-
}
|
|
48
|
-
end
|
|
49
|
-
|
|
50
|
-
def order_by_desc(field)
|
|
51
|
-
@order << {
|
|
52
|
-
:field => field,
|
|
53
|
-
:direction => 'DESC'
|
|
54
|
-
}
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def limit(start_index, page_size)
|
|
58
|
-
@start_index = start_index
|
|
59
|
-
@page_size = page_size
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
def build()
|
|
63
|
-
raise ArgumentError,
|
|
64
|
-
'Must specify SELECT clause for valid AWQL' if @select.nil?
|
|
65
|
-
if !@start_index.nil? && @page_size.nil?
|
|
66
|
-
raise ArgumentError, 'Cannot specify start index without page size.'
|
|
67
|
-
end
|
|
68
|
-
if !@page_size.nil? && @start_index.nil?
|
|
69
|
-
raise ArgumentError, 'Cannot specify page size without start index.'
|
|
70
|
-
end
|
|
71
|
-
result = sprintf('SELECT %s', @select.to_a.join(', '))
|
|
72
|
-
result += build_where()
|
|
73
|
-
unless @order.empty?
|
|
74
|
-
orders = @order.map do |o|
|
|
75
|
-
sprintf('%s %s', o[:field], o[:direction])
|
|
76
|
-
end
|
|
77
|
-
result += sprintf(' ORDER BY %s', orders.join(', '))
|
|
78
|
-
end
|
|
79
|
-
@api.utils_reporter.service_query_builder_used()
|
|
80
|
-
return ServiceQuery.new(result, @start_index, @page_size)
|
|
81
|
-
end
|
|
82
|
-
end
|
|
83
|
-
end
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2018, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Class to aid in constructing where clauses for reporting and service queries.
|
|
19
|
-
|
|
20
|
-
module AdwordsApi
|
|
21
|
-
class WhereBuilder
|
|
22
|
-
attr_reader :awql
|
|
23
|
-
|
|
24
|
-
def initialize(field)
|
|
25
|
-
@field = field
|
|
26
|
-
@awql = nil
|
|
27
|
-
end
|
|
28
|
-
|
|
29
|
-
def equal_to(value)
|
|
30
|
-
@awql = sprintf("%s = %s", @field, value)
|
|
31
|
-
end
|
|
32
|
-
|
|
33
|
-
def not_equal_to(value)
|
|
34
|
-
@awql = sprintf("%s != %s", @field, value)
|
|
35
|
-
end
|
|
36
|
-
|
|
37
|
-
def greater_than(value)
|
|
38
|
-
@awql = sprintf("%s > %s", @field, value)
|
|
39
|
-
end
|
|
40
|
-
|
|
41
|
-
def greater_than_or_equal_to(value)
|
|
42
|
-
@awql = sprintf("%s >= %s", @field, value)
|
|
43
|
-
end
|
|
44
|
-
|
|
45
|
-
def less_than(value)
|
|
46
|
-
@awql = sprintf("%s < %s", @field, value)
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def less_than_or_equal_to(value)
|
|
50
|
-
@awql = sprintf("%s <= %s", @field, value)
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
def starts_with(value)
|
|
54
|
-
@awql = sprintf("%s STARTS_WITH %s", @field, value)
|
|
55
|
-
end
|
|
56
|
-
|
|
57
|
-
def starts_with_ignore_case(value)
|
|
58
|
-
@awql = sprintf("%s STARTS_WITH_IGNORE_CASE %s", @field, value)
|
|
59
|
-
end
|
|
60
|
-
|
|
61
|
-
def contains(value)
|
|
62
|
-
@awql = sprintf("%s CONTAINS %s", @field, value)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
def contains_ignore_case(value)
|
|
66
|
-
@awql = sprintf("%s CONTAINS_IGNORE_CASE %s", @field, value)
|
|
67
|
-
end
|
|
68
|
-
|
|
69
|
-
def does_not_contain(value)
|
|
70
|
-
@awql = sprintf("%s DOES_NOT_CONTAIN %s", @field, value)
|
|
71
|
-
end
|
|
72
|
-
|
|
73
|
-
def does_not_contain_ignore_case(value)
|
|
74
|
-
@awql = sprintf("%s DOES_NOT_CONTAIN_IGNORE_CASE %s", @field, value)
|
|
75
|
-
end
|
|
76
|
-
|
|
77
|
-
def in(*values)
|
|
78
|
-
@awql = sprintf("%s IN [%s]", @field, values.join(','))
|
|
79
|
-
end
|
|
80
|
-
|
|
81
|
-
def not_in(*values)
|
|
82
|
-
@awql = sprintf("%s NOT_IN [%s]", @field, values.join(','))
|
|
83
|
-
end
|
|
84
|
-
|
|
85
|
-
def contains_any(*values)
|
|
86
|
-
@awql = sprintf("%s CONTAINS_ANY [%s]", @field, values.join(','))
|
|
87
|
-
end
|
|
88
|
-
|
|
89
|
-
def contains_none(*values)
|
|
90
|
-
@awql = sprintf("%s CONTAINS_NONE [%s]", @field, values.join(','))
|
|
91
|
-
end
|
|
92
|
-
|
|
93
|
-
def contains_all(*values)
|
|
94
|
-
@awql = sprintf("%s CONTAINS_ALL [%s]", @field, values.join(','))
|
|
95
|
-
end
|
|
96
|
-
end
|
|
97
|
-
end
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2012, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Handles HTTP headers for AdHoc reporting requests.
|
|
19
|
-
|
|
20
|
-
module AdwordsApi
|
|
21
|
-
class ReportHeaderHandler
|
|
22
|
-
|
|
23
|
-
# Initializes a header handler.
|
|
24
|
-
#
|
|
25
|
-
# Args:
|
|
26
|
-
# - credential_handler: a header with credential data
|
|
27
|
-
# - auth_handler: a header with auth data
|
|
28
|
-
# - config: API config
|
|
29
|
-
#
|
|
30
|
-
def initialize(credential_handler, auth_handler, config)
|
|
31
|
-
@credential_handler = credential_handler
|
|
32
|
-
@auth_handler = auth_handler
|
|
33
|
-
@config = config
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
# Returns the headers set for the report request.
|
|
37
|
-
#
|
|
38
|
-
# Args:
|
|
39
|
-
# - url: URL for the report requests
|
|
40
|
-
# - cid: clientCustomerId to use
|
|
41
|
-
#
|
|
42
|
-
# Returns:
|
|
43
|
-
# - a Hash with HTTP headers.
|
|
44
|
-
#
|
|
45
|
-
def headers(url, cid)
|
|
46
|
-
override = (cid.nil?) ? nil : {:client_customer_id => cid}
|
|
47
|
-
credentials = @credential_handler.credentials(override)
|
|
48
|
-
headers = {
|
|
49
|
-
'Content-Type' => 'application/x-www-form-urlencoded',
|
|
50
|
-
'Authorization' => @auth_handler.auth_string(credentials),
|
|
51
|
-
'User-Agent' => @credential_handler.generate_user_agent(),
|
|
52
|
-
'clientCustomerId' => credentials[:client_customer_id].to_s,
|
|
53
|
-
'developerToken' => credentials[:developer_token]
|
|
54
|
-
}
|
|
55
|
-
skip_report_header = @config.read('library.skip_report_header')
|
|
56
|
-
unless skip_report_header.nil?
|
|
57
|
-
headers['skipReportHeader'] = skip_report_header.to_s
|
|
58
|
-
end
|
|
59
|
-
skip_report_summary = @config.read('library.skip_report_summary')
|
|
60
|
-
unless skip_report_summary.nil?
|
|
61
|
-
headers['skipReportSummary'] = skip_report_summary.to_s
|
|
62
|
-
end
|
|
63
|
-
skip_column_header = @config.read('library.skip_column_header')
|
|
64
|
-
unless skip_column_header.nil?
|
|
65
|
-
headers['skipColumnHeader'] = skip_column_header.to_s
|
|
66
|
-
end
|
|
67
|
-
include_zero_impressions =
|
|
68
|
-
@config.read('library.include_zero_impressions')
|
|
69
|
-
unless include_zero_impressions.nil?
|
|
70
|
-
headers['includeZeroImpressions'] = include_zero_impressions.to_s
|
|
71
|
-
end
|
|
72
|
-
use_raw_enum_values =
|
|
73
|
-
@config.read('library.use_raw_enum_values')
|
|
74
|
-
unless use_raw_enum_values.nil?
|
|
75
|
-
headers['useRawEnumValues'] = use_raw_enum_values.to_s
|
|
76
|
-
end
|
|
77
|
-
return headers
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
# Encoding: utf-8
|
|
2
|
-
#
|
|
3
|
-
# Copyright:: Copyright 2015, Google Inc. All Rights Reserved.
|
|
4
|
-
#
|
|
5
|
-
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
-
# you may not use this file except in compliance with the License.
|
|
7
|
-
# You may obtain a copy of the License at
|
|
8
|
-
#
|
|
9
|
-
# http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
-
#
|
|
11
|
-
# Unless required by applicable law or agreed to in writing, software
|
|
12
|
-
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
-
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
14
|
-
# implied.
|
|
15
|
-
# See the License for the specific language governing permissions and
|
|
16
|
-
# limitations under the License.
|
|
17
|
-
#
|
|
18
|
-
# Includes a way to iterate over a report stream by line, rather than in
|
|
19
|
-
# arbitrary chunks.
|
|
20
|
-
|
|
21
|
-
module AdwordsApi
|
|
22
|
-
class ReportStream
|
|
23
|
-
def initialize(report_utils, report_definition, cid = nil, format = nil,
|
|
24
|
-
is_awql = false)
|
|
25
|
-
@report_utils = report_utils
|
|
26
|
-
@report_definition = report_definition
|
|
27
|
-
@format = format
|
|
28
|
-
@cid = cid
|
|
29
|
-
@is_awql = is_awql
|
|
30
|
-
end
|
|
31
|
-
|
|
32
|
-
def self.set_up(report_utils, report_definition, cid = nil)
|
|
33
|
-
return ReportStream.new(report_utils, report_definition, cid)
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
def self.set_up_with_awql(
|
|
37
|
-
report_utils, report_query, format, cid = nil)
|
|
38
|
-
return ReportStream.new(
|
|
39
|
-
report_utils, report_query, cid, format, true)
|
|
40
|
-
end
|
|
41
|
-
|
|
42
|
-
def each_line()
|
|
43
|
-
# Determine which method and arguments to use depending on whether
|
|
44
|
-
# this is an AWQL request or not.
|
|
45
|
-
method = 'download_report_as_stream'
|
|
46
|
-
method += '_with_awql' if @is_awql
|
|
47
|
-
args = [@report_definition]
|
|
48
|
-
args << @format if @is_awql
|
|
49
|
-
args << @cid
|
|
50
|
-
|
|
51
|
-
leftover_data = ''
|
|
52
|
-
@report_utils.send(method, *args) do |batch|
|
|
53
|
-
data_to_process = leftover_data + batch
|
|
54
|
-
leftover_data = ''
|
|
55
|
-
while !data_to_process.valid_encoding?
|
|
56
|
-
leftover_data = data_to_process[-1] + leftover_data
|
|
57
|
-
data_to_process = data_to_process[0, data_to_process.length - 1]
|
|
58
|
-
end
|
|
59
|
-
lines = data_to_process.each_line.map {|line| line}
|
|
60
|
-
remainder = lines.pop
|
|
61
|
-
leftover_data = remainder + leftover_data unless remainder.nil?
|
|
62
|
-
lines.each do |line|
|
|
63
|
-
yield line.chomp
|
|
64
|
-
end
|
|
65
|
-
end
|
|
66
|
-
yield leftover_data.chomp unless
|
|
67
|
-
leftover_data.nil? || leftover_data.empty?
|
|
68
|
-
end
|
|
69
|
-
end
|
|
70
|
-
end
|