bing-ads-reporting 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 773fcc14aa93c2faee97f6fa3317f7dbed4667b9
4
+ data.tar.gz: 9fda00618b7236eb8a040af7880fe42166d01b69
5
+ SHA512:
6
+ metadata.gz: 3be8fa42af95e5e50e69a653b4cff4970099ab373b6405f4810bfcfedeeacb7d49ec67b12e4f0f95a95f271a923fd554a0da885b6579f01dd805e68722035653
7
+ data.tar.gz: 4378bc1fe318e37ed619851ecbcf63d357e539c1ac711ee12b61bd007990efa9888a36ebb179efd1f78b1d922dbd8e61ce8a05b9786149f9d40704f424ebd09a
@@ -0,0 +1,5 @@
1
+ require_relative 'bing-ads-reporting/service'
2
+ require_relative 'bing-ads-reporting/version'
3
+
4
+ module BingAdsReporting
5
+ end
@@ -0,0 +1,110 @@
1
+ module BingAdsReporting
2
+ class Service
3
+
4
+ def initialize(settings)
5
+ @settings = settings
6
+ end
7
+
8
+ def generate_report(report_settings, report_params)
9
+ options = default_options(report_settings).merge(report_params)
10
+ period = options[:period]
11
+ report_type = options[:report_type]
12
+
13
+ response = client.call(:submit_generate_report, message: {
14
+ ns('ReportRequest') => {
15
+ ns("Format") => options[:format],
16
+ ns("Language") => "English",
17
+ ns("ReportName") => options[:report_name],
18
+ ns("ReturnOnlyCompleteData") => false,
19
+ ns("Aggregation") => options[:aggregation],
20
+ ns("Columns") => {
21
+ ns("#{report_type}ReportColumn") => options[:columns]
22
+ },
23
+ ns("Scope") => {
24
+ ns("AccountIds") => {
25
+ 'arr:long' => @settings[:accountId]
26
+ }
27
+ },
28
+ ns("Time") => {
29
+ # apparently order is important, and end date has to be before start date, wtf
30
+ ns("CustomDateRangeEnd") => {
31
+ ns("Day") => period.to.day,
32
+ ns("Month") => period.to.month,
33
+ ns("Year") => period.to.year
34
+ },
35
+ ns("CustomDateRangeStart") => {
36
+ ns("Day") => period.from.day,
37
+ ns("Month") => period.from.month,
38
+ ns("Year") => period.from.year
39
+ }
40
+ # ns("PredefinedTime") => options[:time]
41
+ }
42
+ },
43
+ :attributes! => {ns("ReportRequest") => {"xmlns:i" => "http://www.w3.org/2001/XMLSchema-instance",
44
+ "i:type" => ns("#{report_type}ReportRequest")}
45
+ }
46
+ })
47
+
48
+ response.body[:submit_generate_report_response][:report_request_id]
49
+ end
50
+
51
+ def report_ready?(id)
52
+ status = poll_report(id).body[:poll_generate_report_response][:report_request_status][:status] rescue nil
53
+ status == "Success"
54
+ end
55
+
56
+ def report_url(id)
57
+ download_url = poll_report(id).body[:poll_generate_report_response][:report_request_status][:report_download_url] rescue nil
58
+ end
59
+
60
+ def report_body(id)
61
+ download(report_url(id))
62
+ end
63
+
64
+ private
65
+
66
+ def default_options(report_settings)
67
+ { format: report_settings[:report_format],
68
+ columns: report_settings[:columns],
69
+ aggregation: report_settings[:aggregation],
70
+ report_type: report_settings[:report_type],
71
+ report_name: "MyReport" }
72
+ end
73
+
74
+ def poll_report(id)
75
+ client.call(:poll_generate_report, message: {
76
+ ns("ReportRequestId") => id,
77
+ :attributes! => { ns("ReportRequestId") => {"xsi:nil" => false} }
78
+ })
79
+ end
80
+
81
+ def download(url)
82
+ puts %Q{Downloading Bing report from: #{url}}
83
+ curl = Curl::Easy.new(url) do |c|
84
+ c.use_ssl = 3
85
+ c.ssl_version = 3
86
+ end
87
+ curl.perform
88
+ curl.body_str
89
+ end
90
+
91
+ def client
92
+ Savon.client({wsdl: "https://adcenterapi.microsoft.com/Api/Advertiser/v8/Reporting/ReportingService.svc?wsdl",
93
+ log_level: :info,
94
+ namespaces: {"xmlns:arr" => 'http://schemas.microsoft.com/2003/10/Serialization/Arrays'},
95
+ soap_header: {ns('ApplicationToken') => @settings[:applicationToken],
96
+ ns('CustomerAccountId') => @settings[:accountId],
97
+ ns('CustomerId') => @settings[:customerId],
98
+ ns('DeveloperToken') => @settings[:developerToken],
99
+ ns('UserName') => @settings[:username],
100
+ ns('Password') => @settings[:password] }
101
+ })
102
+ # .merge({pretty_print_xml: true, log_level: :debug}) # for more logging
103
+ end
104
+
105
+ def ns(str)
106
+ "tns:#{str}"
107
+ end
108
+
109
+ end
110
+ end
@@ -0,0 +1,3 @@
1
+ module BingAdsReporting
2
+ VERSION = "0.0.1"
3
+ end
metadata ADDED
@@ -0,0 +1,89 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: bing-ads-reporting
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Robert Borkowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-10-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: datebox
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - '>='
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - '>='
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: savon
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '>='
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: curb
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ description: Bing Ads Reports
56
+ email:
57
+ - robert.borkowski@forward3d.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/bing-ads-reporting.rb
63
+ - lib/bing-ads-reporting/service.rb
64
+ - lib/bing-ads-reporting/version.rb
65
+ homepage: https://github.com/forward3d/bing-ads-reporting
66
+ licenses:
67
+ - MIT
68
+ metadata: {}
69
+ post_install_message:
70
+ rdoc_options: []
71
+ require_paths:
72
+ - lib
73
+ required_ruby_version: !ruby/object:Gem::Requirement
74
+ requirements:
75
+ - - '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ required_rubygems_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ requirements: []
84
+ rubyforge_project:
85
+ rubygems_version: 2.0.5
86
+ signing_key:
87
+ specification_version: 4
88
+ summary: Allows easily pull reports from Bing Ads
89
+ test_files: []