google-adwords-api 0.4.0 → 0.4.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.
- data/ChangeLog +9 -0
- data/README +26 -10
- data/Rakefile +1 -1
- data/examples/v200909/add_ad_group.rb +2 -2
- data/examples/v200909/add_ads.rb +4 -4
- data/examples/v200909/add_campaign.rb +2 -2
- data/examples/v200909/check_campaigns.rb +4 -4
- data/examples/v201003/add_ad_group.rb +2 -2
- data/examples/v201003/add_ads.rb +6 -6
- data/examples/v201003/add_campaign.rb +2 -2
- data/examples/v201003/add_keywords_performance_report_definition.rb +2 -2
- data/examples/v201003/check_campaigns.rb +4 -4
- data/examples/v201008/add_ad_group.rb +2 -2
- data/examples/v201008/add_ads.rb +7 -7
- data/examples/v201008/add_campaign.rb +2 -2
- data/examples/v201008/add_experiment.rb +5 -5
- data/examples/v201008/add_keywords_performance_report_definition.rb +2 -2
- data/examples/v201008/add_user_list.rb +2 -2
- data/examples/v201008/check_campaigns.rb +4 -4
- data/examples/v201008/get_account_hierarchy.rb +8 -11
- data/examples/v201101/add_ad_group.rb +2 -2
- data/examples/v201101/add_ads.rb +6 -6
- data/examples/v201101/add_campaign.rb +2 -2
- data/examples/v201101/add_conversion.rb +4 -4
- data/examples/v201101/add_experiment.rb +5 -5
- data/examples/v201101/add_keywords_performance_report_definition.rb +2 -2
- data/examples/v201101/add_user_list.rb +3 -3
- data/examples/v201101/check_campaigns.rb +4 -4
- data/examples/v201101/get_account_hierarchy.rb +7 -9
- data/examples/v201109/add_ad_extension_override.rb +82 -0
- data/examples/v201109/add_ad_group.rb +89 -0
- data/examples/v201109/add_ad_group_criteria.rb +109 -0
- data/examples/v201109/add_ads.rb +174 -0
- data/examples/v201109/add_campaign.rb +99 -0
- data/examples/v201109/add_campaign_ad_extension.rb +121 -0
- data/examples/v201109/add_campaign_targeting_criteria.rb +102 -0
- data/examples/{v201101/add_mcc_report_definition.rb → v201109/add_conversion.rb} +26 -28
- data/examples/v201109/add_experiment.rb +153 -0
- data/examples/v201109/add_negative_campaign_criterion.rb +87 -0
- data/examples/v201109/add_user_list.rb +113 -0
- data/examples/v201109/check_campaigns.rb +123 -0
- data/examples/v201109/delete_ad.rb +85 -0
- data/examples/v201109/delete_ad_group.rb +77 -0
- data/examples/v201109/delete_ad_group_criterion.rb +86 -0
- data/examples/v201109/delete_bulk_mutate_job.rb +87 -0
- data/examples/v201109/delete_campaign.rb +78 -0
- data/examples/v201109/delete_experiment.rb +78 -0
- data/examples/v201109/delete_user_list.rb +78 -0
- data/examples/v201109/download_adhoc_report.rb +79 -0
- data/examples/v201109/download_report.rb +67 -0
- data/examples/v201109/get_account_hierarchy.rb +93 -0
- data/examples/v201109/get_ad_group_bid_landscape.rb +94 -0
- data/examples/v201109/get_all_account_changes.rb +137 -0
- data/examples/v201109/get_all_active_ad_group_criteria.rb +98 -0
- data/examples/v201109/get_all_ad_extension_overrides.rb +82 -0
- data/examples/v201109/get_all_ad_group_criteria.rb +90 -0
- data/examples/v201109/get_all_ad_groups.rb +85 -0
- data/examples/v201109/get_all_ad_params.rb +86 -0
- data/examples/v201109/get_all_ads.rb +90 -0
- data/examples/v201109/get_all_campaign_ad_extensions.rb +87 -0
- data/examples/v201109/get_all_campaign_targets.rb +74 -0
- data/examples/v201109/get_all_campaigns.rb +77 -0
- data/examples/v201109/get_all_carriers.rb +72 -0
- data/examples/v201109/get_all_conversions.rb +79 -0
- data/examples/v201109/get_all_disapproved_ads.rb +93 -0
- data/examples/v201109/get_all_experiments.rb +89 -0
- data/examples/v201109/get_all_images.rb +82 -0
- data/examples/v201109/get_all_languages.rb +73 -0
- data/examples/v201109/get_all_paused_campaigns.rb +83 -0
- data/examples/v201109/get_all_report_definitions.rb +75 -0
- data/examples/v201109/get_all_user_lists.rb +78 -0
- data/examples/v201109/get_all_videos.rb +78 -0
- data/examples/v201109/get_bulk_mutate_job.rb +97 -0
- data/examples/v201109/get_campaign_alerts.rb +95 -0
- data/examples/v201109/get_client_customer_id.rb +87 -0
- data/examples/v201109/get_conversion_optimizer_eligibility.rb +93 -0
- data/examples/v201109/get_criterion_bid_landscape.rb +93 -0
- data/examples/v201109/get_geo_location_info.rb +99 -0
- data/examples/v201109/get_keyword_opportunities.rb +95 -0
- data/examples/v201109/get_location_criteria.rb +103 -0
- data/examples/v201109/get_method_cost.rb +87 -0
- data/examples/v201109/get_operation_count.rb +79 -0
- data/examples/v201109/get_related_keywords.rb +108 -0
- data/examples/v201109/get_related_placements.rb +107 -0
- data/examples/v201109/get_report_fields.rb +72 -0
- data/examples/v201109/get_total_usage_units_per_month.rb +74 -0
- data/examples/v201109/get_traffic_estimates.rb +129 -0
- data/examples/v201109/get_unit_count.rb +81 -0
- data/examples/v201109/handle_partial_failures.rb +127 -0
- data/examples/v201109/handle_policy_violation_error.rb +138 -0
- data/examples/v201109/handle_second_factor.rb +87 -0
- data/examples/v201109/oauth_handling.rb +95 -0
- data/examples/v201109/perform_bulk_mutate_job.rb +212 -0
- data/examples/v201109/perform_mutate_job.rb +177 -0
- data/examples/v201109/promote_experiment.rb +79 -0
- data/examples/v201109/set_ad_params.rb +115 -0
- data/examples/v201109/update_ad.rb +86 -0
- data/examples/v201109/update_ad_group.rb +81 -0
- data/examples/v201109/update_ad_group_criterion.rb +99 -0
- data/examples/v201109/update_campaign.rb +84 -0
- data/examples/v201109/update_conversion.rb +87 -0
- data/examples/v201109/update_user_list.rb +82 -0
- data/examples/v201109/upload_image.rb +90 -0
- data/lib/adwords_api.rb +54 -50
- data/lib/adwords_api/api_config.rb +70 -14
- data/lib/adwords_api/credential_handler.rb +32 -13
- data/lib/adwords_api/errors.rb +12 -0
- data/lib/adwords_api/extensions.rb +8 -118
- data/lib/adwords_api/report_utils.rb +198 -0
- data/lib/adwords_api/utils.rb +5 -2
- data/lib/adwords_api/v13/account_service.rb +11 -11
- data/lib/adwords_api/v13/account_service_registry.rb +5 -3
- data/lib/adwords_api/v13/report_service.rb +15 -15
- data/lib/adwords_api/v13/report_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/ad_extension_override_service.rb +5 -5
- data/lib/adwords_api/v200909/ad_extension_override_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/ad_group_ad_service.rb +5 -5
- data/lib/adwords_api/v200909/ad_group_ad_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/ad_group_criterion_service.rb +5 -5
- data/lib/adwords_api/v200909/ad_group_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/ad_group_service.rb +5 -5
- data/lib/adwords_api/v200909/ad_group_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/ad_param_service.rb +5 -5
- data/lib/adwords_api/v200909/ad_param_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/bulk_mutate_job_service.rb +5 -5
- data/lib/adwords_api/v200909/bulk_mutate_job_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/campaign_ad_extension_service.rb +5 -5
- data/lib/adwords_api/v200909/campaign_ad_extension_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/campaign_criterion_service.rb +5 -5
- data/lib/adwords_api/v200909/campaign_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/campaign_service.rb +5 -5
- data/lib/adwords_api/v200909/campaign_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/campaign_target_service.rb +5 -5
- data/lib/adwords_api/v200909/campaign_target_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/geo_location_service.rb +3 -3
- data/lib/adwords_api/v200909/geo_location_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/info_service.rb +3 -3
- data/lib/adwords_api/v200909/info_service_registry.rb +5 -3
- data/lib/adwords_api/v200909/targeting_idea_service.rb +5 -5
- data/lib/adwords_api/v200909/targeting_idea_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/ad_extension_override_service.rb +5 -5
- data/lib/adwords_api/v201003/ad_extension_override_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/ad_group_ad_service.rb +5 -5
- data/lib/adwords_api/v201003/ad_group_ad_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/ad_group_criterion_service.rb +5 -5
- data/lib/adwords_api/v201003/ad_group_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/ad_group_service.rb +5 -5
- data/lib/adwords_api/v201003/ad_group_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/ad_param_service.rb +5 -5
- data/lib/adwords_api/v201003/ad_param_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/bid_landscape_service.rb +3 -3
- data/lib/adwords_api/v201003/bid_landscape_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/bulk_mutate_job_service.rb +5 -5
- data/lib/adwords_api/v201003/bulk_mutate_job_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/campaign_ad_extension_service.rb +5 -5
- data/lib/adwords_api/v201003/campaign_ad_extension_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/campaign_criterion_service.rb +5 -5
- data/lib/adwords_api/v201003/campaign_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/campaign_service.rb +5 -5
- data/lib/adwords_api/v201003/campaign_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/campaign_target_service.rb +5 -5
- data/lib/adwords_api/v201003/campaign_target_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/geo_location_service.rb +3 -3
- data/lib/adwords_api/v201003/geo_location_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/info_service.rb +3 -3
- data/lib/adwords_api/v201003/info_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/media_service.rb +5 -5
- data/lib/adwords_api/v201003/media_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/report_definition_service.rb +7 -7
- data/lib/adwords_api/v201003/report_definition_service_registry.rb +5 -3
- data/lib/adwords_api/v201003/targeting_idea_service.rb +5 -5
- data/lib/adwords_api/v201003/targeting_idea_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/ad_extension_override_service.rb +5 -5
- data/lib/adwords_api/v201008/ad_extension_override_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/ad_group_ad_service.rb +5 -5
- data/lib/adwords_api/v201008/ad_group_ad_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/ad_group_criterion_service.rb +5 -5
- data/lib/adwords_api/v201008/ad_group_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/ad_group_service.rb +5 -5
- data/lib/adwords_api/v201008/ad_group_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/ad_param_service.rb +5 -5
- data/lib/adwords_api/v201008/ad_param_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/alert_service.rb +3 -3
- data/lib/adwords_api/v201008/alert_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/bid_landscape_service.rb +3 -3
- data/lib/adwords_api/v201008/bid_landscape_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/bulk_mutate_job_service.rb +5 -5
- data/lib/adwords_api/v201008/bulk_mutate_job_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/campaign_ad_extension_service.rb +5 -5
- data/lib/adwords_api/v201008/campaign_ad_extension_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/campaign_criterion_service.rb +5 -5
- data/lib/adwords_api/v201008/campaign_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/campaign_service.rb +5 -5
- data/lib/adwords_api/v201008/campaign_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/campaign_target_service.rb +5 -5
- data/lib/adwords_api/v201008/campaign_target_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/customer_sync_service.rb +3 -3
- data/lib/adwords_api/v201008/customer_sync_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/experiment_service.rb +5 -5
- data/lib/adwords_api/v201008/experiment_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/geo_location_service.rb +3 -3
- data/lib/adwords_api/v201008/geo_location_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/info_service.rb +3 -3
- data/lib/adwords_api/v201008/info_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/media_service.rb +5 -5
- data/lib/adwords_api/v201008/media_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/report_definition_service.rb +7 -7
- data/lib/adwords_api/v201008/report_definition_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/serviced_account_service.rb +3 -3
- data/lib/adwords_api/v201008/serviced_account_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/targeting_idea_service.rb +5 -5
- data/lib/adwords_api/v201008/targeting_idea_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/traffic_estimator_service.rb +3 -3
- data/lib/adwords_api/v201008/traffic_estimator_service_registry.rb +5 -3
- data/lib/adwords_api/v201008/user_list_service.rb +5 -5
- data/lib/adwords_api/v201008/user_list_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/ad_extension_override_service.rb +5 -5
- data/lib/adwords_api/v201101/ad_extension_override_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/ad_group_ad_service.rb +5 -5
- data/lib/adwords_api/v201101/ad_group_ad_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/ad_group_criterion_service.rb +5 -5
- data/lib/adwords_api/v201101/ad_group_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/ad_group_service.rb +5 -5
- data/lib/adwords_api/v201101/ad_group_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/ad_param_service.rb +5 -5
- data/lib/adwords_api/v201101/ad_param_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/alert_service.rb +3 -3
- data/lib/adwords_api/v201101/alert_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/bulk_mutate_job_service.rb +5 -5
- data/lib/adwords_api/v201101/bulk_mutate_job_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/bulk_opportunity_service.rb +3 -3
- data/lib/adwords_api/v201101/bulk_opportunity_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/campaign_ad_extension_service.rb +5 -5
- data/lib/adwords_api/v201101/campaign_ad_extension_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/campaign_criterion_service.rb +5 -5
- data/lib/adwords_api/v201101/campaign_criterion_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/campaign_service.rb +5 -5
- data/lib/adwords_api/v201101/campaign_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/campaign_target_service.rb +5 -5
- data/lib/adwords_api/v201101/campaign_target_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/conversion_tracker_service.rb +5 -5
- data/lib/adwords_api/v201101/conversion_tracker_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/customer_sync_service.rb +3 -3
- data/lib/adwords_api/v201101/customer_sync_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/data_service.rb +5 -5
- data/lib/adwords_api/v201101/data_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/experiment_service.rb +5 -5
- data/lib/adwords_api/v201101/experiment_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/geo_location_service.rb +3 -3
- data/lib/adwords_api/v201101/geo_location_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/info_service.rb +3 -3
- data/lib/adwords_api/v201101/info_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/media_service.rb +5 -5
- data/lib/adwords_api/v201101/media_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/report_definition_service.rb +7 -15
- data/lib/adwords_api/v201101/report_definition_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/serviced_account_service.rb +3 -3
- data/lib/adwords_api/v201101/serviced_account_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/targeting_idea_service.rb +5 -5
- data/lib/adwords_api/v201101/targeting_idea_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/traffic_estimator_service.rb +3 -3
- data/lib/adwords_api/v201101/traffic_estimator_service_registry.rb +5 -3
- data/lib/adwords_api/v201101/user_list_service.rb +5 -5
- data/lib/adwords_api/v201101/user_list_service_registry.rb +5 -3
- data/lib/adwords_api/v201109/ad_extension_override_service.rb +36 -0
- data/lib/adwords_api/v201109/ad_extension_override_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/ad_group_ad_service.rb +36 -0
- data/lib/adwords_api/v201109/ad_group_ad_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/ad_group_criterion_service.rb +36 -0
- data/lib/adwords_api/v201109/ad_group_criterion_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/ad_group_service.rb +36 -0
- data/lib/adwords_api/v201109/ad_group_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/ad_param_service.rb +36 -0
- data/lib/adwords_api/v201109/ad_param_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/alert_service.rb +32 -0
- data/lib/adwords_api/v201109/alert_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/bulk_mutate_job_service.rb +36 -0
- data/lib/adwords_api/v201109/bulk_mutate_job_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/bulk_opportunity_service.rb +32 -0
- data/lib/adwords_api/v201109/bulk_opportunity_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/campaign_ad_extension_service.rb +36 -0
- data/lib/adwords_api/v201109/campaign_ad_extension_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/campaign_criterion_service.rb +36 -0
- data/lib/adwords_api/v201109/campaign_criterion_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/campaign_service.rb +36 -0
- data/lib/adwords_api/v201109/campaign_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/campaign_target_service.rb +36 -0
- data/lib/adwords_api/v201109/campaign_target_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/constant_data_service.rb +36 -0
- data/lib/adwords_api/v201109/constant_data_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/conversion_tracker_service.rb +36 -0
- data/lib/adwords_api/v201109/conversion_tracker_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/customer_sync_service.rb +32 -0
- data/lib/adwords_api/v201109/customer_sync_service_registry.rb +45 -0
- data/lib/adwords_api/v201109/data_service.rb +36 -0
- data/lib/adwords_api/v201109/data_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/experiment_service.rb +36 -0
- data/lib/adwords_api/v201109/experiment_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/geo_location_service.rb +32 -0
- data/lib/adwords_api/v201109/geo_location_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/info_service.rb +32 -0
- data/lib/adwords_api/v201109/info_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/location_criterion_service.rb +32 -0
- data/lib/adwords_api/v201109/location_criterion_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/media_service.rb +36 -0
- data/lib/adwords_api/v201109/media_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/mutate_job_service.rb +40 -0
- data/lib/adwords_api/v201109/mutate_job_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/report_definition_service.rb +45 -0
- data/lib/adwords_api/v201109/report_definition_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/serviced_account_service.rb +32 -0
- data/lib/adwords_api/v201109/serviced_account_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/targeting_idea_service.rb +36 -0
- data/lib/adwords_api/v201109/targeting_idea_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/traffic_estimator_service.rb +32 -0
- data/lib/adwords_api/v201109/traffic_estimator_service_registry.rb +44 -0
- data/lib/adwords_api/v201109/user_list_service.rb +36 -0
- data/lib/adwords_api/v201109/user_list_service_registry.rb +44 -0
- data/test/bugs/test_issue_00000031.rb +78 -0
- metadata +467 -342
- data/examples/v201101/download_mcc_report.rb +0 -113
- data/examples/v201101/download_mcc_report_as_file.rb +0 -114
- data/lib/adwords_api/v13/traffic_estimator_service.rb +0 -44
- data/lib/adwords_api/v13/traffic_estimator_service_registry.rb +0 -39
data/lib/adwords_api.rb
CHANGED
|
@@ -20,18 +20,18 @@
|
|
|
20
20
|
#
|
|
21
21
|
# Contains the main classes for the client library.
|
|
22
22
|
|
|
23
|
-
gem 'google-ads-common', '~>0.5.
|
|
24
|
-
|
|
25
|
-
require 'savon'
|
|
23
|
+
gem 'google-ads-common', '~>0.5.2'
|
|
26
24
|
|
|
27
25
|
require 'ads_common/api'
|
|
28
26
|
require 'ads_common/auth/oauth_handler'
|
|
27
|
+
require 'ads_common/savon_service'
|
|
29
28
|
require 'ads_common/savon_headers/oauth_header_handler'
|
|
30
29
|
require 'ads_common/savon_headers/simple_header_handler'
|
|
31
30
|
require 'adwords_api/api_config'
|
|
32
31
|
require 'adwords_api/client_login_header_handler'
|
|
33
32
|
require 'adwords_api/credential_handler'
|
|
34
33
|
require 'adwords_api/errors'
|
|
34
|
+
require 'adwords_api/report_utils'
|
|
35
35
|
require 'adwords_api/v13_login_handler'
|
|
36
36
|
|
|
37
37
|
# Main namespace for all the client library's modules and classes.
|
|
@@ -56,10 +56,7 @@ module AdwordsApi
|
|
|
56
56
|
# Sets the logger to use.
|
|
57
57
|
def logger=(logger)
|
|
58
58
|
super(logger)
|
|
59
|
-
|
|
60
|
-
config.log_level = :debug
|
|
61
|
-
config.logger = logger
|
|
62
|
-
end
|
|
59
|
+
AdsCommon::SavonService.logger = logger
|
|
63
60
|
end
|
|
64
61
|
|
|
65
62
|
# Retrieve single NestedHeaderHandler for v20xx and one SingleHeaderHandler
|
|
@@ -76,8 +73,7 @@ module AdwordsApi
|
|
|
76
73
|
# - a list of SOAP header handlers; one per provided header
|
|
77
74
|
#
|
|
78
75
|
def soap_header_handlers(auth_handler, header_list, version, namespace)
|
|
79
|
-
auth_method = @config.read('authentication.method',
|
|
80
|
-
'ClientLogin').to_s.upcase.to_sym
|
|
76
|
+
auth_method = @config.read('authentication.method', :CLIENTLOGIN)
|
|
81
77
|
|
|
82
78
|
handlers = []
|
|
83
79
|
|
|
@@ -113,8 +109,7 @@ module AdwordsApi
|
|
|
113
109
|
# support is available.
|
|
114
110
|
def client_login_handler()
|
|
115
111
|
if @client_login_handler.nil?
|
|
116
|
-
|
|
117
|
-
auth_method = auth_method_str.to_s.upcase.to_sym
|
|
112
|
+
auth_method = @config.read('authentication.method', :CLIENTLOGIN)
|
|
118
113
|
environment = @config.read('service.environment')
|
|
119
114
|
if auth_method == :CLIENTLOGIN
|
|
120
115
|
# We use client login, so we can reuse general AuthHandler.
|
|
@@ -138,20 +133,14 @@ module AdwordsApi
|
|
|
138
133
|
# - accepts a block, which it will execute as an MCC-level operation
|
|
139
134
|
#
|
|
140
135
|
# Returns:
|
|
141
|
-
# -
|
|
142
|
-
#
|
|
136
|
+
# - block execution result, if block given
|
|
137
|
+
# - boolean indicating whether MCC-level operations are currently
|
|
138
|
+
# enabled or disabled, if no block provided
|
|
143
139
|
#
|
|
144
|
-
def use_mcc
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
@credential_handler.use_mcc = true
|
|
149
|
-
yield
|
|
150
|
-
ensure
|
|
151
|
-
@credential_handler.use_mcc = previous
|
|
152
|
-
end
|
|
153
|
-
end
|
|
154
|
-
return @credential_handler.use_mcc
|
|
140
|
+
def use_mcc(&block)
|
|
141
|
+
return (block_given?) ?
|
|
142
|
+
run_with_temporary_flag(:@use_mcc, true, block) :
|
|
143
|
+
@credential_handler.use_mcc
|
|
155
144
|
end
|
|
156
145
|
|
|
157
146
|
# Helper method to provide a simple way of doing an MCC-level operation
|
|
@@ -173,20 +162,14 @@ module AdwordsApi
|
|
|
173
162
|
# - accepts a block, which it will execute as a validate-only operation
|
|
174
163
|
#
|
|
175
164
|
# Returns:
|
|
176
|
-
# -
|
|
177
|
-
#
|
|
165
|
+
# - block execution result, if block given
|
|
166
|
+
# - boolean indicating whether validate-only operations are currently
|
|
167
|
+
# enabled or disabled, if no block provided
|
|
178
168
|
#
|
|
179
|
-
def validate_only
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
@credential_handler.validate_only = true
|
|
184
|
-
yield
|
|
185
|
-
ensure
|
|
186
|
-
@credential_handler.validate_only = previous
|
|
187
|
-
end
|
|
188
|
-
end
|
|
189
|
-
return @credential_handler.validate_only
|
|
169
|
+
def validate_only(&block)
|
|
170
|
+
return (block_given?) ?
|
|
171
|
+
run_with_temporary_flag(:@validate_only, true, block) :
|
|
172
|
+
@credential_handler.validate_only
|
|
190
173
|
end
|
|
191
174
|
|
|
192
175
|
# Helper method to provide a simple way of performing validate-only
|
|
@@ -208,20 +191,14 @@ module AdwordsApi
|
|
|
208
191
|
# - accepts a block, which it will execute as a partial failure operation
|
|
209
192
|
#
|
|
210
193
|
# Returns:
|
|
211
|
-
# -
|
|
212
|
-
#
|
|
194
|
+
# - block execution result, if block given
|
|
195
|
+
# - boolean indicating whether partial failure operations are currently
|
|
196
|
+
# enabled or disabled, if no block provided
|
|
213
197
|
#
|
|
214
|
-
def partial_failure
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
@credential_handler.partial_failure = true
|
|
219
|
-
yield
|
|
220
|
-
ensure
|
|
221
|
-
@credential_handler.partial_failure = previous
|
|
222
|
-
end
|
|
223
|
-
end
|
|
224
|
-
return @credential_handler.partial_failure
|
|
198
|
+
def partial_failure(&block)
|
|
199
|
+
return (block_given?) ?
|
|
200
|
+
run_with_temporary_flag(:partial_failure, true, block) :
|
|
201
|
+
@credential_handler.partial_failure
|
|
225
202
|
end
|
|
226
203
|
|
|
227
204
|
# Helper method to provide a simple way of performing requests with support
|
|
@@ -234,6 +211,21 @@ module AdwordsApi
|
|
|
234
211
|
@credential_handler.partial_failure = value
|
|
235
212
|
end
|
|
236
213
|
|
|
214
|
+
# Returns an instance of ReportUtils object with all utilities relevant to
|
|
215
|
+
# the reporting.
|
|
216
|
+
#
|
|
217
|
+
# Args:
|
|
218
|
+
# - version: version of the API to use (optional).
|
|
219
|
+
#
|
|
220
|
+
def report_utils(version = nil)
|
|
221
|
+
version = api_config.default_version if version.nil?
|
|
222
|
+
# Check if version exists.
|
|
223
|
+
if !api_config.versions.include?(version)
|
|
224
|
+
raise AdsCommon::Errors::Error, "Unknown version '%s'" % version
|
|
225
|
+
end
|
|
226
|
+
return AdwordsApi::ReportUtils.new(self, version)
|
|
227
|
+
end
|
|
228
|
+
|
|
237
229
|
private
|
|
238
230
|
|
|
239
231
|
# Overrides AdsCommon::Api.get_auth_handler to allow version-specific
|
|
@@ -259,5 +251,17 @@ module AdwordsApi
|
|
|
259
251
|
return (version == :v13) ?
|
|
260
252
|
AdwordsApi::V13LoginHandler.new : super(environment)
|
|
261
253
|
end
|
|
254
|
+
|
|
255
|
+
# Executes block with a temporary flag set to a given value. Returns block
|
|
256
|
+
# result.
|
|
257
|
+
def run_with_temporary_flag(flag_name, flag_value, block)
|
|
258
|
+
previous = @credential_handler.instance_variable_get(flag_name)
|
|
259
|
+
@credential_handler.instance_variable_set(flag_name, flag_value)
|
|
260
|
+
begin
|
|
261
|
+
return block.call
|
|
262
|
+
ensure
|
|
263
|
+
@credential_handler.instance_variable_set(flag_name, previous)
|
|
264
|
+
end
|
|
265
|
+
end
|
|
262
266
|
end
|
|
263
267
|
end
|
|
@@ -35,19 +35,19 @@ module AdwordsApi
|
|
|
35
35
|
end
|
|
36
36
|
|
|
37
37
|
# Set defaults
|
|
38
|
-
DEFAULT_VERSION = :
|
|
38
|
+
DEFAULT_VERSION = :v201109
|
|
39
39
|
DEFAULT_ENVIRONMENT = :PRODUCTION
|
|
40
|
-
LATEST_VERSION = :
|
|
40
|
+
LATEST_VERSION = :v201109
|
|
41
41
|
|
|
42
42
|
# Set other constants
|
|
43
43
|
API_NAME = 'AdwordsApi'
|
|
44
44
|
API_PATH = 'adwords_api'
|
|
45
|
-
CLIENT_LIB_VERSION = '0.4.
|
|
45
|
+
CLIENT_LIB_VERSION = '0.4.1'
|
|
46
46
|
DEFAULT_CONFIG_FILENAME = 'adwords_api.yml'
|
|
47
47
|
|
|
48
48
|
# Configure the services available to each version
|
|
49
49
|
@@service_config = {
|
|
50
|
-
:v13 => [:AccountService, :ReportService
|
|
50
|
+
:v13 => [:AccountService, :ReportService],
|
|
51
51
|
:v200909 => [:AdExtensionOverrideService, :AdGroupAdService,
|
|
52
52
|
:AdGroupCriterionService, :AdGroupService, :AdParamService,
|
|
53
53
|
:BulkMutateJobService, :CampaignAdExtensionService,
|
|
@@ -81,7 +81,19 @@ module AdwordsApi
|
|
|
81
81
|
:GeoLocationService, :InfoService, :MediaService,
|
|
82
82
|
:ReportDefinitionService, :ServicedAccountService,
|
|
83
83
|
:TargetingIdeaService, :TrafficEstimatorService,
|
|
84
|
-
:UserListService]
|
|
84
|
+
:UserListService],
|
|
85
|
+
:v201109 => [:AdExtensionOverrideService, :AdGroupAdService,
|
|
86
|
+
:AdGroupCriterionService, :AdGroupService, :AdParamService,
|
|
87
|
+
:AlertService, :BulkMutateJobService,
|
|
88
|
+
:BulkOpportunityService, :CampaignAdExtensionService,
|
|
89
|
+
:CampaignCriterionService, :CampaignService,
|
|
90
|
+
:CampaignTargetService, :ConversionTrackerService,
|
|
91
|
+
:CustomerSyncService, :DataService, :ExperimentService,
|
|
92
|
+
:GeoLocationService, :InfoService, :MediaService,
|
|
93
|
+
:ReportDefinitionService, :ServicedAccountService,
|
|
94
|
+
:TargetingIdeaService, :TrafficEstimatorService,
|
|
95
|
+
:UserListService, :ConstantDataService,
|
|
96
|
+
:LocationCriterionService, :MutateJobService]
|
|
85
97
|
}
|
|
86
98
|
|
|
87
99
|
# Configure the different environments, with the base URL for each one
|
|
@@ -92,7 +104,8 @@ module AdwordsApi
|
|
|
92
104
|
:v200909 => 'https://adwords.google.com/api/adwords/',
|
|
93
105
|
:v201003 => 'https://adwords.google.com/api/adwords/',
|
|
94
106
|
:v201008 => 'https://adwords.google.com/api/adwords/',
|
|
95
|
-
:v201101 => 'https://adwords.google.com/api/adwords/'
|
|
107
|
+
:v201101 => 'https://adwords.google.com/api/adwords/',
|
|
108
|
+
:v201109 => 'https://adwords.google.com/api/adwords/'
|
|
96
109
|
},
|
|
97
110
|
:SANDBOX => {
|
|
98
111
|
:oauth_scope => 'https://adwords-sandbox.google.com/api/adwords/',
|
|
@@ -100,7 +113,8 @@ module AdwordsApi
|
|
|
100
113
|
:v200909 => 'https://adwords-sandbox.google.com/api/adwords/',
|
|
101
114
|
:v201003 => 'https://adwords-sandbox.google.com/api/adwords/',
|
|
102
115
|
:v201008 => 'https://adwords-sandbox.google.com/api/adwords/',
|
|
103
|
-
:v201101 => 'https://adwords-sandbox.google.com/api/adwords/'
|
|
116
|
+
:v201101 => 'https://adwords-sandbox.google.com/api/adwords/',
|
|
117
|
+
:v201109 => 'https://adwords-sandbox.google.com/api/adwords/'
|
|
104
118
|
}
|
|
105
119
|
}
|
|
106
120
|
|
|
@@ -110,7 +124,6 @@ module AdwordsApi
|
|
|
110
124
|
# v13
|
|
111
125
|
[:v13, :AccountService] => '',
|
|
112
126
|
[:v13, :ReportService] => '',
|
|
113
|
-
[:v13, :TrafficEstimatorService] => '',
|
|
114
127
|
# v200909
|
|
115
128
|
[:v200909, :AdExtensionOverrideService] => 'cm/',
|
|
116
129
|
[:v200909, :AdGroupAdService] => 'cm/',
|
|
@@ -189,7 +202,35 @@ module AdwordsApi
|
|
|
189
202
|
[:v201101, :ServicedAccountService] => 'mcm/',
|
|
190
203
|
[:v201101, :TargetingIdeaService] => 'o/',
|
|
191
204
|
[:v201101, :TrafficEstimatorService] => 'o/',
|
|
192
|
-
[:v201101, :UserListService] => 'cm/'
|
|
205
|
+
[:v201101, :UserListService] => 'cm/',
|
|
206
|
+
# v201109
|
|
207
|
+
[:v201109, :AdExtensionOverrideService] => 'cm/',
|
|
208
|
+
[:v201109, :AdGroupAdService] => 'cm/',
|
|
209
|
+
[:v201109, :AdGroupCriterionService] => 'cm/',
|
|
210
|
+
[:v201109, :AdGroupService] => 'cm/',
|
|
211
|
+
[:v201109, :AdParamService] => 'cm/',
|
|
212
|
+
[:v201109, :AlertService] => 'mcm/',
|
|
213
|
+
[:v201109, :BulkMutateJobService] => 'job/',
|
|
214
|
+
[:v201109, :BulkOpportunityService] => 'o/',
|
|
215
|
+
[:v201109, :CampaignAdExtensionService] => 'cm/',
|
|
216
|
+
[:v201109, :CampaignCriterionService] => 'cm/',
|
|
217
|
+
[:v201109, :CampaignService] => 'cm/',
|
|
218
|
+
[:v201109, :CampaignTargetService] => 'cm/',
|
|
219
|
+
[:v201109, :ConversionTrackerService] => 'cm/',
|
|
220
|
+
[:v201109, :CustomerSyncService] => 'ch/',
|
|
221
|
+
[:v201109, :DataService] => 'cm/',
|
|
222
|
+
[:v201109, :ExperimentService] => 'cm/',
|
|
223
|
+
[:v201109, :GeoLocationService] => 'cm/',
|
|
224
|
+
[:v201109, :InfoService] => 'info/',
|
|
225
|
+
[:v201109, :MediaService] => 'cm/',
|
|
226
|
+
[:v201109, :ReportDefinitionService] => 'cm/',
|
|
227
|
+
[:v201109, :ServicedAccountService] => 'mcm/',
|
|
228
|
+
[:v201109, :TargetingIdeaService] => 'o/',
|
|
229
|
+
[:v201109, :TrafficEstimatorService] => 'o/',
|
|
230
|
+
[:v201109, :UserListService] => 'cm/',
|
|
231
|
+
[:v201109, :ConstantDataService] => 'cm/',
|
|
232
|
+
[:v201109, :LocationCriterionService] => 'cm/',
|
|
233
|
+
[:v201109, :MutateJobService] => 'cm/'
|
|
193
234
|
}
|
|
194
235
|
|
|
195
236
|
# Configure the auth servers to use for each environment
|
|
@@ -278,17 +319,32 @@ module AdwordsApi
|
|
|
278
319
|
#
|
|
279
320
|
# Args:
|
|
280
321
|
# - environment: the service environment to be used (as a string)
|
|
281
|
-
# - version: the API version (as
|
|
322
|
+
# - version: the API version (as a symbol)
|
|
282
323
|
#
|
|
283
324
|
# Returns:
|
|
284
|
-
# The endpoint URL (as a string)
|
|
325
|
+
# - The endpoint URL (as a string)
|
|
285
326
|
#
|
|
286
327
|
def self.report_download_url(environment, version)
|
|
328
|
+
base = get_wsdl_base(environment, version)
|
|
329
|
+
if base and service_config[version].include?(:ReportDefinitionService)
|
|
330
|
+
base += 'reportdownload'
|
|
331
|
+
end
|
|
332
|
+
return base
|
|
333
|
+
end
|
|
334
|
+
|
|
335
|
+
# Get the download URL for Ad Hoc reports.
|
|
336
|
+
#
|
|
337
|
+
# Args:
|
|
338
|
+
# - environment: the service environment to be used (as a string)
|
|
339
|
+
# - version: the API version (as a symbol)
|
|
340
|
+
#
|
|
341
|
+
# Returns:
|
|
342
|
+
# - The endpoint URL (as a string)
|
|
343
|
+
#
|
|
344
|
+
def self.adhoc_report_download_url(environment, version)
|
|
287
345
|
base = get_wsdl_base(environment, version)
|
|
288
346
|
if base
|
|
289
|
-
|
|
290
|
-
'reportdownload' : nil
|
|
291
|
-
base += path.to_s
|
|
347
|
+
base += 'reportdownload/%s' % version.to_s
|
|
292
348
|
end
|
|
293
349
|
return base
|
|
294
350
|
end
|
|
@@ -42,9 +42,8 @@ module AdwordsApi
|
|
|
42
42
|
# Create the list of credentials to be used by the auth handler for header
|
|
43
43
|
# generation.
|
|
44
44
|
def credentials(version = nil)
|
|
45
|
-
validate_headers_for_server
|
|
46
|
-
|
|
47
|
-
result = case method
|
|
45
|
+
validate_headers_for_server(version)
|
|
46
|
+
result = case @credentials[:method]
|
|
48
47
|
when :CLIENTLOGIN
|
|
49
48
|
{:email => @credentials[:email],
|
|
50
49
|
:password => @credentials[:password]}
|
|
@@ -55,19 +54,20 @@ module AdwordsApi
|
|
|
55
54
|
:oauth_token => @credentials[:oauth_token],
|
|
56
55
|
:oauth_token_secret => @credentials[:oauth_token_secret],
|
|
57
56
|
:oauth_callback => @credentials[:oauth_callback],
|
|
58
|
-
:oauth_method => @credentials[:oauth_method]
|
|
57
|
+
:oauth_method => @credentials[:oauth_method],
|
|
58
|
+
:oauth_request_token => @credentials[:oauth_request_token]}
|
|
59
59
|
end
|
|
60
|
-
client_lib = 'Ruby
|
|
60
|
+
client_lib = 'AwApi-Ruby-%s|' % AdwordsApi::ApiConfig::CLIENT_LIB_VERSION
|
|
61
61
|
user_agent = @credentials[:user_agent] || $0
|
|
62
62
|
user_agent = client_lib + user_agent
|
|
63
63
|
user_agent_symbol = (version == :v13) ? :useragent : :userAgent
|
|
64
64
|
result[user_agent_symbol] = user_agent
|
|
65
65
|
result[:developerToken] = @credentials[:developer_token]
|
|
66
66
|
unless @use_mcc
|
|
67
|
-
if @credentials[:
|
|
68
|
-
result[:clientEmail] = @credentials[:client_email]
|
|
69
|
-
elsif @credentials[:client_customer_id]
|
|
67
|
+
if @credentials[:client_customer_id]
|
|
70
68
|
result[:clientCustomerId] = @credentials[:client_customer_id]
|
|
69
|
+
elsif @credentials[:client_email] and version != :v201109
|
|
70
|
+
result[:clientEmail] = @credentials[:client_email]
|
|
71
71
|
end
|
|
72
72
|
end
|
|
73
73
|
if version != :v13
|
|
@@ -82,15 +82,33 @@ module AdwordsApi
|
|
|
82
82
|
# Validates that the right credentials are being used for the chosen
|
|
83
83
|
# environment.
|
|
84
84
|
#
|
|
85
|
+
# Args:
|
|
86
|
+
# - version: API version to validate for
|
|
87
|
+
#
|
|
85
88
|
# Raises:
|
|
86
|
-
#
|
|
89
|
+
# - AdsCommon::Error::EnvironmentMismatchError if sandbox credentials are
|
|
87
90
|
# being used for production or vice-versa.
|
|
91
|
+
# - AdwordsApi::Errors:BadCredentialsError if supplied credentials are not
|
|
92
|
+
# valid.
|
|
88
93
|
#
|
|
89
|
-
def validate_headers_for_server
|
|
90
|
-
method = @credentials[:method].to_s.upcase.to_sym
|
|
94
|
+
def validate_headers_for_server(version)
|
|
91
95
|
token = @credentials[:developer_token]
|
|
92
96
|
client_email = @credentials[:client_email]
|
|
93
|
-
|
|
97
|
+
|
|
98
|
+
if client_email and version == :v201109
|
|
99
|
+
raise AdwordsApi::Errors::BadCredentialsError, 'Deprecated header ' +
|
|
100
|
+
'clientEmail is no longer supported, please use clientCustomerId'
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
client_customer_id = @credentials[:client_customer_id]
|
|
104
|
+
if client_customer_id and
|
|
105
|
+
!(client_customer_id.is_a?(Integer) or
|
|
106
|
+
(client_customer_id =~ /\d+-\d+-\d+/))
|
|
107
|
+
raise AdwordsApi::Errors::BadCredentialsError,
|
|
108
|
+
'Invalid client customer ID: %s' % client_customer_id.to_s
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
(sandbox_token, sandbox_client) = case @credentials[:method]
|
|
94
112
|
when :CLIENTLOGIN
|
|
95
113
|
email = @credentials[:email]
|
|
96
114
|
[(token =~ /#{Regexp.escape(email)}\+\+[a-zA-Z]{3}/),
|
|
@@ -113,7 +131,7 @@ module AdwordsApi
|
|
|
113
131
|
when :SANDBOX
|
|
114
132
|
# Check if either the token or client email do not follow the
|
|
115
133
|
# correct format. Client email may not exist, though.
|
|
116
|
-
if (!sandbox_token or (
|
|
134
|
+
if (!sandbox_token or (client_email and !sandbox_client))
|
|
117
135
|
raise AdsCommon::Errors::EnvironmentMismatchError,
|
|
118
136
|
'Attempting to connect to the sandbox with malformatted ' +
|
|
119
137
|
'credentials. Please check ' +
|
|
@@ -121,6 +139,7 @@ module AdwordsApi
|
|
|
121
139
|
'adwords_api_sandbox.html#requestheaders for details.'
|
|
122
140
|
end
|
|
123
141
|
end
|
|
142
|
+
return nil
|
|
124
143
|
end
|
|
125
144
|
end
|
|
126
145
|
end
|
data/lib/adwords_api/errors.rb
CHANGED
|
@@ -55,5 +55,17 @@ module AdwordsApi
|
|
|
55
55
|
return @array_fields.include?(field.to_s)
|
|
56
56
|
end
|
|
57
57
|
end
|
|
58
|
+
|
|
59
|
+
# Error for invalid credentials sush as malformed ID.
|
|
60
|
+
class BadCredentialsError < AdsCommon::Errors::ApiException
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# Error for malformed report definition.
|
|
64
|
+
class InvalidReportDefinitionError < AdsCommon::Errors::ApiException
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
# Error for server-side report error.
|
|
68
|
+
class ReportError < AdsCommon::Errors::ApiException
|
|
69
|
+
end
|
|
58
70
|
end
|
|
59
71
|
end
|
|
@@ -37,8 +37,9 @@ module AdwordsApi
|
|
|
37
37
|
[:v201008, :ReportDefinitionService] => [:download_report,
|
|
38
38
|
:download_report_as_file],
|
|
39
39
|
[:v201101, :ReportDefinitionService] => [:download_report,
|
|
40
|
-
:download_report_as_file,
|
|
41
|
-
|
|
40
|
+
:download_report_as_file],
|
|
41
|
+
[:v201109, :ReportDefinitionService] => [:download_report,
|
|
42
|
+
:download_report_as_file]
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
# Defines the parameter list for every extension method.
|
|
@@ -46,10 +47,7 @@ module AdwordsApi
|
|
|
46
47
|
:download_xml_report => [:job_id],
|
|
47
48
|
:download_csv_report => [:job_id],
|
|
48
49
|
:download_report => [:report_definition_id],
|
|
49
|
-
:download_report_as_file => [:report_definition_id, :path]
|
|
50
|
-
:download_mcc_report => [:report_definition_id, :query_token],
|
|
51
|
-
:download_mcc_report_as_file =>
|
|
52
|
-
[:report_definition_id, :query_token, :path]
|
|
50
|
+
:download_report_as_file => [:report_definition_id, :path]
|
|
53
51
|
}
|
|
54
52
|
|
|
55
53
|
# Return list of all extension methods, indexed by version and service.
|
|
@@ -209,78 +207,8 @@ module AdwordsApi
|
|
|
209
207
|
return report_response.body
|
|
210
208
|
end
|
|
211
209
|
|
|
212
|
-
# <i>Extension method</i> -- Download and return a MCC report.
|
|
213
|
-
#
|
|
214
|
-
# *Warning*: this method is blocking for the calling thread.
|
|
215
|
-
#
|
|
216
|
-
# Args:
|
|
217
|
-
# - wrapper: the service wrapper object for any API methods that need to be
|
|
218
|
-
# called
|
|
219
|
-
# - report_definition_id: the id for the report definition
|
|
220
|
-
# - query_token: id from previous calls to the method
|
|
221
|
-
#
|
|
222
|
-
# Returns:
|
|
223
|
-
# A hash with HTTP code and report service response
|
|
224
|
-
#
|
|
225
|
-
def self.download_mcc_report(wrapper, args)
|
|
226
|
-
(report_definition_id, query_token) = args
|
|
227
|
-
do_download_mcc_report(wrapper, report_definition_id, query_token, nil)
|
|
228
|
-
end
|
|
229
|
-
|
|
230
|
-
# <i>Extension method</i> -- Download and save a MCC report to file.
|
|
231
|
-
#
|
|
232
|
-
# *Warning*: this method is blocking for the calling thread.
|
|
233
|
-
#
|
|
234
|
-
# Args:
|
|
235
|
-
# - wrapper: the service wrapper object for any API methods that need to be
|
|
236
|
-
# called
|
|
237
|
-
# - report_definition_id: the id for the report definition
|
|
238
|
-
# - query_token: id from previous calls to the method
|
|
239
|
-
# - path: filename to save downloaded report to
|
|
240
|
-
#
|
|
241
|
-
# Returns:
|
|
242
|
-
# A hash with HTTP code and report service response
|
|
243
|
-
#
|
|
244
|
-
def self.download_mcc_report_as_file(wrapper, args)
|
|
245
|
-
(report_definition_id, query_token, path) = args
|
|
246
|
-
do_download_mcc_report(wrapper, report_definition_id, query_token, path)
|
|
247
|
-
end
|
|
248
|
-
|
|
249
210
|
private
|
|
250
211
|
|
|
251
|
-
# Polls the service once and downloads report into a file or to a hash.
|
|
252
|
-
def self.do_download_mcc_report(wrapper, report_definition_id, query_token,
|
|
253
|
-
path = nil)
|
|
254
|
-
query_token = 'new' if query_token.nil? or query_token.empty?
|
|
255
|
-
url = get_report_url(wrapper,
|
|
256
|
-
"?__rd=%s&qt=%s" % [report_definition_id, query_token])
|
|
257
|
-
report_response = get_report_response(wrapper, url)
|
|
258
|
-
check_old_error(report_response.body)
|
|
259
|
-
mcc_response = report_response_to_hash(report_response)
|
|
260
|
-
result = case report_response.code
|
|
261
|
-
when 200, 500
|
|
262
|
-
mcc_response
|
|
263
|
-
when 301
|
|
264
|
-
return_or_save_mcc_report_data(wrapper, mcc_response, path)
|
|
265
|
-
else
|
|
266
|
-
raise AdwordsApi::Errors::ApiException,
|
|
267
|
-
"Unknown HTTP error code %d message: %s" %
|
|
268
|
-
[report_response.code, report_response.body]
|
|
269
|
-
end
|
|
270
|
-
return result
|
|
271
|
-
end
|
|
272
|
-
|
|
273
|
-
# Downloads a report body into a hash or a file.
|
|
274
|
-
def self.return_or_save_mcc_report_data(wrapper, mcc_response, path = nil)
|
|
275
|
-
report_data = get_report_response(wrapper, mcc_response[:location]).body
|
|
276
|
-
if path.nil?
|
|
277
|
-
mcc_response[:report_data] = report_data
|
|
278
|
-
else
|
|
279
|
-
save_to_file(report_data, path)
|
|
280
|
-
end
|
|
281
|
-
return mcc_response
|
|
282
|
-
end
|
|
283
|
-
|
|
284
212
|
# Saves raw data to a file.
|
|
285
213
|
def self.save_to_file(data, path)
|
|
286
214
|
open(path, 'wb') { |file| file.puts(data) } if path
|
|
@@ -307,55 +235,17 @@ module AdwordsApi
|
|
|
307
235
|
auth_handler = wrapper.api.client_login_handler
|
|
308
236
|
headers['Authorization'] = "GoogleLogin auth=%s" %
|
|
309
237
|
auth_handler.headers(credentials)[:authToken]
|
|
310
|
-
if credentials[:
|
|
311
|
-
headers['clientEmail'] = credentials[:clientEmail]
|
|
312
|
-
elsif credentials[:clientCustomerId]
|
|
238
|
+
if credentials[:clientCustomerId]
|
|
313
239
|
headers['clientCustomerId'] = credentials[:clientCustomerId]
|
|
240
|
+
elsif credentials[:clientEmail]
|
|
241
|
+
headers['clientEmail'] = credentials[:clientEmail]
|
|
314
242
|
elsif credentials[:email]
|
|
315
243
|
headers['clientEmail'] = credentials[:email]
|
|
316
244
|
end
|
|
317
245
|
return headers
|
|
318
246
|
end
|
|
319
247
|
|
|
320
|
-
#
|
|
321
|
-
def self.report_response_to_hash(response)
|
|
322
|
-
result = {}
|
|
323
|
-
result[:code] = response.code
|
|
324
|
-
xml = REXML::Document.new(response.body)
|
|
325
|
-
result[:body] = xml_to_hash(xml.root) if xml and xml.root
|
|
326
|
-
if !response.headers.nil? and !response.headers['Location'].nil?
|
|
327
|
-
result[:location] = response.headers['Location']
|
|
328
|
-
end
|
|
329
|
-
# Special case for accounts list in failures.
|
|
330
|
-
if result[:body] and result[:body][:failures]
|
|
331
|
-
result[:body][:failures][:account] =
|
|
332
|
-
arrayize(result[:body][:failures][:account])
|
|
333
|
-
end
|
|
334
|
-
return result
|
|
335
|
-
end
|
|
336
|
-
|
|
337
|
-
# Converts xml into a convenient hash.
|
|
338
|
-
def self.xml_to_hash(xml)
|
|
339
|
-
result = {}
|
|
340
|
-
xml.elements.each do |item|
|
|
341
|
-
value = (item.has_elements?) ? xml_to_hash(item) : item.get_text()
|
|
342
|
-
if result[item.name].nil?
|
|
343
|
-
result[item.name] = value
|
|
344
|
-
else
|
|
345
|
-
result[item.name] = arrayize(result[item.name])
|
|
346
|
-
result[item.name] << value
|
|
347
|
-
end
|
|
348
|
-
end
|
|
349
|
-
return result
|
|
350
|
-
end
|
|
351
|
-
|
|
352
|
-
# Makes sure object is an array.
|
|
353
|
-
def self.arrayize(object)
|
|
354
|
-
return [] if object.nil?
|
|
355
|
-
return object.is_a?(Array) ? object : [object]
|
|
356
|
-
end
|
|
357
|
-
|
|
358
|
-
# Checks for old-style pre-MCC reporting error.
|
|
248
|
+
# Checks for old-style v13 reporting error.
|
|
359
249
|
def self.check_old_error(response_text)
|
|
360
250
|
error_message_regex = '^!!!(-?\d+)\|\|\|(-?\d+)\|\|\|(.*)\?\?\?'
|
|
361
251
|
matches = response_text.match(error_message_regex)
|