adtekio_adnetworks 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +24 -0
- data/README.md +333 -0
- data/Rakefile +56 -0
- data/VERSION +1 -0
- data/adtekio_adnetworks.gemspec +297 -0
- data/lib/adtekio_adnetworks.rb +6 -0
- data/lib/adtekio_adnetworks/api_key_scrapers.rb +59 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/adcolony.rb +20 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/applift.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/applovin.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/chartboost.rb +18 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/crossinstall.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/leadbolt.rb +18 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/loopme.rb +12 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/mdotm.rb +22 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/revmob.rb +22 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/tapjoy.rb +19 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/unilead.rb +13 -0
- data/lib/adtekio_adnetworks/api_key_scrapers/vungle.rb +23 -0
- data/lib/adtekio_adnetworks/importers.rb +58 -0
- data/lib/adtekio_adnetworks/importers/cost/adcolony.rb +43 -0
- data/lib/adtekio_adnetworks/importers/cost/adquant.rb +68 -0
- data/lib/adtekio_adnetworks/importers/cost/appia.rb +47 -0
- data/lib/adtekio_adnetworks/importers/cost/applifier.rb +64 -0
- data/lib/adtekio_adnetworks/importers/cost/applift.rb +41 -0
- data/lib/adtekio_adnetworks/importers/cost/applovin.rb +52 -0
- data/lib/adtekio_adnetworks/importers/cost/bidmotion.rb +82 -0
- data/lib/adtekio_adnetworks/importers/cost/chartboost.rb +40 -0
- data/lib/adtekio_adnetworks/importers/cost/crossinstall.rb +34 -0
- data/lib/adtekio_adnetworks/importers/cost/facebook.rb +39 -0
- data/lib/adtekio_adnetworks/importers/cost/fractionalmedia.rb +104 -0
- data/lib/adtekio_adnetworks/importers/cost/fyber.rb +54 -0
- data/lib/adtekio_adnetworks/importers/cost/gamegenetics.rb +44 -0
- data/lib/adtekio_adnetworks/importers/cost/glispa.rb +59 -0
- data/lib/adtekio_adnetworks/importers/cost/googleadwords.rb +99 -0
- data/lib/adtekio_adnetworks/importers/cost/jampp.rb +57 -0
- data/lib/adtekio_adnetworks/importers/cost/leadbolt.rb +43 -0
- data/lib/adtekio_adnetworks/importers/cost/lifestreet.rb +49 -0
- data/lib/adtekio_adnetworks/importers/cost/loopme.rb +63 -0
- data/lib/adtekio_adnetworks/importers/cost/matomy.rb +65 -0
- data/lib/adtekio_adnetworks/importers/cost/mdotm.rb +69 -0
- data/lib/adtekio_adnetworks/importers/cost/mmg.rb +67 -0
- data/lib/adtekio_adnetworks/importers/cost/mnectar.rb +45 -0
- data/lib/adtekio_adnetworks/importers/cost/moboqo.rb +33 -0
- data/lib/adtekio_adnetworks/importers/cost/mobpartner.rb +46 -0
- data/lib/adtekio_adnetworks/importers/cost/nanigans.rb +114 -0
- data/lib/adtekio_adnetworks/importers/cost/revmob.rb +44 -0
- data/lib/adtekio_adnetworks/importers/cost/rtbmob.rb +48 -0
- data/lib/adtekio_adnetworks/importers/cost/startapp.rb +47 -0
- data/lib/adtekio_adnetworks/importers/cost/supersonic.rb +77 -0
- data/lib/adtekio_adnetworks/importers/cost/tapjoy.rb +42 -0
- data/lib/adtekio_adnetworks/importers/cost/tokenads.rb +46 -0
- data/lib/adtekio_adnetworks/importers/cost/unilead.rb +39 -0
- data/lib/adtekio_adnetworks/importers/cost/vungle.rb +58 -0
- data/lib/adtekio_adnetworks/importers/cost_import.rb +13 -0
- data/lib/adtekio_adnetworks/importers/revenue/adcolony.rb +67 -0
- data/lib/adtekio_adnetworks/importers/revenue/applifier.rb +55 -0
- data/lib/adtekio_adnetworks/importers/revenue/applovin.rb +58 -0
- data/lib/adtekio_adnetworks/importers/revenue/chartboost.rb +43 -0
- data/lib/adtekio_adnetworks/importers/revenue/flurry.rb +85 -0
- data/lib/adtekio_adnetworks/importers/revenue/fyber.rb +61 -0
- data/lib/adtekio_adnetworks/importers/revenue/hypr_mx.rb +69 -0
- data/lib/adtekio_adnetworks/importers/revenue/lifestreet.rb +59 -0
- data/lib/adtekio_adnetworks/importers/revenue/mdotm.rb +38 -0
- data/lib/adtekio_adnetworks/importers/revenue/mopub.rb +54 -0
- data/lib/adtekio_adnetworks/importers/revenue/nexage.rb +71 -0
- data/lib/adtekio_adnetworks/importers/revenue/supersonic.rb +73 -0
- data/lib/adtekio_adnetworks/importers/revenue/tapsense.rb +38 -0
- data/lib/adtekio_adnetworks/importers/revenue/trialpay.rb +41 -0
- data/lib/adtekio_adnetworks/importers/revenue/vungle.rb +75 -0
- data/lib/adtekio_adnetworks/importers/revenue_import.rb +27 -0
- data/lib/adtekio_adnetworks/postbacks.rb +193 -0
- data/lib/adtekio_adnetworks/postbacks/aarki.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/adaction.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/adcash.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/adcolony.rb +90 -0
- data/lib/adtekio_adnetworks/postbacks/adgorithms.rb +74 -0
- data/lib/adtekio_adnetworks/postbacks/adjapon_nend.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/adknowledge.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/admob.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/adp.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/adperio.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/adquant.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/adstract.rb +15 -0
- data/lib/adtekio_adnetworks/postbacks/adxperience.rb +16 -0
- data/lib/adtekio_adnetworks/postbacks/airpush.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/app_chocolate.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appfload.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appia.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/appintheair.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/applifier.rb +49 -0
- data/lib/adtekio_adnetworks/postbacks/applift.rb +88 -0
- data/lib/adtekio_adnetworks/postbacks/applovin.rb +127 -0
- data/lib/adtekio_adnetworks/postbacks/appnext.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/appredeem.rb +33 -0
- data/lib/adtekio_adnetworks/postbacks/appsfire.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/appturbo.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/apsalar.rb +21 -0
- data/lib/adtekio_adnetworks/postbacks/bee7.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/bidmotion.rb +80 -0
- data/lib/adtekio_adnetworks/postbacks/blindferretmedia.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/chartboost.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/cheetah.rb +32 -0
- data/lib/adtekio_adnetworks/postbacks/clickky.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/covus.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/crossinstall.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_ameba.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_amoad.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_imobile.rb +43 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_kjnw.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_maio.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_nend.rb +40 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_smartc.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberagent_smartnews.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_asta.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_bead.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_imobile.rb +28 -0
- data/lib/adtekio_adnetworks/postbacks/cyberz_nend.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/datalead.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/eccrine.rb +80 -0
- data/lib/adtekio_adnetworks/postbacks/eeline.rb +50 -0
- data/lib/adtekio_adnetworks/postbacks/f5.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/fiksu.rb +43 -0
- data/lib/adtekio_adnetworks/postbacks/fiksu_applift.rb +31 -0
- data/lib/adtekio_adnetworks/postbacks/fractionalmedia.rb +78 -0
- data/lib/adtekio_adnetworks/postbacks/fyber.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/gamegenetics.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/ginga.rb +26 -0
- data/lib/adtekio_adnetworks/postbacks/glispa.rb +96 -0
- data/lib/adtekio_adnetworks/postbacks/googleadwords.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/growmobile.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/heyzap.rb +51 -0
- data/lib/adtekio_adnetworks/postbacks/inmobi.rb +50 -0
- data/lib/adtekio_adnetworks/postbacks/inneractive.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/instal.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/iqu.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/ironsource.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/jampp.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/jestadigital.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/jumpramp.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/jumptap.rb +23 -0
- data/lib/adtekio_adnetworks/postbacks/leadbolt.rb +29 -0
- data/lib/adtekio_adnetworks/postbacks/lifestreet.rb +97 -0
- data/lib/adtekio_adnetworks/postbacks/liftoff.rb +66 -0
- data/lib/adtekio_adnetworks/postbacks/loopme.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/magic_solver.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/marimedia.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/matomy.rb +59 -0
- data/lib/adtekio_adnetworks/postbacks/mdotm.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/misterbell.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/mmg.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/mnectar.rb +22 -0
- data/lib/adtekio_adnetworks/postbacks/moblin.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/moboqo.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/mobpartner.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/mopub.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/motive_interactive.rb +32 -0
- data/lib/adtekio_adnetworks/postbacks/mundo.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/nanigans.rb +38 -0
- data/lib/adtekio_adnetworks/postbacks/nativex.rb +30 -0
- data/lib/adtekio_adnetworks/postbacks/neodau.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/neverblue.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/operamedia.rb +39 -0
- data/lib/adtekio_adnetworks/postbacks/pandora.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/phunware.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/pirasin.rb +16 -0
- data/lib/adtekio_adnetworks/postbacks/playhaven.rb +31 -0
- data/lib/adtekio_adnetworks/postbacks/pocketmath.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/propeller.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/quixey.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/realzeit.rb +60 -0
- data/lib/adtekio_adnetworks/postbacks/remerge.rb +66 -0
- data/lib/adtekio_adnetworks/postbacks/revmob.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/ripple.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/roostr.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/rtbcom.rb +28 -0
- data/lib/adtekio_adnetworks/postbacks/septeni.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/seven_games.rb +51 -0
- data/lib/adtekio_adnetworks/postbacks/startapp.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/supersonic.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/tapjoy.rb +36 -0
- data/lib/adtekio_adnetworks/postbacks/taptica.rb +21 -0
- data/lib/adtekio_adnetworks/postbacks/targetcircle.rb +41 -0
- data/lib/adtekio_adnetworks/postbacks/todacell.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/tokenads.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/trademob.rb +48 -0
- data/lib/adtekio_adnetworks/postbacks/trademob_magic_solver.rb +22 -0
- data/lib/adtekio_adnetworks/postbacks/trialpay.rb +18 -0
- data/lib/adtekio_adnetworks/postbacks/unilead.rb +78 -0
- data/lib/adtekio_adnetworks/postbacks/uppsmobi.rb +19 -0
- data/lib/adtekio_adnetworks/postbacks/vungle.rb +33 -0
- data/lib/adtekio_adnetworks/postbacks/w4.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/webmedia.rb +17 -0
- data/lib/adtekio_adnetworks/postbacks/yahoo.rb +20 -0
- data/lib/adtekio_adnetworks/postbacks/youappi.rb +116 -0
- data/lib/adtekio_adnetworks/postbacks/zemail.rb +19 -0
- data/test/helper.rb +78 -0
- data/test/unit/postbacks/test_chartboost.rb +105 -0
- data/test/unit/postbacks/test_mdotm.rb +35 -0
- data/test/unit/postbacks/test_playhaven.rb +76 -0
- data/test/unit/postbacks/test_trademob_magic_solver.rb +24 -0
- data/test/unit/postbacks/test_unilead.rb +67 -0
- data/test/unit/test_api_key_scrapers.rb +302 -0
- data/test/unit/test_base_postback_class.rb +82 -0
- data/test/unit/test_cost_importers.rb +12 -0
- data/test/unit/test_postbacks.rb +33 -0
- data/test/unit/test_postbacks_definition.rb +111 -0
- data/test/unit/test_revenue_importers.rb +12 -0
- metadata +500 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8b21db42693f71b714df72dff25cf27036983929
|
4
|
+
data.tar.gz: 1e5ebb28a292fec9fa7c182deb5a58ac4b034080
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 33000247a08f914debf3d9bac0d5ee10e7e8e2da6e1c31b9469bba67fd21d8b3ab543a3913c88de2b4ab002c336434b80d791bbe7e5f5245ef68c28e25cd6f50
|
7
|
+
data.tar.gz: d4ef607151ed208ef8e004ab982b1676608c220cc67251d5e9ad9eaf07d6babf42e22f812be57d3bcd9432f9b5e1f73e0128b73353fd78ea59cfe0b91ad47cb9
|
data/.ruby-gemset
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
adtekioadnetworks
|
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.2.3
|
data/Gemfile
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# -*- mode: ruby -*-
|
2
|
+
source "http://rubygems.org"
|
3
|
+
|
4
|
+
gem 'net-http-persistent'
|
5
|
+
gem 'addressable'
|
6
|
+
gem 'rest-client'
|
7
|
+
gem 'oauth2'
|
8
|
+
gem 'mechanize'
|
9
|
+
gem 'google-adwords-api'
|
10
|
+
gem 'google-api-client'
|
11
|
+
gem 'curb'
|
12
|
+
gem 'uuidtools'
|
13
|
+
gem 'erubis'
|
14
|
+
|
15
|
+
gem 'activesupport'
|
16
|
+
|
17
|
+
group :development do
|
18
|
+
gem 'jeweler'
|
19
|
+
gem 'rake'
|
20
|
+
gem 'pry'
|
21
|
+
gem 'pry-doc'
|
22
|
+
gem 'shoulda'
|
23
|
+
gem 'rr'
|
24
|
+
end
|
data/README.md
ADDED
@@ -0,0 +1,333 @@
|
|
1
|
+
# Adtek.io Adnetworks
|
2
|
+
|
3
|
+
Dealing with Mobile Advertising Networks can be a non-trivial task, especially
|
4
|
+
when it comes to integrating them into reporting tools: each has their own
|
5
|
+
report APIs, each of which return their own report-data format.
|
6
|
+
|
7
|
+
On top of that, each has its own authentication methods, making it difficult
|
8
|
+
to obtain the right credentials for the right report. Where possible, this
|
9
|
+
gem provides scrapers for adnetworks to obtain API credentials in a transparent
|
10
|
+
and common manner.
|
11
|
+
|
12
|
+
## Raison d'être
|
13
|
+
|
14
|
+
Why this gem? The aim is to make mobile advertising and mobile user acquistion
|
15
|
+
more flexible and cost effective.
|
16
|
+
|
17
|
+
In a sense, this gem can help become your own mobile adnetwork aggregator
|
18
|
+
by allowing you to easily try out new adnetworks without having to integrate
|
19
|
+
their respective SDKs. The gem also provides the raw data for comparing the
|
20
|
+
performance of adnetworks and allowing you to make informed choices.
|
21
|
+
|
22
|
+
Of course, on its own, this gem does does not provide the complete picture.
|
23
|
+
What this gem does is provide the raw data in a unified manner so that other
|
24
|
+
tools can provide aggegration and comparisons across a number of
|
25
|
+
adnetworks. One such tool is [adtek.io][adtek] which provides the neccessary
|
26
|
+
infrastructure for flexibility and cost effectiveness for mobile
|
27
|
+
marketing and user acquistion.
|
28
|
+
|
29
|
+
On a technical level, this gem aggregates together all code related to
|
30
|
+
interfacing with the adnetworks. This includes importing their reporting
|
31
|
+
data, obtaining their [API][api] credentials (which are often confusing and
|
32
|
+
difficult to obtain) and providing networks with user tracking data so that
|
33
|
+
they can continue to optimise their campaigns.
|
34
|
+
|
35
|
+
## Features
|
36
|
+
|
37
|
+
This gem provides four main features when dealing with mobile advertising
|
38
|
+
networks (adnetworks):
|
39
|
+
|
40
|
+
1. [Spends importers][simp] which retrieve spending reports from
|
41
|
+
various networks.
|
42
|
+
|
43
|
+
2. [Revenue importers][rimp] which retrieve revenue reports from various
|
44
|
+
adnetworks.
|
45
|
+
|
46
|
+
3. [API Key Scrapers][apsc] aim to obtain the API credentials using the login
|
47
|
+
details of the adnetwork. That is to say, they automate the retrieval of
|
48
|
+
API credentials from adnetworks where possible.
|
49
|
+
|
50
|
+
So when an adnetwork says something like: ```To obtain your API key, first
|
51
|
+
login, then go to your profile page, then click API key ...``` etc, a
|
52
|
+
scraper will automagically do that to obtain the API credentials.
|
53
|
+
|
54
|
+
4. [Postbacks][pblnk] provide callback links for various adnetworks so
|
55
|
+
that user tracking does not come from the mobile application but
|
56
|
+
from a backend server. Making the need to integrate a adnetworks
|
57
|
+
[SDK][sdk] redundant.
|
58
|
+
|
59
|
+
## Integration
|
60
|
+
|
61
|
+
To include the gem in your project, add this to your favourite Gemfile:
|
62
|
+
|
63
|
+
```
|
64
|
+
gem 'adtekio_adnetworks', :github => "adtekio/adnetworks"
|
65
|
+
```
|
66
|
+
|
67
|
+
then run bundle and require the gem:
|
68
|
+
|
69
|
+
```
|
70
|
+
require 'adtekio_adnetworks'
|
71
|
+
```
|
72
|
+
|
73
|
+
## Usage
|
74
|
+
|
75
|
+
You can play around with the gem by cloning it and then running a
|
76
|
+
[pry][pry] shell:
|
77
|
+
|
78
|
+
```
|
79
|
+
git clone git@github.com:adtekio/adnetworks.git
|
80
|
+
cd adnetworks
|
81
|
+
bundle
|
82
|
+
rake shell
|
83
|
+
```
|
84
|
+
|
85
|
+
Ideally you are using either [rbenv][rbenv] or [rvm][rvm] to isolate your ruby
|
86
|
+
versions and gemsets.
|
87
|
+
|
88
|
+
### Spends Importers
|
89
|
+
|
90
|
+
*Note:* 'Spends Importer' and 'Cost Importer' are used interchangeably but
|
91
|
+
represent the same thing: the money spent on marketing and user acquistion.
|
92
|
+
|
93
|
+
Each cost importer is registered with the `AdtekioAdnetworks::CostImport`
|
94
|
+
class, from there you can get a complete list of supported adnetworks:
|
95
|
+
|
96
|
+
```
|
97
|
+
pry> AdtekioAdnetworks::CostImport.networks
|
98
|
+
=> {:adcolony=>AdtekioAdnetworks::Cost::Adcolony,
|
99
|
+
:adquant=>AdtekioAdnetworks::Cost::Adquant,
|
100
|
+
:appia=>AdtekioAdnetworks::Cost::Appia,
|
101
|
+
:applifier=>AdtekioAdnetworks::Cost::Applifier,
|
102
|
+
:applift=>AdtekioAdnetworks::Cost::Applift,
|
103
|
+
:applovin=>AdtekioAdnetworks::Cost::Applovin,
|
104
|
+
:bidmotion=>AdtekioAdnetworks::Cost::Bidmotion, ....
|
105
|
+
```
|
106
|
+
|
107
|
+
This returns a hash with network-name/importer-class pairs of all
|
108
|
+
supported cost importers.
|
109
|
+
|
110
|
+
Each importer requires credentials to obtain the costs, to find out
|
111
|
+
what is required, you use the `required_credentials` class method:
|
112
|
+
|
113
|
+
```
|
114
|
+
pry> importer_klass = AdtekioAdnetworks::CostImport.networks[:adcolony]
|
115
|
+
=> AdtekioAdnetworks::Cost::Adcolony
|
116
|
+
pry> importer_klass.required_credentials
|
117
|
+
=> [:api_key]
|
118
|
+
```
|
119
|
+
|
120
|
+
In this example, adcolony requires an api_key. This can either be obtained
|
121
|
+
directly from adcolony or using [the corresponding api_scraper][adcapsc].
|
122
|
+
|
123
|
+
So having obtained the `api_key`, we can now use it by assigning the
|
124
|
+
credentials (using a hash instance):
|
125
|
+
|
126
|
+
```
|
127
|
+
pry> importer = importer_klass.new
|
128
|
+
=> #<AdtekioAdnetworks::Cost::Adcolony:0x007f822a051730>
|
129
|
+
pry> importer.credentials = { :api_key => "xxx" }
|
130
|
+
=> {:api_key=>"xxx"}
|
131
|
+
```
|
132
|
+
|
133
|
+
After that, to obtain the costs/spends for the last five days:
|
134
|
+
|
135
|
+
```
|
136
|
+
pry> importer.campaign_costs(Date.today-5, Date.today)
|
137
|
+
=> [{:date=>..., :campaign=>"xx", :adgroup=>"xx", :impressions=>..., :clicks=>..., :conversions=>..., :amount=>..., :target_country=>"..."},
|
138
|
+
...etc
|
139
|
+
```
|
140
|
+
|
141
|
+
The result is always an array of hashes. Hash can be different from importer
|
142
|
+
to importer, however they always include the `amount`, `date`, `campaign`,
|
143
|
+
and `clicks`.
|
144
|
+
|
145
|
+
This interface applies to all cost importers, they have the same interface but
|
146
|
+
different credentials.
|
147
|
+
|
148
|
+
### Revenue Importers
|
149
|
+
|
150
|
+
Revenue importers retrieve data related to the revenue your mobile
|
151
|
+
application is making by showing advertising to your users. Basically
|
152
|
+
your revenue for an adnetwork is offsetting the cost for using that
|
153
|
+
adnetwork.
|
154
|
+
|
155
|
+
You might think that is wonderful, but you have to think about what
|
156
|
+
advertising they are showing your users. It might well be advertising for
|
157
|
+
your competition, so that you the revenue you are obtaining is actually
|
158
|
+
compensation for losing your users.
|
159
|
+
|
160
|
+
Using the revenue importers is very similar to using the cost importers,
|
161
|
+
first you get a list of supported adnetworks:
|
162
|
+
|
163
|
+
```
|
164
|
+
pry> AdtekioAdnetworks::RevenueImport.networks
|
165
|
+
=> {:adcolony=>AdtekioAdnetworks::Revenue::Adcolony,
|
166
|
+
:applifier=>AdtekioAdnetworks::Revenue::Applifier,
|
167
|
+
:applovin=>AdtekioAdnetworks::Revenue::Applovin,
|
168
|
+
:chartboost=>AdtekioAdnetworks::Revenue::Chartboost, ....
|
169
|
+
```
|
170
|
+
|
171
|
+
Then you choice one for which you would like to import the revenue data:
|
172
|
+
|
173
|
+
```
|
174
|
+
pry> importer_klass = AdtekioAdnetworks::RevenueImport.networks[:chartboost]
|
175
|
+
=> AdtekioAdnetworks::Revenue::Chartboost
|
176
|
+
pry> importer_klass.required_credentials
|
177
|
+
=> [:user_id, :signature]
|
178
|
+
```
|
179
|
+
|
180
|
+
So we see that we need a `user_id` and `signature` for Chartboost. Since
|
181
|
+
we only have our login details, we can use the API key scraper to obtain
|
182
|
+
the user_id and signature:
|
183
|
+
|
184
|
+
```
|
185
|
+
pry> login_details = { "username" => "xxx", "password" => "yyy" }
|
186
|
+
=> {"username"=>"xxx", "password"=>"yyy"}
|
187
|
+
pry> creds = AdtekioAdnetworks::ApiKeyScrapers.new.obtain_key_for("chartboost", login_details)
|
188
|
+
=> {"user_id"=>"zzz", "signature"=>"aaa"}
|
189
|
+
```
|
190
|
+
|
191
|
+
Now we can start the chartboost revenue importer for the last five days:
|
192
|
+
|
193
|
+
```
|
194
|
+
pry> importer = importer_klass.new
|
195
|
+
=> #<AdtekioAdnetworks::Revenue::Chartboost:0x007ff1039c3460>
|
196
|
+
pry> importer.credentials = creds
|
197
|
+
=> {"user_id"=>"zzz", "signature"=>"aaa"}
|
198
|
+
pry> importer.revenues(Date.today-5, Date.today)
|
199
|
+
=> [{:impressions=>...,
|
200
|
+
:amount=>...,
|
201
|
+
:date=>...,
|
202
|
+
:appname=>....,
|
203
|
+
:not_matched=>....},
|
204
|
+
```
|
205
|
+
|
206
|
+
What the revenue importer returns is an array of hashes containing amounts
|
207
|
+
and dates. Data is always aggregated by day.
|
208
|
+
|
209
|
+
For other adnetworks it is very similar, so just rinse and repeat for all
|
210
|
+
the adnetworks you have.
|
211
|
+
|
212
|
+
### API Key Scrapers
|
213
|
+
|
214
|
+
Providing a unified method of obtaining API credentials. Since most adnetworks
|
215
|
+
do not use login details for their APIs, a user always has to obtain an
|
216
|
+
their API credentials from the adnetworks.
|
217
|
+
|
218
|
+
Since this can be a confusing task (since most adnetworks squirrel their
|
219
|
+
API credentials away somewhere non-intuitive) but using an API scraper,
|
220
|
+
this becomes as easy as providing username & password and pressing a
|
221
|
+
button!
|
222
|
+
|
223
|
+
All [supported adnetworks][libscp] all have the same interface:
|
224
|
+
|
225
|
+
```
|
226
|
+
pry> scraper = AdtekioAdnetworks::ApiKeyScrapers.new
|
227
|
+
pry> login_details = {"username" => "username used to login", "password" => "password used to login" }
|
228
|
+
pry> credentials = scraper.obtain_key_for("applift",login_details))
|
229
|
+
```
|
230
|
+
|
231
|
+
The `login_details` is always a hash with "username" and "password" as key.
|
232
|
+
Username is whatever the adnetworks requires to login, i.e it could be
|
233
|
+
an email or a username or a banana, whatever is required by the adnetwork.
|
234
|
+
|
235
|
+
`obtain_key_for` always returns a hash but what it contains is adnetwork
|
236
|
+
specific. However, for those adnetworks that return one value (i.e. an api
|
237
|
+
key or token), the hash always is for the form `{ :token => 'api key value' }`.
|
238
|
+
|
239
|
+
To get a list of all supported networks:
|
240
|
+
|
241
|
+
```
|
242
|
+
pry> AdtekioAdnetworks::ApiKeyScrapers.supporter_adnetworks
|
243
|
+
=> ["adcolony", "applift", "applovin", "chartboost", "crossinstall", "leadbolt", "loopme", "mdotm", "revmob", "tapjoy", "unilead", "vungle"]
|
244
|
+
```
|
245
|
+
|
246
|
+
### Postbacks
|
247
|
+
|
248
|
+
Postback definitions need to be seen in the context of how mobile advertising
|
249
|
+
and user acquistion currently works. Postbacks are very specific and if the
|
250
|
+
context is not clear, then they make little or no sense!
|
251
|
+
|
252
|
+
Currently if you want to mobile advertising for your application, you need
|
253
|
+
to choose an adnetwork (e.g. adcolony, unilead, etc), sign a deal with them
|
254
|
+
and integrate their [SDK][sdk] into your application. Then you can start
|
255
|
+
your campaigns to obtain users.
|
256
|
+
|
257
|
+
If you then discover that their campaigns are not performing, you end up
|
258
|
+
repeating the cycle and integrating some other adnetworks SDK into your
|
259
|
+
application. In a certain sense, SDKs have become a [vendor lock-in][vnli]
|
260
|
+
for the mobile marketing sector.
|
261
|
+
|
262
|
+
Of course, there are already aggregators on the market (e.g. singular,
|
263
|
+
adjust, tenjin, etc) however there you have a similar issues except you
|
264
|
+
are relying on a group of adnetworks chosen by the aggregator. If campaigns
|
265
|
+
do not perform, you still need to look for something else.
|
266
|
+
|
267
|
+
Anyone who has developed an mobile application knows that integrating SDKs
|
268
|
+
is a non-trival task and, in the case of Apple, results in delays when
|
269
|
+
releasing an application.
|
270
|
+
|
271
|
+
So the question becomes how to avoid the overhead of integrating adnetwork
|
272
|
+
SDKs but still have the flexibility of trying out different adnetworks?
|
273
|
+
|
274
|
+
To answer this, we need to know what these SDKs actually do. Basically they
|
275
|
+
provide user-tracking data for adnetworks to optimise their campaigns
|
276
|
+
(and also allow them to build up user profiles since adnetworks collect a
|
277
|
+
lot of data from lots of mobile applications).
|
278
|
+
|
279
|
+
Most (all?) of the time this data, collected from your users, is not
|
280
|
+
provided to you. Instead, if you are doing [A/B tests][abtst] and trying
|
281
|
+
to optimise your application for your users, you will be doing your own
|
282
|
+
user-tracking.
|
283
|
+
|
284
|
+
So your application will end up doing duplicate user tracking, which does
|
285
|
+
seem to be a bit of a waste (even in the digital virtual world).
|
286
|
+
|
287
|
+
This is where postbacks come in, they are simply the same tracking calls
|
288
|
+
that an adnetwork would do except you can trigger them. So now,
|
289
|
+
putting it all together, the intention is that since you are doing your own
|
290
|
+
user tracking, you can pass these tracking calls onto the adnetworks from
|
291
|
+
your tracking server and not from your mobile application.
|
292
|
+
|
293
|
+
Everybody wins: no more duplicate tracking from your mobile application,
|
294
|
+
the adnetworks get their tracking calls (in addition, these can become
|
295
|
+
more application specific) and the adnetworks can continue to optimise
|
296
|
+
their campaigns for your application.
|
297
|
+
|
298
|
+
If, on the other hand, your are not doing your own user tracking, then
|
299
|
+
postbacks are no benefit to you whatsoever. However, you could start using
|
300
|
+
[adtek.io][adtek] which also provides tracking and a single SDK.
|
301
|
+
|
302
|
+
|
303
|
+
## License
|
304
|
+
|
305
|
+
Released under the GPLv2.
|
306
|
+
|
307
|
+
See https://www.gnu.org/licenses/gpl-2.0 for details.
|
308
|
+
|
309
|
+
## Contributing to Gem
|
310
|
+
|
311
|
+
1. Fork it ( https://github.com/adtekio/adnetworks/fork )
|
312
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
313
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
314
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
315
|
+
5. Make sure to add tests (`rake test`)
|
316
|
+
6. Please try not to mess with the Rakefile, version, or history
|
317
|
+
7. Create new Pull Request
|
318
|
+
|
319
|
+
<!-- references, link endpoints, no need to look any further -->
|
320
|
+
[abtst]: https://en.wikipedia.org/wiki/A/B_testing
|
321
|
+
[adtek]: https://www.adtek.io
|
322
|
+
[adcapsc]: /lib/adtekio_adnetworks/api_key_scrapers/adcolony.rb
|
323
|
+
[api]: https://en.wikipedia.org/wiki/Application_programming_interface
|
324
|
+
[apsc]: /lib/adtekio_adnetworks/api_key_scrapers
|
325
|
+
[libscp]: /lib/adtekio_adnetworks/api_key_scrapers
|
326
|
+
[pblnk]: /lib/adtekio_adnetworks/postbacks
|
327
|
+
[pry]: http://pryrepl.org/
|
328
|
+
[rbenv]: https://github.com/rbenv/rbenv
|
329
|
+
[rimp]: /lib/adtekio_adnetworks/importers/revenue
|
330
|
+
[rvm]: https://rvm.io/
|
331
|
+
[sdk]: https://en.wikipedia.org/wiki/Software_development_kit
|
332
|
+
[simp]: /lib/adtekio_adnetworks/importers/cost
|
333
|
+
[vnli]: https://en.wikipedia.org/wiki/Vendor_lock-in
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
require 'jeweler'
|
15
|
+
Jeweler::Tasks.new do |gem|
|
16
|
+
# gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
|
17
|
+
gem.name = "adtekio_adnetworks"
|
18
|
+
gem.homepage = "https://github.com/adtekio/adnetworks"
|
19
|
+
gem.license = "MIT"
|
20
|
+
gem.summary = %Q{Encapsulate mobile adnetworks support code.}
|
21
|
+
gem.description = %Q{Why this gem?
|
22
|
+
The aim is to make mobile advertising and mobile user acquistion
|
23
|
+
more flexible and cost effective.
|
24
|
+
|
25
|
+
In a sense, this gem can help become your own mobile adnetwork aggregator
|
26
|
+
by allowing you to easily try out new adnetworks without having to integrate
|
27
|
+
their respective SDKs. The gem also provides the raw data for comparing the
|
28
|
+
performance of adnetworks and allowing you to make informed choices.
|
29
|
+
}
|
30
|
+
gem.email = "gerrit.riessen@gmail.com"
|
31
|
+
gem.authors = ["Gerrit Riessen"]
|
32
|
+
# dependencies defined in Gemfile
|
33
|
+
end
|
34
|
+
Jeweler::RubygemsDotOrgTasks.new
|
35
|
+
|
36
|
+
require 'rake/testtask'
|
37
|
+
Rake::TestTask.new(:test) do |test|
|
38
|
+
test.libs << 'lib' << 'test'
|
39
|
+
test.pattern = 'test/**/test_*.rb'
|
40
|
+
test.verbose = true
|
41
|
+
test.warning = false
|
42
|
+
end
|
43
|
+
|
44
|
+
task :default => :test
|
45
|
+
|
46
|
+
task :environment do
|
47
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
48
|
+
require_relative 'lib/adtekio_adnetworks'
|
49
|
+
end
|
50
|
+
|
51
|
+
desc "Start a pry shell and load all gems"
|
52
|
+
task :shell => :environment do
|
53
|
+
require 'pry'
|
54
|
+
Pry.editor = "emacs"
|
55
|
+
Pry.start
|
56
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.0.4
|
@@ -0,0 +1,297 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: adtekio_adnetworks 0.0.4 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "adtekio_adnetworks"
|
9
|
+
s.version = "0.0.4"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
13
|
+
s.authors = ["Gerrit Riessen"]
|
14
|
+
s.date = "2016-09-09"
|
15
|
+
s.description = "Why this gem?\nThe aim is to make mobile advertising and mobile user acquistion\nmore flexible and cost effective.\n\nIn a sense, this gem can help become your own mobile adnetwork aggregator\nby allowing you to easily try out new adnetworks without having to integrate\ntheir respective SDKs. The gem also provides the raw data for comparing the\nperformance of adnetworks and allowing you to make informed choices.\n"
|
16
|
+
s.email = "gerrit.riessen@gmail.com"
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"README.md"
|
19
|
+
]
|
20
|
+
s.files = [
|
21
|
+
".ruby-gemset",
|
22
|
+
".ruby-version",
|
23
|
+
"Gemfile",
|
24
|
+
"README.md",
|
25
|
+
"Rakefile",
|
26
|
+
"VERSION",
|
27
|
+
"adtekio_adnetworks.gemspec",
|
28
|
+
"lib/adtekio_adnetworks.rb",
|
29
|
+
"lib/adtekio_adnetworks/api_key_scrapers.rb",
|
30
|
+
"lib/adtekio_adnetworks/api_key_scrapers/adcolony.rb",
|
31
|
+
"lib/adtekio_adnetworks/api_key_scrapers/applift.rb",
|
32
|
+
"lib/adtekio_adnetworks/api_key_scrapers/applovin.rb",
|
33
|
+
"lib/adtekio_adnetworks/api_key_scrapers/chartboost.rb",
|
34
|
+
"lib/adtekio_adnetworks/api_key_scrapers/crossinstall.rb",
|
35
|
+
"lib/adtekio_adnetworks/api_key_scrapers/leadbolt.rb",
|
36
|
+
"lib/adtekio_adnetworks/api_key_scrapers/loopme.rb",
|
37
|
+
"lib/adtekio_adnetworks/api_key_scrapers/mdotm.rb",
|
38
|
+
"lib/adtekio_adnetworks/api_key_scrapers/revmob.rb",
|
39
|
+
"lib/adtekio_adnetworks/api_key_scrapers/tapjoy.rb",
|
40
|
+
"lib/adtekio_adnetworks/api_key_scrapers/unilead.rb",
|
41
|
+
"lib/adtekio_adnetworks/api_key_scrapers/vungle.rb",
|
42
|
+
"lib/adtekio_adnetworks/importers.rb",
|
43
|
+
"lib/adtekio_adnetworks/importers/cost/adcolony.rb",
|
44
|
+
"lib/adtekio_adnetworks/importers/cost/adquant.rb",
|
45
|
+
"lib/adtekio_adnetworks/importers/cost/appia.rb",
|
46
|
+
"lib/adtekio_adnetworks/importers/cost/applifier.rb",
|
47
|
+
"lib/adtekio_adnetworks/importers/cost/applift.rb",
|
48
|
+
"lib/adtekio_adnetworks/importers/cost/applovin.rb",
|
49
|
+
"lib/adtekio_adnetworks/importers/cost/bidmotion.rb",
|
50
|
+
"lib/adtekio_adnetworks/importers/cost/chartboost.rb",
|
51
|
+
"lib/adtekio_adnetworks/importers/cost/crossinstall.rb",
|
52
|
+
"lib/adtekio_adnetworks/importers/cost/facebook.rb",
|
53
|
+
"lib/adtekio_adnetworks/importers/cost/fractionalmedia.rb",
|
54
|
+
"lib/adtekio_adnetworks/importers/cost/fyber.rb",
|
55
|
+
"lib/adtekio_adnetworks/importers/cost/gamegenetics.rb",
|
56
|
+
"lib/adtekio_adnetworks/importers/cost/glispa.rb",
|
57
|
+
"lib/adtekio_adnetworks/importers/cost/googleadwords.rb",
|
58
|
+
"lib/adtekio_adnetworks/importers/cost/jampp.rb",
|
59
|
+
"lib/adtekio_adnetworks/importers/cost/leadbolt.rb",
|
60
|
+
"lib/adtekio_adnetworks/importers/cost/lifestreet.rb",
|
61
|
+
"lib/adtekio_adnetworks/importers/cost/loopme.rb",
|
62
|
+
"lib/adtekio_adnetworks/importers/cost/matomy.rb",
|
63
|
+
"lib/adtekio_adnetworks/importers/cost/mdotm.rb",
|
64
|
+
"lib/adtekio_adnetworks/importers/cost/mmg.rb",
|
65
|
+
"lib/adtekio_adnetworks/importers/cost/mnectar.rb",
|
66
|
+
"lib/adtekio_adnetworks/importers/cost/moboqo.rb",
|
67
|
+
"lib/adtekio_adnetworks/importers/cost/mobpartner.rb",
|
68
|
+
"lib/adtekio_adnetworks/importers/cost/nanigans.rb",
|
69
|
+
"lib/adtekio_adnetworks/importers/cost/revmob.rb",
|
70
|
+
"lib/adtekio_adnetworks/importers/cost/rtbmob.rb",
|
71
|
+
"lib/adtekio_adnetworks/importers/cost/startapp.rb",
|
72
|
+
"lib/adtekio_adnetworks/importers/cost/supersonic.rb",
|
73
|
+
"lib/adtekio_adnetworks/importers/cost/tapjoy.rb",
|
74
|
+
"lib/adtekio_adnetworks/importers/cost/tokenads.rb",
|
75
|
+
"lib/adtekio_adnetworks/importers/cost/unilead.rb",
|
76
|
+
"lib/adtekio_adnetworks/importers/cost/vungle.rb",
|
77
|
+
"lib/adtekio_adnetworks/importers/cost_import.rb",
|
78
|
+
"lib/adtekio_adnetworks/importers/revenue/adcolony.rb",
|
79
|
+
"lib/adtekio_adnetworks/importers/revenue/applifier.rb",
|
80
|
+
"lib/adtekio_adnetworks/importers/revenue/applovin.rb",
|
81
|
+
"lib/adtekio_adnetworks/importers/revenue/chartboost.rb",
|
82
|
+
"lib/adtekio_adnetworks/importers/revenue/flurry.rb",
|
83
|
+
"lib/adtekio_adnetworks/importers/revenue/fyber.rb",
|
84
|
+
"lib/adtekio_adnetworks/importers/revenue/hypr_mx.rb",
|
85
|
+
"lib/adtekio_adnetworks/importers/revenue/lifestreet.rb",
|
86
|
+
"lib/adtekio_adnetworks/importers/revenue/mdotm.rb",
|
87
|
+
"lib/adtekio_adnetworks/importers/revenue/mopub.rb",
|
88
|
+
"lib/adtekio_adnetworks/importers/revenue/nexage.rb",
|
89
|
+
"lib/adtekio_adnetworks/importers/revenue/supersonic.rb",
|
90
|
+
"lib/adtekio_adnetworks/importers/revenue/tapsense.rb",
|
91
|
+
"lib/adtekio_adnetworks/importers/revenue/trialpay.rb",
|
92
|
+
"lib/adtekio_adnetworks/importers/revenue/vungle.rb",
|
93
|
+
"lib/adtekio_adnetworks/importers/revenue_import.rb",
|
94
|
+
"lib/adtekio_adnetworks/postbacks.rb",
|
95
|
+
"lib/adtekio_adnetworks/postbacks/aarki.rb",
|
96
|
+
"lib/adtekio_adnetworks/postbacks/adaction.rb",
|
97
|
+
"lib/adtekio_adnetworks/postbacks/adcash.rb",
|
98
|
+
"lib/adtekio_adnetworks/postbacks/adcolony.rb",
|
99
|
+
"lib/adtekio_adnetworks/postbacks/adgorithms.rb",
|
100
|
+
"lib/adtekio_adnetworks/postbacks/adjapon_nend.rb",
|
101
|
+
"lib/adtekio_adnetworks/postbacks/adknowledge.rb",
|
102
|
+
"lib/adtekio_adnetworks/postbacks/admob.rb",
|
103
|
+
"lib/adtekio_adnetworks/postbacks/adp.rb",
|
104
|
+
"lib/adtekio_adnetworks/postbacks/adperio.rb",
|
105
|
+
"lib/adtekio_adnetworks/postbacks/adquant.rb",
|
106
|
+
"lib/adtekio_adnetworks/postbacks/adstract.rb",
|
107
|
+
"lib/adtekio_adnetworks/postbacks/adxperience.rb",
|
108
|
+
"lib/adtekio_adnetworks/postbacks/airpush.rb",
|
109
|
+
"lib/adtekio_adnetworks/postbacks/app_chocolate.rb",
|
110
|
+
"lib/adtekio_adnetworks/postbacks/appfload.rb",
|
111
|
+
"lib/adtekio_adnetworks/postbacks/appia.rb",
|
112
|
+
"lib/adtekio_adnetworks/postbacks/appintheair.rb",
|
113
|
+
"lib/adtekio_adnetworks/postbacks/applifier.rb",
|
114
|
+
"lib/adtekio_adnetworks/postbacks/applift.rb",
|
115
|
+
"lib/adtekio_adnetworks/postbacks/applovin.rb",
|
116
|
+
"lib/adtekio_adnetworks/postbacks/appnext.rb",
|
117
|
+
"lib/adtekio_adnetworks/postbacks/appredeem.rb",
|
118
|
+
"lib/adtekio_adnetworks/postbacks/appsfire.rb",
|
119
|
+
"lib/adtekio_adnetworks/postbacks/appturbo.rb",
|
120
|
+
"lib/adtekio_adnetworks/postbacks/apsalar.rb",
|
121
|
+
"lib/adtekio_adnetworks/postbacks/bee7.rb",
|
122
|
+
"lib/adtekio_adnetworks/postbacks/bidmotion.rb",
|
123
|
+
"lib/adtekio_adnetworks/postbacks/blindferretmedia.rb",
|
124
|
+
"lib/adtekio_adnetworks/postbacks/chartboost.rb",
|
125
|
+
"lib/adtekio_adnetworks/postbacks/cheetah.rb",
|
126
|
+
"lib/adtekio_adnetworks/postbacks/clickky.rb",
|
127
|
+
"lib/adtekio_adnetworks/postbacks/covus.rb",
|
128
|
+
"lib/adtekio_adnetworks/postbacks/crossinstall.rb",
|
129
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_ameba.rb",
|
130
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_amoad.rb",
|
131
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_imobile.rb",
|
132
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_kjnw.rb",
|
133
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_maio.rb",
|
134
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_nend.rb",
|
135
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_smartc.rb",
|
136
|
+
"lib/adtekio_adnetworks/postbacks/cyberagent_smartnews.rb",
|
137
|
+
"lib/adtekio_adnetworks/postbacks/cyberz_asta.rb",
|
138
|
+
"lib/adtekio_adnetworks/postbacks/cyberz_bead.rb",
|
139
|
+
"lib/adtekio_adnetworks/postbacks/cyberz_imobile.rb",
|
140
|
+
"lib/adtekio_adnetworks/postbacks/cyberz_nend.rb",
|
141
|
+
"lib/adtekio_adnetworks/postbacks/datalead.rb",
|
142
|
+
"lib/adtekio_adnetworks/postbacks/eccrine.rb",
|
143
|
+
"lib/adtekio_adnetworks/postbacks/eeline.rb",
|
144
|
+
"lib/adtekio_adnetworks/postbacks/f5.rb",
|
145
|
+
"lib/adtekio_adnetworks/postbacks/fiksu.rb",
|
146
|
+
"lib/adtekio_adnetworks/postbacks/fiksu_applift.rb",
|
147
|
+
"lib/adtekio_adnetworks/postbacks/fractionalmedia.rb",
|
148
|
+
"lib/adtekio_adnetworks/postbacks/fyber.rb",
|
149
|
+
"lib/adtekio_adnetworks/postbacks/gamegenetics.rb",
|
150
|
+
"lib/adtekio_adnetworks/postbacks/ginga.rb",
|
151
|
+
"lib/adtekio_adnetworks/postbacks/glispa.rb",
|
152
|
+
"lib/adtekio_adnetworks/postbacks/googleadwords.rb",
|
153
|
+
"lib/adtekio_adnetworks/postbacks/growmobile.rb",
|
154
|
+
"lib/adtekio_adnetworks/postbacks/heyzap.rb",
|
155
|
+
"lib/adtekio_adnetworks/postbacks/inmobi.rb",
|
156
|
+
"lib/adtekio_adnetworks/postbacks/inneractive.rb",
|
157
|
+
"lib/adtekio_adnetworks/postbacks/instal.rb",
|
158
|
+
"lib/adtekio_adnetworks/postbacks/iqu.rb",
|
159
|
+
"lib/adtekio_adnetworks/postbacks/ironsource.rb",
|
160
|
+
"lib/adtekio_adnetworks/postbacks/jampp.rb",
|
161
|
+
"lib/adtekio_adnetworks/postbacks/jestadigital.rb",
|
162
|
+
"lib/adtekio_adnetworks/postbacks/jumpramp.rb",
|
163
|
+
"lib/adtekio_adnetworks/postbacks/jumptap.rb",
|
164
|
+
"lib/adtekio_adnetworks/postbacks/leadbolt.rb",
|
165
|
+
"lib/adtekio_adnetworks/postbacks/lifestreet.rb",
|
166
|
+
"lib/adtekio_adnetworks/postbacks/liftoff.rb",
|
167
|
+
"lib/adtekio_adnetworks/postbacks/loopme.rb",
|
168
|
+
"lib/adtekio_adnetworks/postbacks/magic_solver.rb",
|
169
|
+
"lib/adtekio_adnetworks/postbacks/marimedia.rb",
|
170
|
+
"lib/adtekio_adnetworks/postbacks/matomy.rb",
|
171
|
+
"lib/adtekio_adnetworks/postbacks/mdotm.rb",
|
172
|
+
"lib/adtekio_adnetworks/postbacks/misterbell.rb",
|
173
|
+
"lib/adtekio_adnetworks/postbacks/mmg.rb",
|
174
|
+
"lib/adtekio_adnetworks/postbacks/mnectar.rb",
|
175
|
+
"lib/adtekio_adnetworks/postbacks/moblin.rb",
|
176
|
+
"lib/adtekio_adnetworks/postbacks/moboqo.rb",
|
177
|
+
"lib/adtekio_adnetworks/postbacks/mobpartner.rb",
|
178
|
+
"lib/adtekio_adnetworks/postbacks/mopub.rb",
|
179
|
+
"lib/adtekio_adnetworks/postbacks/motive_interactive.rb",
|
180
|
+
"lib/adtekio_adnetworks/postbacks/mundo.rb",
|
181
|
+
"lib/adtekio_adnetworks/postbacks/nanigans.rb",
|
182
|
+
"lib/adtekio_adnetworks/postbacks/nativex.rb",
|
183
|
+
"lib/adtekio_adnetworks/postbacks/neodau.rb",
|
184
|
+
"lib/adtekio_adnetworks/postbacks/neverblue.rb",
|
185
|
+
"lib/adtekio_adnetworks/postbacks/operamedia.rb",
|
186
|
+
"lib/adtekio_adnetworks/postbacks/pandora.rb",
|
187
|
+
"lib/adtekio_adnetworks/postbacks/phunware.rb",
|
188
|
+
"lib/adtekio_adnetworks/postbacks/pirasin.rb",
|
189
|
+
"lib/adtekio_adnetworks/postbacks/playhaven.rb",
|
190
|
+
"lib/adtekio_adnetworks/postbacks/pocketmath.rb",
|
191
|
+
"lib/adtekio_adnetworks/postbacks/propeller.rb",
|
192
|
+
"lib/adtekio_adnetworks/postbacks/quixey.rb",
|
193
|
+
"lib/adtekio_adnetworks/postbacks/realzeit.rb",
|
194
|
+
"lib/adtekio_adnetworks/postbacks/remerge.rb",
|
195
|
+
"lib/adtekio_adnetworks/postbacks/revmob.rb",
|
196
|
+
"lib/adtekio_adnetworks/postbacks/ripple.rb",
|
197
|
+
"lib/adtekio_adnetworks/postbacks/roostr.rb",
|
198
|
+
"lib/adtekio_adnetworks/postbacks/rtbcom.rb",
|
199
|
+
"lib/adtekio_adnetworks/postbacks/septeni.rb",
|
200
|
+
"lib/adtekio_adnetworks/postbacks/seven_games.rb",
|
201
|
+
"lib/adtekio_adnetworks/postbacks/startapp.rb",
|
202
|
+
"lib/adtekio_adnetworks/postbacks/supersonic.rb",
|
203
|
+
"lib/adtekio_adnetworks/postbacks/tapjoy.rb",
|
204
|
+
"lib/adtekio_adnetworks/postbacks/taptica.rb",
|
205
|
+
"lib/adtekio_adnetworks/postbacks/targetcircle.rb",
|
206
|
+
"lib/adtekio_adnetworks/postbacks/todacell.rb",
|
207
|
+
"lib/adtekio_adnetworks/postbacks/tokenads.rb",
|
208
|
+
"lib/adtekio_adnetworks/postbacks/trademob.rb",
|
209
|
+
"lib/adtekio_adnetworks/postbacks/trademob_magic_solver.rb",
|
210
|
+
"lib/adtekio_adnetworks/postbacks/trialpay.rb",
|
211
|
+
"lib/adtekio_adnetworks/postbacks/unilead.rb",
|
212
|
+
"lib/adtekio_adnetworks/postbacks/uppsmobi.rb",
|
213
|
+
"lib/adtekio_adnetworks/postbacks/vungle.rb",
|
214
|
+
"lib/adtekio_adnetworks/postbacks/w4.rb",
|
215
|
+
"lib/adtekio_adnetworks/postbacks/webmedia.rb",
|
216
|
+
"lib/adtekio_adnetworks/postbacks/yahoo.rb",
|
217
|
+
"lib/adtekio_adnetworks/postbacks/youappi.rb",
|
218
|
+
"lib/adtekio_adnetworks/postbacks/zemail.rb",
|
219
|
+
"test/helper.rb",
|
220
|
+
"test/unit/postbacks/test_chartboost.rb",
|
221
|
+
"test/unit/postbacks/test_mdotm.rb",
|
222
|
+
"test/unit/postbacks/test_playhaven.rb",
|
223
|
+
"test/unit/postbacks/test_trademob_magic_solver.rb",
|
224
|
+
"test/unit/postbacks/test_unilead.rb",
|
225
|
+
"test/unit/test_api_key_scrapers.rb",
|
226
|
+
"test/unit/test_base_postback_class.rb",
|
227
|
+
"test/unit/test_cost_importers.rb",
|
228
|
+
"test/unit/test_postbacks.rb",
|
229
|
+
"test/unit/test_postbacks_definition.rb",
|
230
|
+
"test/unit/test_revenue_importers.rb"
|
231
|
+
]
|
232
|
+
s.homepage = "https://github.com/adtekio/adnetworks"
|
233
|
+
s.licenses = ["MIT"]
|
234
|
+
s.rubygems_version = "2.4.5.1"
|
235
|
+
s.summary = "Encapsulate mobile adnetworks support code."
|
236
|
+
|
237
|
+
if s.respond_to? :specification_version then
|
238
|
+
s.specification_version = 4
|
239
|
+
|
240
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
241
|
+
s.add_runtime_dependency(%q<net-http-persistent>, [">= 0"])
|
242
|
+
s.add_runtime_dependency(%q<addressable>, [">= 0"])
|
243
|
+
s.add_runtime_dependency(%q<rest-client>, [">= 0"])
|
244
|
+
s.add_runtime_dependency(%q<oauth2>, [">= 0"])
|
245
|
+
s.add_runtime_dependency(%q<mechanize>, [">= 0"])
|
246
|
+
s.add_runtime_dependency(%q<google-adwords-api>, [">= 0"])
|
247
|
+
s.add_runtime_dependency(%q<google-api-client>, [">= 0"])
|
248
|
+
s.add_runtime_dependency(%q<curb>, [">= 0"])
|
249
|
+
s.add_runtime_dependency(%q<uuidtools>, [">= 0"])
|
250
|
+
s.add_runtime_dependency(%q<erubis>, [">= 0"])
|
251
|
+
s.add_runtime_dependency(%q<activesupport>, [">= 0"])
|
252
|
+
s.add_development_dependency(%q<jeweler>, [">= 0"])
|
253
|
+
s.add_development_dependency(%q<rake>, [">= 0"])
|
254
|
+
s.add_development_dependency(%q<pry>, [">= 0"])
|
255
|
+
s.add_development_dependency(%q<pry-doc>, [">= 0"])
|
256
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
257
|
+
s.add_development_dependency(%q<rr>, [">= 0"])
|
258
|
+
else
|
259
|
+
s.add_dependency(%q<net-http-persistent>, [">= 0"])
|
260
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
261
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
262
|
+
s.add_dependency(%q<oauth2>, [">= 0"])
|
263
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
264
|
+
s.add_dependency(%q<google-adwords-api>, [">= 0"])
|
265
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
266
|
+
s.add_dependency(%q<curb>, [">= 0"])
|
267
|
+
s.add_dependency(%q<uuidtools>, [">= 0"])
|
268
|
+
s.add_dependency(%q<erubis>, [">= 0"])
|
269
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
270
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
271
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
272
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
273
|
+
s.add_dependency(%q<pry-doc>, [">= 0"])
|
274
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
275
|
+
s.add_dependency(%q<rr>, [">= 0"])
|
276
|
+
end
|
277
|
+
else
|
278
|
+
s.add_dependency(%q<net-http-persistent>, [">= 0"])
|
279
|
+
s.add_dependency(%q<addressable>, [">= 0"])
|
280
|
+
s.add_dependency(%q<rest-client>, [">= 0"])
|
281
|
+
s.add_dependency(%q<oauth2>, [">= 0"])
|
282
|
+
s.add_dependency(%q<mechanize>, [">= 0"])
|
283
|
+
s.add_dependency(%q<google-adwords-api>, [">= 0"])
|
284
|
+
s.add_dependency(%q<google-api-client>, [">= 0"])
|
285
|
+
s.add_dependency(%q<curb>, [">= 0"])
|
286
|
+
s.add_dependency(%q<uuidtools>, [">= 0"])
|
287
|
+
s.add_dependency(%q<erubis>, [">= 0"])
|
288
|
+
s.add_dependency(%q<activesupport>, [">= 0"])
|
289
|
+
s.add_dependency(%q<jeweler>, [">= 0"])
|
290
|
+
s.add_dependency(%q<rake>, [">= 0"])
|
291
|
+
s.add_dependency(%q<pry>, [">= 0"])
|
292
|
+
s.add_dependency(%q<pry-doc>, [">= 0"])
|
293
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
294
|
+
s.add_dependency(%q<rr>, [">= 0"])
|
295
|
+
end
|
296
|
+
end
|
297
|
+
|