adops_report_scrapper 0.1.36 → 0.1.37
Sign up to get free protection for your applications and to get access to all the features.
- 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
|