google-dfp-api 0.7.0 → 0.7.1
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 +8 -8
- data/ChangeLog +4 -0
- data/README +2 -2
- data/examples/v201208/common/setup_oauth2.rb +89 -0
- data/examples/v201211/common/setup_oauth2.rb +89 -0
- data/examples/v201302/common/setup_oauth2.rb +89 -0
- data/examples/v201306/common/setup_oauth2.rb +89 -0
- data/examples/v201308/common/setup_oauth2.rb +89 -0
- data/examples/v201311/activity_group_service/create_activity_groups.rb +94 -0
- data/examples/v201311/activity_group_service/get_active_activity_groups.rb +100 -0
- data/examples/v201311/activity_group_service/get_all_activity_groups.rb +95 -0
- data/examples/v201311/activity_group_service/update_activity_groups.rb +87 -0
- data/examples/v201311/activity_service/create_activities.rb +91 -0
- data/examples/v201311/activity_service/get_active_activities.rb +103 -0
- data/examples/v201311/activity_service/get_all_activities.rb +96 -0
- data/examples/v201311/activity_service/update_activities.rb +85 -0
- data/examples/v201311/audience_segment_service/create_audience_segments.rb +118 -0
- data/examples/v201311/audience_segment_service/get_all_audience_segments.rb +94 -0
- data/examples/v201311/audience_segment_service/get_first_party_audience_segments.rb +99 -0
- data/examples/v201311/audience_segment_service/populate_first_party_audience_segments.rb +101 -0
- data/examples/v201311/audience_segment_service/update_audience_segments.rb +98 -0
- data/examples/v201311/common/error_handling.rb +76 -0
- data/examples/{v201208/common/oauth2_handling.rb → v201311/common/oauth2_jwt_handling.rb} +20 -41
- data/examples/v201311/common/setup_oauth2.rb +89 -0
- data/examples/v201311/company_service/create_companies.rb +81 -0
- data/examples/v201311/company_service/get_all_companies.rb +92 -0
- data/examples/v201311/company_service/get_companies_by_statement.rb +88 -0
- data/examples/v201311/company_service/get_company.rb +72 -0
- data/examples/v201311/company_service/update_companies.rb +102 -0
- data/examples/v201311/contact_service/create_contacts.rb +95 -0
- data/examples/v201311/contact_service/get_all_contacts.rb +92 -0
- data/examples/v201311/contact_service/get_uninvited_contacts.rb +102 -0
- data/examples/v201311/contact_service/update_contacts.rb +84 -0
- data/examples/v201311/content_service/get_all_content.rb +94 -0
- data/examples/v201311/content_service/get_content_by_category.rb +143 -0
- data/examples/v201311/creative_service/copy_image_creatives.rb +115 -0
- data/examples/v201311/creative_service/create_creative_from_template.rb +139 -0
- data/examples/v201311/creative_service/create_creatives.rb +112 -0
- data/examples/v201311/creative_service/create_custom_creative.rb +104 -0
- data/examples/v201311/creative_service/get_all_creatives.rb +93 -0
- data/examples/v201311/creative_service/get_creative.rb +72 -0
- data/examples/v201311/creative_service/get_creatives_by_statement.rb +87 -0
- data/examples/v201311/creative_service/update_creatives.rb +96 -0
- data/examples/v201311/creative_set_service/associate_creative_set_to_line_item.rb +77 -0
- data/examples/v201311/creative_set_service/create_creative_set.rb +83 -0
- data/examples/v201311/creative_set_service/get_all_creative_sets.rb +94 -0
- data/examples/v201311/creative_set_service/get_creative_sets_by_statement.rb +90 -0
- data/examples/v201311/creative_set_service/update_creative_sets.rb +85 -0
- data/examples/v201311/creative_template_service/get_all_creative_templates.rb +94 -0
- data/examples/v201311/creative_template_service/get_creative_template.rb +74 -0
- data/examples/v201311/creative_template_service/get_creative_templates_by_statement.rb +80 -0
- data/examples/v201311/creative_wrapper_service/create_creative_wrappers.rb +89 -0
- data/examples/v201311/creative_wrapper_service/deactivate_creative_wrapper.rb +102 -0
- data/examples/v201311/creative_wrapper_service/get_all_creative_wrappers.rb +94 -0
- data/examples/v201311/creative_wrapper_service/get_creative_wrappers_by_statement.rb +88 -0
- data/examples/v201311/creative_wrapper_service/update_creative_wrappers.rb +86 -0
- data/examples/v201311/custom_field_service/create_custom_field_options.rb +87 -0
- data/examples/v201311/custom_field_service/create_custom_fields.rb +86 -0
- data/examples/v201311/custom_field_service/deactivate_all_line_item_custom_fields.rb +112 -0
- data/examples/v201311/custom_field_service/get_all_custom_fields.rb +102 -0
- data/examples/v201311/custom_field_service/get_all_line_item_custom_fields.rb +86 -0
- data/examples/v201311/custom_field_service/set_line_item_custom_field_value.rb +135 -0
- data/examples/v201311/custom_field_service/update_custom_fields.rb +84 -0
- data/examples/v201311/custom_targeting_service/create_custom_targeting_keys_and_values.rb +140 -0
- data/examples/v201311/custom_targeting_service/delete_custom_targeting_keys.rb +121 -0
- data/examples/v201311/custom_targeting_service/delete_custom_targeting_values.rb +125 -0
- data/examples/v201311/custom_targeting_service/get_all_custom_targeting_keys_and_values.rb +148 -0
- data/examples/v201311/custom_targeting_service/get_custom_targeting_keys_by_statement.rb +92 -0
- data/examples/v201311/custom_targeting_service/get_custom_targeting_values_by_statement.rb +98 -0
- data/examples/v201311/custom_targeting_service/update_custom_targeting_keys.rb +94 -0
- data/examples/v201311/custom_targeting_service/update_custom_targeting_values.rb +106 -0
- data/examples/v201311/forecast_service/get_forecast.rb +108 -0
- data/examples/v201311/forecast_service/get_forecast_by_id.rb +81 -0
- data/examples/v201311/inventory_service/create_ad_units.rb +101 -0
- data/examples/v201311/inventory_service/create_mobile_ad_unit.rb +101 -0
- data/examples/v201311/inventory_service/create_video_ad_unit.rb +108 -0
- data/examples/v201311/inventory_service/deactivate_ad_units.rb +119 -0
- data/examples/v201311/inventory_service/get_ad_unit.rb +72 -0
- data/examples/v201311/inventory_service/get_ad_unit_sizes.rb +85 -0
- data/examples/v201311/inventory_service/get_ad_units_by_statement.rb +96 -0
- data/examples/v201311/inventory_service/get_all_ad_units.rb +93 -0
- data/examples/v201311/inventory_service/update_ad_units.rb +96 -0
- data/examples/v201311/label_service/create_labels.rb +83 -0
- data/examples/v201311/label_service/deactivate_labels.rb +118 -0
- data/examples/v201311/label_service/get_all_labels.rb +95 -0
- data/examples/v201311/label_service/get_label.rb +76 -0
- data/examples/v201311/label_service/get_labels_by_statement.rb +81 -0
- data/examples/v201311/label_service/update_labels.rb +102 -0
- data/examples/v201311/line_item_creative_association_service/create_licas.rb +94 -0
- data/examples/v201311/line_item_creative_association_service/deactivate_licas.rb +127 -0
- data/examples/v201311/line_item_creative_association_service/get_all_licas.rb +98 -0
- data/examples/v201311/line_item_creative_association_service/get_lica.rb +77 -0
- data/examples/v201311/line_item_creative_association_service/get_licas_by_statement.rb +91 -0
- data/examples/v201311/line_item_creative_association_service/update_licas.rb +91 -0
- data/examples/v201311/line_item_service/activate_line_items.rb +131 -0
- data/examples/v201311/line_item_service/create_line_items.rb +177 -0
- data/examples/v201311/line_item_service/create_mobile_line_item.rb +135 -0
- data/examples/v201311/line_item_service/create_video_line_item.rb +158 -0
- data/examples/v201311/line_item_service/get_all_line_items.rb +94 -0
- data/examples/v201311/line_item_service/get_line_item.rb +74 -0
- data/examples/v201311/line_item_service/get_line_items_by_statement.rb +93 -0
- data/examples/v201311/line_item_service/get_recently_updated_line_items.rb +98 -0
- data/examples/v201311/line_item_service/target_custom_criteria.rb +129 -0
- data/examples/v201311/line_item_service/update_line_items.rb +109 -0
- data/examples/v201311/network_service/get_all_networks.rb +74 -0
- data/examples/v201311/network_service/get_current_network.rb +66 -0
- data/examples/v201311/network_service/make_test_network.rb +79 -0
- data/examples/v201311/order_service/approve_orders.rb +122 -0
- data/examples/v201311/order_service/create_orders.rb +92 -0
- data/examples/v201311/order_service/get_all_orders.rb +93 -0
- data/examples/v201311/order_service/get_order.rb +74 -0
- data/examples/v201311/order_service/get_orders_by_statement.rb +90 -0
- data/examples/v201311/order_service/update_orders.rb +97 -0
- data/examples/v201311/placement_service/create_placements.rb +131 -0
- data/examples/v201311/placement_service/deactivate_placements.rb +118 -0
- data/examples/v201311/placement_service/get_all_placements.rb +93 -0
- data/examples/v201311/placement_service/get_placement.rb +74 -0
- data/examples/v201311/placement_service/get_placements_by_statement.rb +86 -0
- data/examples/v201311/placement_service/update_placements.rb +97 -0
- data/examples/v201311/publisher_query_language_service/fetch_match_tables.rb +113 -0
- data/examples/v201311/publisher_query_language_service/get_all_line_items.rb +100 -0
- data/examples/v201311/publisher_query_language_service/get_geo_targets.rb +102 -0
- data/examples/v201311/publisher_query_language_service/get_line_items_named_like.rb +100 -0
- data/examples/v201311/report_service/display_report.rb +81 -0
- data/examples/v201311/report_service/download_report.rb +81 -0
- data/examples/v201311/report_service/run_delivery_report.rb +103 -0
- data/examples/v201311/report_service/run_inventory_report.rb +112 -0
- data/examples/v201311/report_service/run_merged_delivery_report.rb +94 -0
- data/examples/v201311/report_service/run_reach_report.rb +87 -0
- data/examples/v201311/report_service/run_report_with_custom_fields.rb +135 -0
- data/examples/v201311/report_service/run_sales_report.rb +92 -0
- data/examples/v201311/suggested_ad_unit_service/approve_all_suggested_ad_units.rb +109 -0
- data/examples/v201311/suggested_ad_unit_service/get_all_suggested_ad_units.rb +96 -0
- data/examples/v201311/suggested_ad_unit_service/get_suggested_ad_unit.rb +75 -0
- data/examples/v201311/suggested_ad_unit_service/get_suggested_ad_units_by_statement.rb +92 -0
- data/examples/v201311/team_service/create_teams.rb +83 -0
- data/examples/v201311/team_service/get_all_teams.rb +92 -0
- data/examples/v201311/team_service/get_team.rb +74 -0
- data/examples/v201311/team_service/get_teams_by_statement.rb +78 -0
- data/examples/v201311/team_service/update_teams.rb +97 -0
- data/examples/v201311/user_service/create_users.rb +89 -0
- data/examples/v201311/user_service/deactivate_users.rb +97 -0
- data/examples/v201311/user_service/get_all_roles.rb +73 -0
- data/examples/{v201211/common/oauth2_handling.rb → v201311/user_service/get_all_users.rb} +9 -44
- data/examples/v201311/user_service/get_current_user.rb +66 -0
- data/examples/v201311/user_service/get_user.rb +73 -0
- data/examples/v201311/user_service/get_users_by_statement.rb +79 -0
- data/examples/v201311/user_service/update_users.rb +89 -0
- data/examples/v201311/user_team_association_service/create_user_team_associations.rb +86 -0
- data/examples/v201311/user_team_association_service/delete_user_team_associations.rb +111 -0
- data/examples/v201311/user_team_association_service/get_all_user_team_associations.rb +94 -0
- data/examples/v201311/user_team_association_service/get_user_team_association.rb +76 -0
- data/examples/v201311/user_team_association_service/get_user_team_associations_by_statement.rb +94 -0
- data/examples/v201311/user_team_association_service/update_user_team_associations.rb +102 -0
- data/lib/dfp_api/api_config.rb +49 -4
- data/lib/dfp_api/v201311/activity_group_service.rb +54 -0
- data/lib/dfp_api/v201311/activity_group_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/activity_service.rb +54 -0
- data/lib/dfp_api/v201311/activity_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/ad_rule_service.rb +58 -0
- data/lib/dfp_api/v201311/ad_rule_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/audience_segment_service.rb +46 -0
- data/lib/dfp_api/v201311/audience_segment_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/base_rate_service.rb +58 -0
- data/lib/dfp_api/v201311/base_rate_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/company_service.rb +54 -0
- data/lib/dfp_api/v201311/company_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/contact_service.rb +54 -0
- data/lib/dfp_api/v201311/contact_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/content_bundle_service.rb +58 -0
- data/lib/dfp_api/v201311/content_bundle_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/content_metadata_key_hierarchy_service.rb +34 -0
- data/lib/dfp_api/v201311/content_metadata_key_hierarchy_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/content_service.rb +38 -0
- data/lib/dfp_api/v201311/content_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/creative_service.rb +54 -0
- data/lib/dfp_api/v201311/creative_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/creative_set_service.rb +46 -0
- data/lib/dfp_api/v201311/creative_set_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/creative_template_service.rb +38 -0
- data/lib/dfp_api/v201311/creative_template_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/creative_wrapper_service.rb +58 -0
- data/lib/dfp_api/v201311/creative_wrapper_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/custom_field_service.rb +78 -0
- data/lib/dfp_api/v201311/custom_field_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/custom_targeting_service.rb +62 -0
- data/lib/dfp_api/v201311/custom_targeting_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/exchange_rate_service.rb +50 -0
- data/lib/dfp_api/v201311/exchange_rate_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/forecast_service.rb +38 -0
- data/lib/dfp_api/v201311/forecast_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/inventory_service.rb +62 -0
- data/lib/dfp_api/v201311/inventory_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/label_service.rb +58 -0
- data/lib/dfp_api/v201311/label_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/line_item_creative_association_service.rb +62 -0
- data/lib/dfp_api/v201311/line_item_creative_association_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/line_item_service.rb +58 -0
- data/lib/dfp_api/v201311/line_item_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/line_item_template_service.rb +34 -0
- data/lib/dfp_api/v201311/line_item_template_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/network_service.rb +46 -0
- data/lib/dfp_api/v201311/network_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/order_service.rb +58 -0
- data/lib/dfp_api/v201311/order_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/placement_service.rb +58 -0
- data/lib/dfp_api/v201311/placement_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/product_service.rb +50 -0
- data/lib/dfp_api/v201311/product_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/product_template_service.rb +58 -0
- data/lib/dfp_api/v201311/product_template_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/proposal_line_item_service.rb +58 -0
- data/lib/dfp_api/v201311/proposal_line_item_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/proposal_service.rb +58 -0
- data/lib/dfp_api/v201311/proposal_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/publisher_query_language_service.rb +34 -0
- data/lib/dfp_api/v201311/publisher_query_language_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/rate_card_customization_service.rb +58 -0
- data/lib/dfp_api/v201311/rate_card_customization_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/rate_card_service.rb +58 -0
- data/lib/dfp_api/v201311/rate_card_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/reconciliation_order_report_service.rb +42 -0
- data/lib/dfp_api/v201311/reconciliation_order_report_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/reconciliation_report_row_service.rb +38 -0
- data/lib/dfp_api/v201311/reconciliation_report_row_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/reconciliation_report_service.rb +46 -0
- data/lib/dfp_api/v201311/reconciliation_report_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/report_service.rb +46 -0
- data/lib/dfp_api/v201311/report_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/suggested_ad_unit_service.rb +42 -0
- data/lib/dfp_api/v201311/suggested_ad_unit_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/team_service.rb +54 -0
- data/lib/dfp_api/v201311/team_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/user_service.rb +66 -0
- data/lib/dfp_api/v201311/user_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/user_team_association_service.rb +58 -0
- data/lib/dfp_api/v201311/user_team_association_service_registry.rb +46 -0
- data/lib/dfp_api/v201311/workflow_request_service.rb +38 -0
- data/lib/dfp_api/v201311/workflow_request_service_registry.rb +46 -0
- data/lib/dfp_api/version.rb +1 -1
- data/test/bugs/test_issue_00000016.rb +3 -3
- metadata +241 -10
- data/examples/v201302/common/oauth2_handling.rb +0 -128
- data/examples/v201306/common/oauth2_handling.rb +0 -128
- data/examples/v201308/common/oauth2_handling.rb +0 -128
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2013, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# This code example gets all first party audience segments. To create audience
|
|
22
|
+
# segments, run create_audience_segments.rb.
|
|
23
|
+
#
|
|
24
|
+
# Tags: AudienceSegmentService.getAudienceSegmentsByStatement
|
|
25
|
+
|
|
26
|
+
require 'dfp_api'
|
|
27
|
+
|
|
28
|
+
API_VERSION = :v201311
|
|
29
|
+
PAGE_SIZE = 500
|
|
30
|
+
|
|
31
|
+
def get_first_party_audience_segments()
|
|
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 AudienceSegmentService.
|
|
40
|
+
audience_segment_service = dfp.service(:AudienceSegmentService, API_VERSION)
|
|
41
|
+
|
|
42
|
+
# Statement parts to help build a statement to select all first party audience
|
|
43
|
+
# segments.
|
|
44
|
+
statement_text = "WHERE type = 'FIRST_PARTY' ORDER BY id LIMIT %d OFFSET %d"
|
|
45
|
+
|
|
46
|
+
# Define initial values.
|
|
47
|
+
offset = 0
|
|
48
|
+
page = {}
|
|
49
|
+
|
|
50
|
+
begin
|
|
51
|
+
# Create statement for one page with current offset.
|
|
52
|
+
statement = {:query => statement_text % [PAGE_SIZE, offset]}
|
|
53
|
+
|
|
54
|
+
# Get audience segments by statement.
|
|
55
|
+
page =
|
|
56
|
+
audience_segment_service.get_audience_segments_by_statement(statement)
|
|
57
|
+
|
|
58
|
+
if page[:results]
|
|
59
|
+
# Increase query offset by page size.
|
|
60
|
+
offset += PAGE_SIZE
|
|
61
|
+
|
|
62
|
+
# Get the start index for printout.
|
|
63
|
+
start_index = page[:start_index]
|
|
64
|
+
|
|
65
|
+
# Print details about each audience segment in results page.
|
|
66
|
+
page[:results].each_with_index do |segment, index|
|
|
67
|
+
puts "%d) First party audience segment ID: %d, name: '%s', size %d" %
|
|
68
|
+
[index + start_index, segment[:id], segment[:name], segment[:size]]
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
end while offset < page[:total_result_set_size]
|
|
72
|
+
|
|
73
|
+
# Print a footer
|
|
74
|
+
if page.include?(:total_result_set_size)
|
|
75
|
+
puts 'Total number of first party audience segments: %d' %
|
|
76
|
+
page[:total_result_set_size]
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
if __FILE__ == $0
|
|
81
|
+
begin
|
|
82
|
+
get_first_party_audience_segments()
|
|
83
|
+
|
|
84
|
+
# HTTP errors.
|
|
85
|
+
rescue AdsCommon::Errors::HttpError => e
|
|
86
|
+
puts "HTTP Error: %s" % e
|
|
87
|
+
|
|
88
|
+
# API errors.
|
|
89
|
+
rescue DfpApi::Errors::ApiException => e
|
|
90
|
+
puts "Message: %s" % e.message
|
|
91
|
+
puts 'Errors:'
|
|
92
|
+
e.errors.each_with_index do |error, index|
|
|
93
|
+
puts "\tError [%d]:" % (index + 1)
|
|
94
|
+
error.each do |field, value|
|
|
95
|
+
puts "\t\t%s: %s" % [field, value]
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
end
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2013, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# This code example populates specific rule based first party audience segment.
|
|
22
|
+
# To determine which audience segments exist, run get_audience_segments.rb.
|
|
23
|
+
#
|
|
24
|
+
# Tags: AudienceSegmentService.getAudienceSegmentsByStatement
|
|
25
|
+
# Tags: AudienceSegmentService.performAudienceSegmentAction
|
|
26
|
+
|
|
27
|
+
require 'dfp_api'
|
|
28
|
+
|
|
29
|
+
API_VERSION = :v201311
|
|
30
|
+
PAGE_SIZE = 500
|
|
31
|
+
|
|
32
|
+
def populate_first_party_audience_segments(audience_segment_id)
|
|
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 AudienceSegmentService.
|
|
41
|
+
audience_segment_service = dfp.service(:AudienceSegmentService, API_VERSION)
|
|
42
|
+
|
|
43
|
+
# Statement parts to help build a statement to select first party audience
|
|
44
|
+
# segment for an ID.
|
|
45
|
+
statement = {
|
|
46
|
+
:query => 'WHERE type = :type AND Id = :audience_segment_id LIMIT 1',
|
|
47
|
+
:values => [
|
|
48
|
+
{:key => 'type',
|
|
49
|
+
:value => {:value => 'FIRST_PARTY', :xsi_type => 'TextValue'}},
|
|
50
|
+
{:key => 'audience_segment_id',
|
|
51
|
+
:value => {:value => audience_segment_id, :xsi_type => 'TextValue'}},
|
|
52
|
+
]
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Get audience segments by statement.
|
|
56
|
+
page = audience_segment_service.get_audience_segments_by_statement(statement)
|
|
57
|
+
|
|
58
|
+
if page[:results]
|
|
59
|
+
page[:results].each do |segment|
|
|
60
|
+
puts "First party audience segment ID: %d, name: '%s' will be populated" %
|
|
61
|
+
[segment[:id], segment[:name]]
|
|
62
|
+
|
|
63
|
+
# Perform action.
|
|
64
|
+
result = audience_segment_service.perform_audience_segment_action(
|
|
65
|
+
{:xsi_type => 'PopulateAudienceSegments'}, {:query => statement})
|
|
66
|
+
|
|
67
|
+
# Display results.
|
|
68
|
+
if result and result[:num_changes] > 0
|
|
69
|
+
puts 'Number of audience segments populated: %d.' % result[:num_changes]
|
|
70
|
+
else
|
|
71
|
+
puts 'No audience segments were populated.'
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
else
|
|
75
|
+
puts 'No first party audience segments found to populate.'
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if __FILE__ == $0
|
|
80
|
+
begin
|
|
81
|
+
# Audience segment ID to populate.
|
|
82
|
+
audience_segment_id = 'INSERT_AUDIENCE_SEGMENT_ID_HERE'
|
|
83
|
+
|
|
84
|
+
populate_first_party_audience_segments(audience_segment_id)
|
|
85
|
+
|
|
86
|
+
# HTTP errors.
|
|
87
|
+
rescue AdsCommon::Errors::HttpError => e
|
|
88
|
+
puts "HTTP Error: %s" % e
|
|
89
|
+
|
|
90
|
+
# API errors.
|
|
91
|
+
rescue DfpApi::Errors::ApiException => e
|
|
92
|
+
puts "Message: %s" % e.message
|
|
93
|
+
puts 'Errors:'
|
|
94
|
+
e.errors.each_with_index do |error, index|
|
|
95
|
+
puts "\tError [%d]:" % (index + 1)
|
|
96
|
+
error.each do |field, value|
|
|
97
|
+
puts "\t\t%s: %s" % [field, value]
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
end
|
|
101
|
+
end
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2013, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# This example updates rule based first party audience segments. To determine
|
|
22
|
+
# which first party audience segments exist, run
|
|
23
|
+
# get_all_first_party_audience_segments.rb.
|
|
24
|
+
#
|
|
25
|
+
# Tags: AudienceSegmentService.getAudienceSegmentsByStatement
|
|
26
|
+
# Tags: AudienceSegmentService.updateAudienceSegments
|
|
27
|
+
|
|
28
|
+
require 'dfp_api'
|
|
29
|
+
|
|
30
|
+
API_VERSION = :v201311
|
|
31
|
+
|
|
32
|
+
def update_audience_segments()
|
|
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
|
+
# Set the ID of the first party audience segment to update.
|
|
41
|
+
audience_segment_id = 'INSERT_AUDIENCE_SEGMENT_ID_HERE'
|
|
42
|
+
|
|
43
|
+
# Get the AudienceSegmentService.
|
|
44
|
+
audience_segment_service = dfp.service(:AudienceSegmentService, API_VERSION)
|
|
45
|
+
|
|
46
|
+
# Create statement text to select the audience segment to update.
|
|
47
|
+
statement = {
|
|
48
|
+
:query => 'WHERE id = :segment_id',
|
|
49
|
+
:values => [
|
|
50
|
+
{
|
|
51
|
+
:key => 'segment_id',
|
|
52
|
+
:value => {:value => audience_segment_id, :xsi_type => 'NumberValue'}
|
|
53
|
+
}
|
|
54
|
+
]
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
# Get audience segments by statement.
|
|
58
|
+
page = audience_segment_service.get_audience_segments_by_statement(statement)
|
|
59
|
+
|
|
60
|
+
if page[:results]
|
|
61
|
+
audience_segments = page[:results]
|
|
62
|
+
|
|
63
|
+
# Create a local set of audience segments than need to be updated.
|
|
64
|
+
audience_segments.each do |audience_segment|
|
|
65
|
+
audience_segment[:membership_expiration_days] = 180
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
# Update the audience segments on the server.
|
|
69
|
+
return_audience_segments =
|
|
70
|
+
audience_segment_service.update_audience_segments(audience_segments)
|
|
71
|
+
return_audience_segments.each do |audience_segment|
|
|
72
|
+
puts 'Audience segment ID: %d was updated' % audience_segment[:id]
|
|
73
|
+
end
|
|
74
|
+
else
|
|
75
|
+
puts 'No audience segments found to update.'
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
if __FILE__ == $0
|
|
80
|
+
begin
|
|
81
|
+
update_audience_segments()
|
|
82
|
+
|
|
83
|
+
# HTTP errors.
|
|
84
|
+
rescue AdsCommon::Errors::HttpError => e
|
|
85
|
+
puts "HTTP Error: %s" % e
|
|
86
|
+
|
|
87
|
+
# API errors.
|
|
88
|
+
rescue DfpApi::Errors::ApiException => e
|
|
89
|
+
puts "Message: %s" % e.message
|
|
90
|
+
puts 'Errors:'
|
|
91
|
+
e.errors.each_with_index do |error, index|
|
|
92
|
+
puts "\tError [%d]:" % (index + 1)
|
|
93
|
+
error.each do |field, value|
|
|
94
|
+
puts "\t\t%s: %s" % [field, value]
|
|
95
|
+
end
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
|
+
# Encoding: utf-8
|
|
3
|
+
#
|
|
4
|
+
# Author:: api.dklimkin@gmail.com (Danial Klimkin)
|
|
5
|
+
#
|
|
6
|
+
# Copyright:: Copyright 2011, Google Inc. All Rights Reserved.
|
|
7
|
+
#
|
|
8
|
+
# License:: Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
# you may not use this file except in compliance with the License.
|
|
10
|
+
# You may obtain a copy of the License at
|
|
11
|
+
#
|
|
12
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
13
|
+
#
|
|
14
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
15
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
16
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
17
|
+
# implied.
|
|
18
|
+
# See the License for the specific language governing permissions and
|
|
19
|
+
# limitations under the License.
|
|
20
|
+
#
|
|
21
|
+
# This example runs incorrect query and demonstrates how to handle errors.
|
|
22
|
+
#
|
|
23
|
+
# Tags: UserService.updateUser
|
|
24
|
+
|
|
25
|
+
require 'dfp_api'
|
|
26
|
+
|
|
27
|
+
API_VERSION = :v201311
|
|
28
|
+
|
|
29
|
+
def produce_api_error()
|
|
30
|
+
# Get DfpApi instance and load configuration from ~/dfp_api.yml.
|
|
31
|
+
dfp = DfpApi::Api.new
|
|
32
|
+
|
|
33
|
+
# To enable logging of SOAP requests, set the log_level value to 'DEBUG' in
|
|
34
|
+
# the configuration file or provide your own logger:
|
|
35
|
+
# dfp.logger = Logger.new('dfp_xml.log')
|
|
36
|
+
|
|
37
|
+
# Get the UserService.
|
|
38
|
+
user_service = dfp.service(:UserService, API_VERSION)
|
|
39
|
+
|
|
40
|
+
# Omitting "id" field here to produce an error.
|
|
41
|
+
user = {:preferred_locale => 'en_UK', :name => 'foo_bar'}
|
|
42
|
+
|
|
43
|
+
# Execute request and get the response, this should raise an exception.
|
|
44
|
+
user = user_service.update_user(user)
|
|
45
|
+
|
|
46
|
+
# Output retrieved data.
|
|
47
|
+
puts "User ID: %d, name: %s, email: %s" %
|
|
48
|
+
[user[:id], user[:name], user[:email]]
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
if __FILE__ == $0
|
|
52
|
+
begin
|
|
53
|
+
# This function should produce an exception for demo.
|
|
54
|
+
produce_api_error()
|
|
55
|
+
|
|
56
|
+
# One of two kinds of exception might occur, general HTTP error like 403 or
|
|
57
|
+
# 404 and DFP API error defined in WSDL and described in documentation.
|
|
58
|
+
|
|
59
|
+
# Handling HTTP errors.
|
|
60
|
+
rescue AdsCommon::Errors::HttpError => e
|
|
61
|
+
puts "HTTP Error: %s" % e
|
|
62
|
+
|
|
63
|
+
# Handling API errors.
|
|
64
|
+
rescue DfpApi::Errors::ApiException => e
|
|
65
|
+
# Standard DFP API error includes message and array of errors occured.
|
|
66
|
+
puts "Message: %s" % e.message
|
|
67
|
+
puts 'Errors:'
|
|
68
|
+
# Print out each of the errors.
|
|
69
|
+
e.errors.each_with_index do |error, index|
|
|
70
|
+
puts "\tError [%d]:" % (index + 1)
|
|
71
|
+
error.each do |field, value|
|
|
72
|
+
puts "\t\t%s: %s" % [field, value]
|
|
73
|
+
end
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
end
|
|
@@ -18,18 +18,17 @@
|
|
|
18
18
|
# See the License for the specific language governing permissions and
|
|
19
19
|
# limitations under the License.
|
|
20
20
|
#
|
|
21
|
-
# This example shows how to use OAuth2.0 authorization method
|
|
22
|
-
#
|
|
21
|
+
# This example shows how to use OAuth2.0 authorization method with JWT (Service
|
|
22
|
+
# Account).
|
|
23
23
|
#
|
|
24
24
|
# Tags: UserService.getUsersByStatement
|
|
25
25
|
|
|
26
26
|
require 'dfp_api'
|
|
27
27
|
|
|
28
|
-
API_VERSION = :
|
|
28
|
+
API_VERSION = :v201311
|
|
29
29
|
PAGE_SIZE = 500
|
|
30
|
-
MAX_RETRIES = 3
|
|
31
30
|
|
|
32
|
-
def
|
|
31
|
+
def oauth2_jwt_handling()
|
|
33
32
|
# Get DfpApi instance and load configuration from ~/dfp_api.yml.
|
|
34
33
|
dfp = DfpApi::Api.new
|
|
35
34
|
|
|
@@ -37,14 +36,19 @@ def oauth2_handling()
|
|
|
37
36
|
# the configuration file or provide your own logger:
|
|
38
37
|
# dfp.logger = Logger.new('dfp_xml.log')
|
|
39
38
|
|
|
40
|
-
#
|
|
41
|
-
#
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
39
|
+
# Option 1: provide key filename as authentication -> oauth2_keyfile in the
|
|
40
|
+
# configuration file. No additional code is necessary.
|
|
41
|
+
# To provide a file name at runtime, use authorize:
|
|
42
|
+
# dfp.authorize({:oauth2_keyfile => key_filename})
|
|
43
|
+
|
|
44
|
+
# Option 2: retrieve key manually and create OpenSSL::PKCS12 object.
|
|
45
|
+
# key_filename = 'INSERT_FILENAME_HERE'
|
|
46
|
+
# key_secret = 'INSERT_SECRET_HERE'
|
|
47
|
+
# key_file_data = File.read(key_filename)
|
|
48
|
+
# key = OpenSSL::PKCS12.new(key_file_data, key_secret).key
|
|
49
|
+
# dfp.authorize({:oauth2_key => key})
|
|
50
|
+
|
|
51
|
+
# Now you can make API calls.
|
|
48
52
|
|
|
49
53
|
# Get the UserService.
|
|
50
54
|
user_service = dfp.service(:UserService, API_VERSION)
|
|
@@ -52,30 +56,13 @@ def oauth2_handling()
|
|
|
52
56
|
# Define initial values.
|
|
53
57
|
offset = 0
|
|
54
58
|
page = Hash.new
|
|
55
|
-
retry_count = 0
|
|
56
59
|
|
|
57
60
|
begin
|
|
58
61
|
# Create statement for one page with current offset.
|
|
59
62
|
statement = {:query => "LIMIT %d OFFSET %d" % [PAGE_SIZE, offset]}
|
|
60
63
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
page = user_service.get_users_by_statement(statement)
|
|
64
|
-
|
|
65
|
-
# The second way to do OAuth authentication is to make a request and catch
|
|
66
|
-
# the OAuthVerificationRequired exception. Add the verification code to the
|
|
67
|
-
# credentials once acquired.
|
|
68
|
-
rescue AdsCommon::Errors::OAuth2VerificationRequired => e
|
|
69
|
-
if retry_count < MAX_RETRIES
|
|
70
|
-
verification_code = get_verification_code(e.oauth_url)
|
|
71
|
-
dfp.credential_handler.set_credential(
|
|
72
|
-
:oauth2_verification_code, verification_code)
|
|
73
|
-
retry_count += 1
|
|
74
|
-
retry
|
|
75
|
-
else
|
|
76
|
-
raise AdsCommon::Errors::AuthError, 'Failed to authenticate.'
|
|
77
|
-
end
|
|
78
|
-
end
|
|
64
|
+
# Get users by statement.
|
|
65
|
+
page = user_service.get_users_by_statement(statement)
|
|
79
66
|
|
|
80
67
|
if page[:results]
|
|
81
68
|
# Increase query offset by page size.
|
|
@@ -98,17 +85,9 @@ def oauth2_handling()
|
|
|
98
85
|
end
|
|
99
86
|
end
|
|
100
87
|
|
|
101
|
-
# Misc util to get the verification code from the console.
|
|
102
|
-
def get_verification_code(url)
|
|
103
|
-
puts "Hit Auth error, please navigate to URL:\n\t%s" % url
|
|
104
|
-
print 'Log in and type the verification code: '
|
|
105
|
-
verification_code = gets.chomp
|
|
106
|
-
return verification_code
|
|
107
|
-
end
|
|
108
|
-
|
|
109
88
|
if __FILE__ == $0
|
|
110
89
|
begin
|
|
111
|
-
|
|
90
|
+
oauth2_jwt_handling()
|
|
112
91
|
|
|
113
92
|
# HTTP errors.
|
|
114
93
|
rescue AdsCommon::Errors::HttpError => e
|