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
         |