google-dfp-api 0.2.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.
Files changed (106) hide show
  1. data/COPYING +201 -0
  2. data/ChangeLog +10 -0
  3. data/README +210 -0
  4. data/Rakefile +83 -0
  5. data/examples/v201101/common/error_handling.rb +76 -0
  6. data/examples/v201101/company_service/create_companies.rb +82 -0
  7. data/examples/v201101/company_service/get_all_companies.rb +92 -0
  8. data/examples/v201101/company_service/get_companies_by_statement.rb +88 -0
  9. data/examples/v201101/company_service/get_company.rb +72 -0
  10. data/examples/v201101/company_service/update_companies.rb +95 -0
  11. data/examples/v201101/creative_service/copy_image_creatives.rb +117 -0
  12. data/examples/v201101/creative_service/create_creatives.rb +109 -0
  13. data/examples/v201101/creative_service/get_all_creatives.rb +93 -0
  14. data/examples/v201101/creative_service/get_creative.rb +72 -0
  15. data/examples/v201101/creative_service/get_creatives_by_statement.rb +87 -0
  16. data/examples/v201101/creative_service/update_creatives.rb +98 -0
  17. data/examples/v201101/custom_targeting_service/create_custom_targeting_keys_and_values.rb +118 -0
  18. data/examples/v201101/custom_targeting_service/delete_custom_targeting_keys.rb +121 -0
  19. data/examples/v201101/custom_targeting_service/delete_custom_targeting_values.rb +125 -0
  20. data/examples/v201101/custom_targeting_service/get_all_custom_targeting_keys_and_values.rb +148 -0
  21. data/examples/v201101/custom_targeting_service/get_custom_targeting_keys_by_statement.rb +92 -0
  22. data/examples/v201101/custom_targeting_service/get_custom_targeting_values_by_statement.rb +98 -0
  23. data/examples/v201101/custom_targeting_service/update_custom_targeting_keys.rb +94 -0
  24. data/examples/v201101/custom_targeting_service/update_custom_targeting_values.rb +106 -0
  25. data/examples/v201101/forecast_service/get_forecast.rb +103 -0
  26. data/examples/v201101/forecast_service/get_forecast_by_id.rb +80 -0
  27. data/examples/v201101/inventory_service/create_ad_units.rb +98 -0
  28. data/examples/v201101/inventory_service/deactivate_ad_units.rb +119 -0
  29. data/examples/v201101/inventory_service/get_ad_unit.rb +72 -0
  30. data/examples/v201101/inventory_service/get_ad_units_by_statement.rb +96 -0
  31. data/examples/v201101/inventory_service/get_all_ad_units.rb +93 -0
  32. data/examples/v201101/inventory_service/update_ad_units.rb +94 -0
  33. data/examples/v201101/line_item_creative_association_service/create_licas.rb +94 -0
  34. data/examples/v201101/line_item_creative_association_service/deactivate_licas.rb +127 -0
  35. data/examples/v201101/line_item_creative_association_service/get_all_licas.rb +95 -0
  36. data/examples/v201101/line_item_creative_association_service/get_lica.rb +77 -0
  37. data/examples/v201101/line_item_creative_association_service/get_licas_by_statement.rb +91 -0
  38. data/examples/v201101/line_item_creative_association_service/update_licas.rb +92 -0
  39. data/examples/v201101/line_item_service/activate_line_items.rb +131 -0
  40. data/examples/v201101/line_item_service/create_line_items.rb +141 -0
  41. data/examples/v201101/line_item_service/get_all_line_items.rb +94 -0
  42. data/examples/v201101/line_item_service/get_line_item.rb +74 -0
  43. data/examples/v201101/line_item_service/get_line_items_by_statement.rb +89 -0
  44. data/examples/v201101/line_item_service/target_custom_criteria.rb +135 -0
  45. data/examples/v201101/line_item_service/update_line_items.rb +110 -0
  46. data/examples/v201101/network_service/get_all_networks.rb +74 -0
  47. data/examples/v201101/network_service/get_current_network.rb +66 -0
  48. data/examples/v201101/order_service/approve_orders.rb +116 -0
  49. data/examples/v201101/order_service/create_orders.rb +93 -0
  50. data/examples/v201101/order_service/get_all_orders.rb +93 -0
  51. data/examples/v201101/order_service/get_order.rb +74 -0
  52. data/examples/v201101/order_service/get_orders_by_statement.rb +90 -0
  53. data/examples/v201101/order_service/update_orders.rb +95 -0
  54. data/examples/v201101/placement_service/create_placements.rb +128 -0
  55. data/examples/v201101/placement_service/deactivate_placements.rb +118 -0
  56. data/examples/v201101/placement_service/get_all_placements.rb +93 -0
  57. data/examples/v201101/placement_service/get_placement.rb +74 -0
  58. data/examples/v201101/placement_service/get_placements_by_statement.rb +86 -0
  59. data/examples/v201101/placement_service/update_placements.rb +96 -0
  60. data/examples/v201101/publisher_query_language_service/get_all_cities.rb +85 -0
  61. data/examples/v201101/publisher_query_language_service/get_all_countries.rb +85 -0
  62. data/examples/v201101/publisher_query_language_service/get_all_metros.rb +85 -0
  63. data/examples/v201101/publisher_query_language_service/get_all_regions.rb +85 -0
  64. data/examples/v201101/report_service/download_report.rb +81 -0
  65. data/examples/v201101/report_service/run_delivery_report.rb +89 -0
  66. data/examples/v201101/report_service/run_inventory_report.rb +90 -0
  67. data/examples/v201101/report_service/run_sales_report.rb +89 -0
  68. data/examples/v201101/user_service/create_users.rb +89 -0
  69. data/examples/v201101/user_service/deactivate_users.rb +99 -0
  70. data/examples/v201101/user_service/get_all_roles.rb +73 -0
  71. data/examples/v201101/user_service/get_all_users.rb +92 -0
  72. data/examples/v201101/user_service/get_user.rb +73 -0
  73. data/examples/v201101/user_service/get_users_by_statement.rb +79 -0
  74. data/examples/v201101/user_service/update_users.rb +89 -0
  75. data/lib/dfp_api.rb +142 -0
  76. data/lib/dfp_api/api_config.rb +126 -0
  77. data/lib/dfp_api/credential_handler.rb +60 -0
  78. data/lib/dfp_api/errors.rb +59 -0
  79. data/lib/dfp_api/extensions.rb +54 -0
  80. data/lib/dfp_api/v201101/company_service.rb +52 -0
  81. data/lib/dfp_api/v201101/company_service_registry.rb +37 -0
  82. data/lib/dfp_api/v201101/creative_service.rb +52 -0
  83. data/lib/dfp_api/v201101/creative_service_registry.rb +37 -0
  84. data/lib/dfp_api/v201101/custom_targeting_service.rb +60 -0
  85. data/lib/dfp_api/v201101/custom_targeting_service_registry.rb +37 -0
  86. data/lib/dfp_api/v201101/forecast_service.rb +36 -0
  87. data/lib/dfp_api/v201101/forecast_service_registry.rb +37 -0
  88. data/lib/dfp_api/v201101/inventory_service.rb +56 -0
  89. data/lib/dfp_api/v201101/inventory_service_registry.rb +37 -0
  90. data/lib/dfp_api/v201101/line_item_creative_association_service.rb +56 -0
  91. data/lib/dfp_api/v201101/line_item_creative_association_service_registry.rb +37 -0
  92. data/lib/dfp_api/v201101/line_item_service.rb +56 -0
  93. data/lib/dfp_api/v201101/line_item_service_registry.rb +37 -0
  94. data/lib/dfp_api/v201101/network_service.rb +40 -0
  95. data/lib/dfp_api/v201101/network_service_registry.rb +37 -0
  96. data/lib/dfp_api/v201101/order_service.rb +56 -0
  97. data/lib/dfp_api/v201101/order_service_registry.rb +37 -0
  98. data/lib/dfp_api/v201101/placement_service.rb +56 -0
  99. data/lib/dfp_api/v201101/placement_service_registry.rb +37 -0
  100. data/lib/dfp_api/v201101/publisher_query_language_service.rb +32 -0
  101. data/lib/dfp_api/v201101/publisher_query_language_service_registry.rb +37 -0
  102. data/lib/dfp_api/v201101/report_service.rb +40 -0
  103. data/lib/dfp_api/v201101/report_service_registry.rb +37 -0
  104. data/lib/dfp_api/v201101/user_service.rb +60 -0
  105. data/lib/dfp_api/v201101/user_service_registry.rb +37 -0
  106. metadata +204 -0
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
+ #
5
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ # This example gets all line item creative associations (LICA). To create LICAs,
21
+ # run create_licas.rb.
22
+ #
23
+ # Tags: LineItemCreativeAssociationService.getLineItemCreativeAssociationsByStatement
24
+
25
+ require 'rubygems'
26
+ require 'dfp_api'
27
+
28
+ API_VERSION = :v201101
29
+ PAGE_SIZE = 500
30
+
31
+ def get_all_licas()
32
+ # Get DfpApi instance and load configuration from ~/dfp_api.yml.
33
+ dfp = DfpApi::Api.new
34
+
35
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
36
+ # the configuration file or provide your own logger:
37
+ # dfp.logger = Logger.new('dfp_xml.log')
38
+
39
+ # Get the LineItemCreativeAssociationService.
40
+ lica_service = dfp.service(:LineItemCreativeAssociationService, API_VERSION)
41
+
42
+ # Define initial values.
43
+ offset = 0
44
+ page = Hash.new
45
+
46
+ begin
47
+ # Create statement for one page with current offset.
48
+ statement = {:query => "LIMIT %d OFFSET %d" % [PAGE_SIZE, offset]}
49
+
50
+ # Get LICAs by statement.
51
+ page =
52
+ lica_service.get_line_item_creative_associations_by_statement(statement)
53
+
54
+ if page[:results]
55
+ # Increase query offset by page size.
56
+ offset += PAGE_SIZE
57
+
58
+ # Get the start index for printout.
59
+ start_index = page[:start_index]
60
+
61
+ # Print details about each LICA in results page.
62
+ page[:results].each_with_index do |lica, index|
63
+ puts "%d) LICA with line item ID: %d, creative ID: %d and status: %s" %
64
+ [index + start_index, lica[:line_item_id], lica[:creative_id],
65
+ lica[:status]]
66
+ end
67
+ end
68
+ end while offset < page[:total_result_set_size]
69
+
70
+ # Print a footer
71
+ if page.include?(:total_result_set_size)
72
+ puts "Total number of LICAs: %d" % page[:total_result_set_size]
73
+ end
74
+ end
75
+
76
+ if __FILE__ == $0
77
+ begin
78
+ get_all_licas()
79
+
80
+ # HTTP errors.
81
+ rescue AdsCommon::Errors::HttpError => e
82
+ puts "HTTP Error: %s" % e
83
+
84
+ # API errors.
85
+ rescue DfpApi::Errors::ApiException => e
86
+ puts "Message: %s" % e.message
87
+ puts 'Errors:'
88
+ e.errors.each_with_index do |error, index|
89
+ puts "\tError [%d]:" % (index + 1)
90
+ error.each do |field, value|
91
+ puts "\t\t%s: %s" % [field, value]
92
+ end
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,77 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
+ #
5
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ # This example gets a line item creative association (LICA) by the line item and
21
+ # creative ID. To determine which line items exist, run get_all_line_items.rb.
22
+ # To determine which creatives exit, run get_all_creatives.rb.
23
+ #
24
+ # Tags: LineItemCreativeAssociationService.getLineItemCreativeAssociation
25
+
26
+ require 'rubygems'
27
+ require 'dfp_api'
28
+
29
+ API_VERSION = :v201101
30
+
31
+ def get_lica()
32
+ # Get DfpApi instance and load configuration from ~/dfp_api.yml.
33
+ dfp = DfpApi::Api.new
34
+
35
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
36
+ # the configuration file or provide your own logger:
37
+ # dfp.logger = Logger.new('dfp_xml.log')
38
+
39
+ # Get the LineItemCreativeAssociationService.
40
+ lica_service = dfp.service(:LineItemCreativeAssociationService, API_VERSION)
41
+
42
+ # Set the line item and creative IDs to use to retrieve the LICA.
43
+ line_item_id = 'INSERT_LINE_ITEM_ID_HERE'.to_i
44
+ creative_id = 'INSERT_CREATIVE_ID_HERE'.to_i
45
+
46
+ # Get the LICA.
47
+ lica =
48
+ lica_service.get_line_item_creative_association(line_item_id, creative_id)
49
+
50
+ if lica
51
+ puts ("LICA with line item ID: %d, creative ID: %d and status: %s was " +
52
+ "found.") % [lica[:line_item_id], lica[:creative_id], lica[:status]]
53
+ else
54
+ puts 'No lica found for this ID.'
55
+ end
56
+ end
57
+
58
+ if __FILE__ == $0
59
+ begin
60
+ get_lica()
61
+
62
+ # HTTP errors.
63
+ rescue AdsCommon::Errors::HttpError => e
64
+ puts "HTTP Error: %s" % e
65
+
66
+ # API errors.
67
+ rescue DfpApi::Errors::ApiException => e
68
+ puts "Message: %s" % e.message
69
+ puts 'Errors:'
70
+ e.errors.each_with_index do |error, index|
71
+ puts "\tError [%d]:" % (index + 1)
72
+ error.each do |field, value|
73
+ puts "\t\t%s: %s" % [field, value]
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,91 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
+ #
5
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ # This example gets all line item creative associations for a given line item
21
+ # ID. The statement retrieves up to the maximum page size limit of 500. To
22
+ # create LICAs, run create_licas.rb. To determine which line items exist, run
23
+ # get_all_line_items.rb.
24
+ #
25
+ # Tags: LineItemCreativeAssociationService.getLineItemCreativeAssociationsByStatement
26
+
27
+ require 'rubygems'
28
+ require 'dfp_api'
29
+
30
+ API_VERSION = :v201101
31
+
32
+ def get_licas_by_statement()
33
+ # Get DfpApi instance and load configuration from ~/dfp_api.yml.
34
+ dfp = DfpApi::Api.new
35
+
36
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
37
+ # the configuration file or provide your own logger:
38
+ # dfp.logger = Logger.new('dfp_xml.log')
39
+
40
+ # Get the LineItemCreativeAssociationService.
41
+ lica_service = dfp.service(:LineItemCreativeAssociationService, API_VERSION)
42
+
43
+ # Set the line item to get LICAs by.
44
+ line_item_id = 'INSERT_LINE_ITEM_ID_HERE'.to_i
45
+
46
+ # Create a statement to only select LICAs for the given line item ID.
47
+ statement = {
48
+ :query => 'WHERE lineItemId = :line_item_id LIMIT 500',
49
+ :values => [
50
+ {:key => 'line_item_id',
51
+ :value => {:value => line_item_id, :xsi_type => 'NumberValue'}}
52
+ ]
53
+ }
54
+
55
+ # Get LICAs by statement.
56
+ page =
57
+ lica_service.get_line_item_creative_associations_by_statement(statement)
58
+
59
+ if page and page[:results]
60
+ page[:results].each_with_index do |lica, index|
61
+ puts "%d) LICA with line item ID: %d, creative ID: %d and status: %s." %
62
+ [index, lica[:line_item_id], lica[:creative_id], lica[:status]]
63
+ end
64
+ end
65
+
66
+ # Print a footer.
67
+ if page.include?(:total_result_set_size)
68
+ puts "Number of results found: %d" % page[:total_result_set_size]
69
+ end
70
+ end
71
+
72
+ if __FILE__ == $0
73
+ begin
74
+ get_licas_by_statement()
75
+
76
+ # HTTP errors.
77
+ rescue AdsCommon::Errors::HttpError => e
78
+ puts "HTTP Error: %s" % e
79
+
80
+ # API errors.
81
+ rescue DfpApi::Errors::ApiException => e
82
+ puts "Message: %s" % e.message
83
+ puts 'Errors:'
84
+ e.errors.each_with_index do |error, index|
85
+ puts "\tError [%d]:" % (index + 1)
86
+ error.each do |field, value|
87
+ puts "\t\t%s: %s" % [field, value]
88
+ end
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,92 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
+ #
5
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ # This example updates the destination URL of all LICAs up to the first 500. To
21
+ # determine which LICAs exist, run get_all_licas.rb.
22
+ #
23
+ # Tags:
24
+ # LineItemCreativeAssociationService.getLineItemCreativeAssociationsByStatement,
25
+ # LineItemCreativeAssociationService.updateLineItemCreativeAssociations
26
+
27
+ require 'rubygems'
28
+ require 'dfp_api'
29
+
30
+ API_VERSION = :v201101
31
+
32
+ def update_licas()
33
+ # Get DfpApi instance and load configuration from ~/dfp_api.yml.
34
+ dfp = DfpApi::Api.new
35
+
36
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
37
+ # the configuration file or provide your own logger:
38
+ # dfp.logger = Logger.new('dfp_xml.log')
39
+
40
+ # Get the LineItemCreativeAssociationService.
41
+ lica_service = dfp.service(:LineItemCreativeAssociationService, API_VERSION)
42
+
43
+ # Create a statement to get all LICAs.
44
+ statement = {:query => 'LIMIT 500'}
45
+
46
+ # Get LICAs by statement.
47
+ page =
48
+ lica_service.get_line_item_creative_associations_by_statement(statement)
49
+
50
+ if page[:results]
51
+ licas = page[:results]
52
+
53
+ # Update each local LICA object by changing its destination URL.
54
+ licas.each {|lica| lica[:destination_url] = 'http://news.google.com'}
55
+
56
+ # Update the LICAs on the server.
57
+ return_licas = lica_service.update_line_item_creative_associations(licas)
58
+
59
+ if return_licas
60
+ return_licas.each do |lica|
61
+ puts ("LICA with line item ID: %d and creative ID: %d was updated " +
62
+ "with destination url [%s]") %
63
+ [lica[:line_item_id], lica[:creative_id], lica[:destination_url]]
64
+ end
65
+ else
66
+ raise 'No LICAs were updated.'
67
+ end
68
+ else
69
+ puts 'No LICAs found to update.'
70
+ end
71
+ end
72
+
73
+ if __FILE__ == $0
74
+ begin
75
+ update_licas()
76
+
77
+ # HTTP errors.
78
+ rescue AdsCommon::Errors::HttpError => e
79
+ puts "HTTP Error: %s" % e
80
+
81
+ # API errors.
82
+ rescue DfpApi::Errors::ApiException => e
83
+ puts "Message: %s" % e.message
84
+ puts 'Errors:'
85
+ e.errors.each_with_index do |error, index|
86
+ puts "\tError [%d]:" % (index + 1)
87
+ error.each do |field, value|
88
+ puts "\t\t%s: %s" % [field, value]
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,131 @@
1
+ #!/usr/bin/ruby
2
+ #
3
+ # Author:: api.dklimkin@gmail.com (Danial Klimkin)
4
+ #
5
+ # Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
6
+ #
7
+ # License:: Licensed under the Apache License, Version 2.0 (the "License");
8
+ # you may not use this file except in compliance with the License.
9
+ # You may obtain a copy of the License at
10
+ #
11
+ # http://www.apache.org/licenses/LICENSE-2.0
12
+ #
13
+ # Unless required by applicable law or agreed to in writing, software
14
+ # distributed under the License is distributed on an "AS IS" BASIS,
15
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
16
+ # implied.
17
+ # See the License for the specific language governing permissions and
18
+ # limitations under the License.
19
+ #
20
+ # This example activates all line items for the given order. To be activated,
21
+ # line items need to be in the approved (needs creatives) state and have at
22
+ # least one creative associated with them. To approve line items, approve the
23
+ # order to which they belong by running approve_orders.rb. To create LICAs, run
24
+ # create_licas.rb. To determine which line items exist, run
25
+ # get_all_line_items.rb. To determine which orders exist, run get_all_orders.rb.
26
+ #
27
+ # Tags: LineItemService.getLineItemsByStatement,
28
+ # LineItemService.performLineItemAction
29
+
30
+ require 'rubygems'
31
+ require 'dfp_api'
32
+
33
+ API_VERSION = :v201101
34
+ PAGE_SIZE = 500
35
+
36
+ def activate_line_items()
37
+ # Get DfpApi instance and load configuration from ~/dfp_api.yml.
38
+ dfp = DfpApi::Api.new
39
+
40
+ # To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
41
+ # the configuration file or provide your own logger:
42
+ # dfp.logger = Logger.new('dfp_xml.log')
43
+
44
+ # Get the LineItemService.
45
+ line_item_service = dfp.service(:LineItemService, API_VERSION)
46
+
47
+ # Set the ID of the order to get line items from.
48
+ order_id = 'INSERT_ORDER_ID_HERE'.to_i
49
+
50
+ # Create a statement to only select line items from the specified order that
51
+ # are in the approved (needs creatives) state.
52
+ statement_text = 'WHERE orderID = :order_id AND status = :status'
53
+ statement = {
54
+ :values => [
55
+ {:key => 'order_id',
56
+ :value => {:value => order_id, :xsi_type => 'NumberValue'}},
57
+ {:key => 'status',
58
+ :value => {:value => 'NEEDS_CREATIVES', :xsi_type => 'TextValue'}}
59
+ ]
60
+ }
61
+
62
+ # Define initial values.
63
+ offset = 0
64
+ page = Hash.new
65
+ line_item_ids = Array.new
66
+
67
+ begin
68
+ # Create a statement to get one page with current offset.
69
+ statement[:query] = statement_text +
70
+ " LIMIT %d OFFSET %d" % [PAGE_SIZE, offset]
71
+
72
+ # Get line items by statement.
73
+ page = line_item_service.get_line_items_by_statement(statement)
74
+
75
+ if page[:results]
76
+ # Increase query offset by page size.
77
+ offset += PAGE_SIZE
78
+
79
+ page[:results].each do |line_item|
80
+ if !line_item[:is_archived]
81
+ puts ("%d) Line item with ID: %d, order ID: %d and name: %s will " +
82
+ "be activated.") % [line_item_ids.size, line_item[:id],
83
+ line_item[:order_id], line_item[:name]]
84
+ line_item_ids << line_item[:id]
85
+ end
86
+ end
87
+ end
88
+ end while offset < page[:total_result_set_size]
89
+
90
+ puts "Number of line items to be activated: %d" % line_item_ids.size
91
+
92
+ if !line_item_ids.empty?
93
+ # Modify statement for action. Note, the values are still present.
94
+ statement[:query] = statement_text + " AND id IN (%s)" %
95
+ line_item_ids.join(', ')
96
+
97
+ # Perform action.
98
+ result = line_item_service.perform_line_item_action(
99
+ {:xsi_type => 'ActivateLineItems'}, statement)
100
+
101
+ # Display results.
102
+ if result and result[:num_changes] > 0
103
+ puts "Number of line items activated: %d" % result[:num_changes]
104
+ else
105
+ puts 'No line items were activated.'
106
+ end
107
+ else
108
+ puts 'No line items found to activate.'
109
+ end
110
+ end
111
+
112
+ if __FILE__ == $0
113
+ begin
114
+ activate_line_items()
115
+
116
+ # HTTP errors.
117
+ rescue AdsCommon::Errors::HttpError => e
118
+ puts "HTTP Error: %s" % e
119
+
120
+ # API errors.
121
+ rescue DfpApi::Errors::ApiException => e
122
+ puts "Message: %s" % e.message
123
+ puts 'Errors:'
124
+ e.errors.each_with_index do |error, index|
125
+ puts "\tError [%d]:" % (index + 1)
126
+ error.each do |field, value|
127
+ puts "\t\t%s: %s" % [field, value]
128
+ end
129
+ end
130
+ end
131
+ end