adops_report_scrapper 0.1.36 → 0.1.37
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG +3 -0
- data/Rakefile +10 -0
- data/lib/adops_report_scrapper.rb +2 -0
- data/lib/adops_report_scrapper/rubicon_client.rb +43 -0
- data/lib/adops_report_scrapper/undertone_client.rb +85 -0
- data/lib/adops_report_scrapper/version.rb +1 -1
- data/secret.sample.yml +8 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4a308286c8be74d32479abae098b6a0c56fe5822
|
4
|
+
data.tar.gz: b25af761e68edcbeba8f59f044213159595e945e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1e3c40e38be7112945dff112f356b382ff73135b103751a27dc9a39994b3c31d8af5ebbed2453eeabdc73cb5cda1d43a2d94f53de286cb79e68d865d514b88c5
|
7
|
+
data.tar.gz: c739c40809f150ba8a02ef5d17448e0205ecc4b708d64581fc36ad2e3d5f6b2f96fb644dcf1f329829900e4b53734768afe18a4a301cba35ac1dd496086cf09d
|
data/CHANGELOG
CHANGED
data/Rakefile
CHANGED
@@ -151,6 +151,16 @@ task :littlethings do
|
|
151
151
|
save_as_csv :littlethings, :littlethings
|
152
152
|
end
|
153
153
|
|
154
|
+
desc 'Collect rubicon data'
|
155
|
+
task :rubicon do
|
156
|
+
save_as_csv :rubicon, :rubicon
|
157
|
+
end
|
158
|
+
|
159
|
+
desc 'Collect undertone data'
|
160
|
+
task :undertone do
|
161
|
+
save_as_csv :undertone, :undertone
|
162
|
+
end
|
163
|
+
|
154
164
|
def date
|
155
165
|
@date ||= ENV['date'].nil? ? Date.today - 1 : Date.today - ENV['date'].to_i
|
156
166
|
end
|
@@ -41,3 +41,5 @@ require 'adops_report_scrapper/zedo_client'
|
|
41
41
|
require 'adops_report_scrapper/adtomation_client'
|
42
42
|
require 'adops_report_scrapper/rhythmone_client'
|
43
43
|
require 'adops_report_scrapper/littlethings_client'
|
44
|
+
require 'adops_report_scrapper/rubicon_client'
|
45
|
+
require 'adops_report_scrapper/undertone_client'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'date'
|
2
|
+
require_relative 'base_client'
|
3
|
+
require 'rest-client'
|
4
|
+
|
5
|
+
class AdopsReportScrapper::RubiconClient < AdopsReportScrapper::BaseClient
|
6
|
+
def date_supported?(date = nil)
|
7
|
+
_date = date || @date
|
8
|
+
return true if _date < Date.today
|
9
|
+
false
|
10
|
+
end
|
11
|
+
|
12
|
+
def init_client
|
13
|
+
fail 'please specify rubicon account id' unless @options['account_id']
|
14
|
+
@account_id = @options['account_id']
|
15
|
+
end
|
16
|
+
|
17
|
+
def before_quit_with_error
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def scrap
|
23
|
+
tz = date.to_time.dst? ? '-07:00' : '-08:00'
|
24
|
+
date_str = date.strftime '%F'
|
25
|
+
date_start_str = "#{date_str}T00:00:00#{tz}"
|
26
|
+
date_end_str = "#{date_str}T23:59:59#{tz}"
|
27
|
+
byebug
|
28
|
+
|
29
|
+
response = RestClient::Request.execute method: :get, url: 'https://api.rubiconproject.com/analytics/v1/report/', user: @login, password: @secret, account: "publisher/#{@account_id}", start: date_start_str, end: date_end_str, dimensions: ['date'], metrics: ['revenue']
|
30
|
+
|
31
|
+
date_str = @date.strftime('%-m/%-d/%Y')
|
32
|
+
time_zone_id = 'Eastern Standard Time'
|
33
|
+
|
34
|
+
response = RestClient.post "https://ui.adsupply.com/PublicPortal/Publisher/#{@login}/Report/Export", SqlCommandId: '', ExportToExcel: 'False', IsOLAP: 'False', DateFilter: date_str, TimeZoneId: time_zone_id, Grouping: '1', 'DimPublisher.Value': "#{@login}~", 'DimPublisher.IsActive': 'True', 'DimSiteName.Value': '', 'DimSiteName.IsActive': 'True', 'DimCountry.Value': '', 'DimCountry.IsActive': 'True', 'DimMediaType.Value': '', 'DimMediaType.IsActive': 'True', ApiKey: @secret
|
35
|
+
|
36
|
+
data = JSON.parse response
|
37
|
+
header = data[0].keys
|
38
|
+
@data = [header]
|
39
|
+
@data += data.map do |datum|
|
40
|
+
header.map { |key| datum[key] }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'date'
|
2
|
+
require_relative 'base_client'
|
3
|
+
|
4
|
+
class AdopsReportScrapper::UndertoneClient < AdopsReportScrapper::BaseClient
|
5
|
+
def date_supported?(date = nil)
|
6
|
+
_date = date || @date
|
7
|
+
return true if _date >= Date.today - 3
|
8
|
+
false
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def login
|
14
|
+
@client.visit 'https://insights.undertone.com/user/login'
|
15
|
+
@client.fill_in 'user_email', :with => @login
|
16
|
+
@client.fill_in 'user_password', :with => @secret
|
17
|
+
@client.click_button 'Sign In'
|
18
|
+
begin
|
19
|
+
@client.find :xpath, '//*[text()="Reporting"]'
|
20
|
+
rescue Exception => e
|
21
|
+
raise e, 'Undertone login error'
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def scrap
|
26
|
+
request_zone_report
|
27
|
+
extract_data_from_zone_report
|
28
|
+
request_po_report
|
29
|
+
extract_data_from_po_report
|
30
|
+
end
|
31
|
+
|
32
|
+
def request_zone_report
|
33
|
+
date_str = date.strftime('%m/%d/%Y')
|
34
|
+
@client.fill_in 'start', :with => date_str
|
35
|
+
@client.fill_in 'end', :with => date_str
|
36
|
+
sleep 2
|
37
|
+
@client.select 'Zone Report - Publishers', :from => 'report_id'
|
38
|
+
sleep 2
|
39
|
+
@client.click_button 'html'
|
40
|
+
sleep 10
|
41
|
+
end
|
42
|
+
|
43
|
+
def extract_data_from_zone_report
|
44
|
+
@client.within_window @client.driver.browser.window_handles.last do
|
45
|
+
@data = []
|
46
|
+
rows = @client.find_all :xpath, '//table/*/tr[not(contains(@class, "text"))]'
|
47
|
+
rows = rows.to_a
|
48
|
+
rows.pop
|
49
|
+
@data = rows.map { |tr| tr.find_css('td,th').map { |td| td.visible_text } }
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def request_po_report
|
54
|
+
date_str = date.strftime('%m/%d/%Y')
|
55
|
+
@client.fill_in 'start', :with => date_str
|
56
|
+
@client.fill_in 'end', :with => date_str
|
57
|
+
sleep 2
|
58
|
+
@client.select 'Purchase Order Summary', :from => 'report_id'
|
59
|
+
sleep 2
|
60
|
+
@client.click_button 'html'
|
61
|
+
sleep 10
|
62
|
+
end
|
63
|
+
|
64
|
+
def extract_data_from_po_report
|
65
|
+
@client.within_window @client.driver.browser.window_handles.last do
|
66
|
+
rows = @client.find_all :xpath, '//table/*/tr[not(contains(@class, "text"))]'
|
67
|
+
rows = rows.to_a
|
68
|
+
rows.pop
|
69
|
+
rows.pop
|
70
|
+
keys = rows.shift
|
71
|
+
keys = keys.find_css('td,th').map { |td| td.visible_text }
|
72
|
+
valuess = rows.map { |tr| tr.find_css('td,th').map { |td| td.visible_text } }
|
73
|
+
l_data = valuess.map { |values| Hash[keys.zip(values)] }
|
74
|
+
@data[0] << 'Revenue'
|
75
|
+
l_data.each do |l_datum|
|
76
|
+
@data.each_with_index do |datum, i|
|
77
|
+
next if i == 0
|
78
|
+
next unless datum[0].downcase.tr(' ','').include? "-#{l_datum['Ad Unit'].downcase.tr(' ','')}-"
|
79
|
+
@data[i] << datum[3].tr(',','').to_i * l_datum['Sales Price'].tr('USD','').to_f / 1000
|
80
|
+
break
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
data/secret.sample.yml
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: adops_report_scrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.37
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Stayman Hou
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-12-
|
11
|
+
date: 2016-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httpclient
|
@@ -241,10 +241,12 @@ files:
|
|
241
241
|
- lib/adops_report_scrapper/openx_client.rb
|
242
242
|
- lib/adops_report_scrapper/revcontent_client.rb
|
243
243
|
- lib/adops_report_scrapper/rhythmone_client.rb
|
244
|
+
- lib/adops_report_scrapper/rubicon_client.rb
|
244
245
|
- lib/adops_report_scrapper/sonobi_client.rb
|
245
246
|
- lib/adops_report_scrapper/springserve_client.rb
|
246
247
|
- lib/adops_report_scrapper/tremor_client.rb
|
247
248
|
- lib/adops_report_scrapper/triplelift_client.rb
|
249
|
+
- lib/adops_report_scrapper/undertone_client.rb
|
248
250
|
- lib/adops_report_scrapper/version.rb
|
249
251
|
- lib/adops_report_scrapper/zedo_client.rb
|
250
252
|
- secret.sample.yml
|