adtekio_adnetworks 0.0.4

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.
Files changed (212) hide show
  1. checksums.yaml +7 -0
  2. data/.ruby-gemset +1 -0
  3. data/.ruby-version +1 -0
  4. data/Gemfile +24 -0
  5. data/README.md +333 -0
  6. data/Rakefile +56 -0
  7. data/VERSION +1 -0
  8. data/adtekio_adnetworks.gemspec +297 -0
  9. data/lib/adtekio_adnetworks.rb +6 -0
  10. data/lib/adtekio_adnetworks/api_key_scrapers.rb +59 -0
  11. data/lib/adtekio_adnetworks/api_key_scrapers/adcolony.rb +20 -0
  12. data/lib/adtekio_adnetworks/api_key_scrapers/applift.rb +13 -0
  13. data/lib/adtekio_adnetworks/api_key_scrapers/applovin.rb +13 -0
  14. data/lib/adtekio_adnetworks/api_key_scrapers/chartboost.rb +18 -0
  15. data/lib/adtekio_adnetworks/api_key_scrapers/crossinstall.rb +13 -0
  16. data/lib/adtekio_adnetworks/api_key_scrapers/leadbolt.rb +18 -0
  17. data/lib/adtekio_adnetworks/api_key_scrapers/loopme.rb +12 -0
  18. data/lib/adtekio_adnetworks/api_key_scrapers/mdotm.rb +22 -0
  19. data/lib/adtekio_adnetworks/api_key_scrapers/revmob.rb +22 -0
  20. data/lib/adtekio_adnetworks/api_key_scrapers/tapjoy.rb +19 -0
  21. data/lib/adtekio_adnetworks/api_key_scrapers/unilead.rb +13 -0
  22. data/lib/adtekio_adnetworks/api_key_scrapers/vungle.rb +23 -0
  23. data/lib/adtekio_adnetworks/importers.rb +58 -0
  24. data/lib/adtekio_adnetworks/importers/cost/adcolony.rb +43 -0
  25. data/lib/adtekio_adnetworks/importers/cost/adquant.rb +68 -0
  26. data/lib/adtekio_adnetworks/importers/cost/appia.rb +47 -0
  27. data/lib/adtekio_adnetworks/importers/cost/applifier.rb +64 -0
  28. data/lib/adtekio_adnetworks/importers/cost/applift.rb +41 -0
  29. data/lib/adtekio_adnetworks/importers/cost/applovin.rb +52 -0
  30. data/lib/adtekio_adnetworks/importers/cost/bidmotion.rb +82 -0
  31. data/lib/adtekio_adnetworks/importers/cost/chartboost.rb +40 -0
  32. data/lib/adtekio_adnetworks/importers/cost/crossinstall.rb +34 -0
  33. data/lib/adtekio_adnetworks/importers/cost/facebook.rb +39 -0
  34. data/lib/adtekio_adnetworks/importers/cost/fractionalmedia.rb +104 -0
  35. data/lib/adtekio_adnetworks/importers/cost/fyber.rb +54 -0
  36. data/lib/adtekio_adnetworks/importers/cost/gamegenetics.rb +44 -0
  37. data/lib/adtekio_adnetworks/importers/cost/glispa.rb +59 -0
  38. data/lib/adtekio_adnetworks/importers/cost/googleadwords.rb +99 -0
  39. data/lib/adtekio_adnetworks/importers/cost/jampp.rb +57 -0
  40. data/lib/adtekio_adnetworks/importers/cost/leadbolt.rb +43 -0
  41. data/lib/adtekio_adnetworks/importers/cost/lifestreet.rb +49 -0
  42. data/lib/adtekio_adnetworks/importers/cost/loopme.rb +63 -0
  43. data/lib/adtekio_adnetworks/importers/cost/matomy.rb +65 -0
  44. data/lib/adtekio_adnetworks/importers/cost/mdotm.rb +69 -0
  45. data/lib/adtekio_adnetworks/importers/cost/mmg.rb +67 -0
  46. data/lib/adtekio_adnetworks/importers/cost/mnectar.rb +45 -0
  47. data/lib/adtekio_adnetworks/importers/cost/moboqo.rb +33 -0
  48. data/lib/adtekio_adnetworks/importers/cost/mobpartner.rb +46 -0
  49. data/lib/adtekio_adnetworks/importers/cost/nanigans.rb +114 -0
  50. data/lib/adtekio_adnetworks/importers/cost/revmob.rb +44 -0
  51. data/lib/adtekio_adnetworks/importers/cost/rtbmob.rb +48 -0
  52. data/lib/adtekio_adnetworks/importers/cost/startapp.rb +47 -0
  53. data/lib/adtekio_adnetworks/importers/cost/supersonic.rb +77 -0
  54. data/lib/adtekio_adnetworks/importers/cost/tapjoy.rb +42 -0
  55. data/lib/adtekio_adnetworks/importers/cost/tokenads.rb +46 -0
  56. data/lib/adtekio_adnetworks/importers/cost/unilead.rb +39 -0
  57. data/lib/adtekio_adnetworks/importers/cost/vungle.rb +58 -0
  58. data/lib/adtekio_adnetworks/importers/cost_import.rb +13 -0
  59. data/lib/adtekio_adnetworks/importers/revenue/adcolony.rb +67 -0
  60. data/lib/adtekio_adnetworks/importers/revenue/applifier.rb +55 -0
  61. data/lib/adtekio_adnetworks/importers/revenue/applovin.rb +58 -0
  62. data/lib/adtekio_adnetworks/importers/revenue/chartboost.rb +43 -0
  63. data/lib/adtekio_adnetworks/importers/revenue/flurry.rb +85 -0
  64. data/lib/adtekio_adnetworks/importers/revenue/fyber.rb +61 -0
  65. data/lib/adtekio_adnetworks/importers/revenue/hypr_mx.rb +69 -0
  66. data/lib/adtekio_adnetworks/importers/revenue/lifestreet.rb +59 -0
  67. data/lib/adtekio_adnetworks/importers/revenue/mdotm.rb +38 -0
  68. data/lib/adtekio_adnetworks/importers/revenue/mopub.rb +54 -0
  69. data/lib/adtekio_adnetworks/importers/revenue/nexage.rb +71 -0
  70. data/lib/adtekio_adnetworks/importers/revenue/supersonic.rb +73 -0
  71. data/lib/adtekio_adnetworks/importers/revenue/tapsense.rb +38 -0
  72. data/lib/adtekio_adnetworks/importers/revenue/trialpay.rb +41 -0
  73. data/lib/adtekio_adnetworks/importers/revenue/vungle.rb +75 -0
  74. data/lib/adtekio_adnetworks/importers/revenue_import.rb +27 -0
  75. data/lib/adtekio_adnetworks/postbacks.rb +193 -0
  76. data/lib/adtekio_adnetworks/postbacks/aarki.rb +17 -0
  77. data/lib/adtekio_adnetworks/postbacks/adaction.rb +18 -0
  78. data/lib/adtekio_adnetworks/postbacks/adcash.rb +19 -0
  79. data/lib/adtekio_adnetworks/postbacks/adcolony.rb +90 -0
  80. data/lib/adtekio_adnetworks/postbacks/adgorithms.rb +74 -0
  81. data/lib/adtekio_adnetworks/postbacks/adjapon_nend.rb +39 -0
  82. data/lib/adtekio_adnetworks/postbacks/adknowledge.rb +18 -0
  83. data/lib/adtekio_adnetworks/postbacks/admob.rb +17 -0
  84. data/lib/adtekio_adnetworks/postbacks/adp.rb +18 -0
  85. data/lib/adtekio_adnetworks/postbacks/adperio.rb +19 -0
  86. data/lib/adtekio_adnetworks/postbacks/adquant.rb +39 -0
  87. data/lib/adtekio_adnetworks/postbacks/adstract.rb +15 -0
  88. data/lib/adtekio_adnetworks/postbacks/adxperience.rb +16 -0
  89. data/lib/adtekio_adnetworks/postbacks/airpush.rb +17 -0
  90. data/lib/adtekio_adnetworks/postbacks/app_chocolate.rb +17 -0
  91. data/lib/adtekio_adnetworks/postbacks/appfload.rb +17 -0
  92. data/lib/adtekio_adnetworks/postbacks/appia.rb +18 -0
  93. data/lib/adtekio_adnetworks/postbacks/appintheair.rb +17 -0
  94. data/lib/adtekio_adnetworks/postbacks/applifier.rb +49 -0
  95. data/lib/adtekio_adnetworks/postbacks/applift.rb +88 -0
  96. data/lib/adtekio_adnetworks/postbacks/applovin.rb +127 -0
  97. data/lib/adtekio_adnetworks/postbacks/appnext.rb +17 -0
  98. data/lib/adtekio_adnetworks/postbacks/appredeem.rb +33 -0
  99. data/lib/adtekio_adnetworks/postbacks/appsfire.rb +19 -0
  100. data/lib/adtekio_adnetworks/postbacks/appturbo.rb +18 -0
  101. data/lib/adtekio_adnetworks/postbacks/apsalar.rb +21 -0
  102. data/lib/adtekio_adnetworks/postbacks/bee7.rb +17 -0
  103. data/lib/adtekio_adnetworks/postbacks/bidmotion.rb +80 -0
  104. data/lib/adtekio_adnetworks/postbacks/blindferretmedia.rb +17 -0
  105. data/lib/adtekio_adnetworks/postbacks/chartboost.rb +116 -0
  106. data/lib/adtekio_adnetworks/postbacks/cheetah.rb +32 -0
  107. data/lib/adtekio_adnetworks/postbacks/clickky.rb +30 -0
  108. data/lib/adtekio_adnetworks/postbacks/covus.rb +17 -0
  109. data/lib/adtekio_adnetworks/postbacks/crossinstall.rb +26 -0
  110. data/lib/adtekio_adnetworks/postbacks/cyberagent_ameba.rb +17 -0
  111. data/lib/adtekio_adnetworks/postbacks/cyberagent_amoad.rb +17 -0
  112. data/lib/adtekio_adnetworks/postbacks/cyberagent_imobile.rb +43 -0
  113. data/lib/adtekio_adnetworks/postbacks/cyberagent_kjnw.rb +17 -0
  114. data/lib/adtekio_adnetworks/postbacks/cyberagent_maio.rb +18 -0
  115. data/lib/adtekio_adnetworks/postbacks/cyberagent_nend.rb +40 -0
  116. data/lib/adtekio_adnetworks/postbacks/cyberagent_smartc.rb +17 -0
  117. data/lib/adtekio_adnetworks/postbacks/cyberagent_smartnews.rb +17 -0
  118. data/lib/adtekio_adnetworks/postbacks/cyberz_asta.rb +26 -0
  119. data/lib/adtekio_adnetworks/postbacks/cyberz_bead.rb +26 -0
  120. data/lib/adtekio_adnetworks/postbacks/cyberz_imobile.rb +28 -0
  121. data/lib/adtekio_adnetworks/postbacks/cyberz_nend.rb +30 -0
  122. data/lib/adtekio_adnetworks/postbacks/datalead.rb +17 -0
  123. data/lib/adtekio_adnetworks/postbacks/eccrine.rb +80 -0
  124. data/lib/adtekio_adnetworks/postbacks/eeline.rb +50 -0
  125. data/lib/adtekio_adnetworks/postbacks/f5.rb +30 -0
  126. data/lib/adtekio_adnetworks/postbacks/fiksu.rb +43 -0
  127. data/lib/adtekio_adnetworks/postbacks/fiksu_applift.rb +31 -0
  128. data/lib/adtekio_adnetworks/postbacks/fractionalmedia.rb +78 -0
  129. data/lib/adtekio_adnetworks/postbacks/fyber.rb +36 -0
  130. data/lib/adtekio_adnetworks/postbacks/gamegenetics.rb +17 -0
  131. data/lib/adtekio_adnetworks/postbacks/ginga.rb +26 -0
  132. data/lib/adtekio_adnetworks/postbacks/glispa.rb +96 -0
  133. data/lib/adtekio_adnetworks/postbacks/googleadwords.rb +19 -0
  134. data/lib/adtekio_adnetworks/postbacks/growmobile.rb +36 -0
  135. data/lib/adtekio_adnetworks/postbacks/heyzap.rb +51 -0
  136. data/lib/adtekio_adnetworks/postbacks/inmobi.rb +50 -0
  137. data/lib/adtekio_adnetworks/postbacks/inneractive.rb +17 -0
  138. data/lib/adtekio_adnetworks/postbacks/instal.rb +18 -0
  139. data/lib/adtekio_adnetworks/postbacks/iqu.rb +19 -0
  140. data/lib/adtekio_adnetworks/postbacks/ironsource.rb +19 -0
  141. data/lib/adtekio_adnetworks/postbacks/jampp.rb +48 -0
  142. data/lib/adtekio_adnetworks/postbacks/jestadigital.rb +18 -0
  143. data/lib/adtekio_adnetworks/postbacks/jumpramp.rb +17 -0
  144. data/lib/adtekio_adnetworks/postbacks/jumptap.rb +23 -0
  145. data/lib/adtekio_adnetworks/postbacks/leadbolt.rb +29 -0
  146. data/lib/adtekio_adnetworks/postbacks/lifestreet.rb +97 -0
  147. data/lib/adtekio_adnetworks/postbacks/liftoff.rb +66 -0
  148. data/lib/adtekio_adnetworks/postbacks/loopme.rb +17 -0
  149. data/lib/adtekio_adnetworks/postbacks/magic_solver.rb +18 -0
  150. data/lib/adtekio_adnetworks/postbacks/marimedia.rb +20 -0
  151. data/lib/adtekio_adnetworks/postbacks/matomy.rb +59 -0
  152. data/lib/adtekio_adnetworks/postbacks/mdotm.rb +116 -0
  153. data/lib/adtekio_adnetworks/postbacks/misterbell.rb +18 -0
  154. data/lib/adtekio_adnetworks/postbacks/mmg.rb +20 -0
  155. data/lib/adtekio_adnetworks/postbacks/mnectar.rb +22 -0
  156. data/lib/adtekio_adnetworks/postbacks/moblin.rb +17 -0
  157. data/lib/adtekio_adnetworks/postbacks/moboqo.rb +17 -0
  158. data/lib/adtekio_adnetworks/postbacks/mobpartner.rb +19 -0
  159. data/lib/adtekio_adnetworks/postbacks/mopub.rb +30 -0
  160. data/lib/adtekio_adnetworks/postbacks/motive_interactive.rb +32 -0
  161. data/lib/adtekio_adnetworks/postbacks/mundo.rb +17 -0
  162. data/lib/adtekio_adnetworks/postbacks/nanigans.rb +38 -0
  163. data/lib/adtekio_adnetworks/postbacks/nativex.rb +30 -0
  164. data/lib/adtekio_adnetworks/postbacks/neodau.rb +19 -0
  165. data/lib/adtekio_adnetworks/postbacks/neverblue.rb +19 -0
  166. data/lib/adtekio_adnetworks/postbacks/operamedia.rb +39 -0
  167. data/lib/adtekio_adnetworks/postbacks/pandora.rb +17 -0
  168. data/lib/adtekio_adnetworks/postbacks/phunware.rb +18 -0
  169. data/lib/adtekio_adnetworks/postbacks/pirasin.rb +16 -0
  170. data/lib/adtekio_adnetworks/postbacks/playhaven.rb +31 -0
  171. data/lib/adtekio_adnetworks/postbacks/pocketmath.rb +17 -0
  172. data/lib/adtekio_adnetworks/postbacks/propeller.rb +18 -0
  173. data/lib/adtekio_adnetworks/postbacks/quixey.rb +17 -0
  174. data/lib/adtekio_adnetworks/postbacks/realzeit.rb +60 -0
  175. data/lib/adtekio_adnetworks/postbacks/remerge.rb +66 -0
  176. data/lib/adtekio_adnetworks/postbacks/revmob.rb +17 -0
  177. data/lib/adtekio_adnetworks/postbacks/ripple.rb +18 -0
  178. data/lib/adtekio_adnetworks/postbacks/roostr.rb +17 -0
  179. data/lib/adtekio_adnetworks/postbacks/rtbcom.rb +28 -0
  180. data/lib/adtekio_adnetworks/postbacks/septeni.rb +17 -0
  181. data/lib/adtekio_adnetworks/postbacks/seven_games.rb +51 -0
  182. data/lib/adtekio_adnetworks/postbacks/startapp.rb +48 -0
  183. data/lib/adtekio_adnetworks/postbacks/supersonic.rb +19 -0
  184. data/lib/adtekio_adnetworks/postbacks/tapjoy.rb +36 -0
  185. data/lib/adtekio_adnetworks/postbacks/taptica.rb +21 -0
  186. data/lib/adtekio_adnetworks/postbacks/targetcircle.rb +41 -0
  187. data/lib/adtekio_adnetworks/postbacks/todacell.rb +18 -0
  188. data/lib/adtekio_adnetworks/postbacks/tokenads.rb +18 -0
  189. data/lib/adtekio_adnetworks/postbacks/trademob.rb +48 -0
  190. data/lib/adtekio_adnetworks/postbacks/trademob_magic_solver.rb +22 -0
  191. data/lib/adtekio_adnetworks/postbacks/trialpay.rb +18 -0
  192. data/lib/adtekio_adnetworks/postbacks/unilead.rb +78 -0
  193. data/lib/adtekio_adnetworks/postbacks/uppsmobi.rb +19 -0
  194. data/lib/adtekio_adnetworks/postbacks/vungle.rb +33 -0
  195. data/lib/adtekio_adnetworks/postbacks/w4.rb +17 -0
  196. data/lib/adtekio_adnetworks/postbacks/webmedia.rb +17 -0
  197. data/lib/adtekio_adnetworks/postbacks/yahoo.rb +20 -0
  198. data/lib/adtekio_adnetworks/postbacks/youappi.rb +116 -0
  199. data/lib/adtekio_adnetworks/postbacks/zemail.rb +19 -0
  200. data/test/helper.rb +78 -0
  201. data/test/unit/postbacks/test_chartboost.rb +105 -0
  202. data/test/unit/postbacks/test_mdotm.rb +35 -0
  203. data/test/unit/postbacks/test_playhaven.rb +76 -0
  204. data/test/unit/postbacks/test_trademob_magic_solver.rb +24 -0
  205. data/test/unit/postbacks/test_unilead.rb +67 -0
  206. data/test/unit/test_api_key_scrapers.rb +302 -0
  207. data/test/unit/test_base_postback_class.rb +82 -0
  208. data/test/unit/test_cost_importers.rb +12 -0
  209. data/test/unit/test_postbacks.rb +33 -0
  210. data/test/unit/test_postbacks_definition.rb +111 -0
  211. data/test/unit/test_revenue_importers.rb +12 -0
  212. metadata +500 -0
@@ -0,0 +1,6 @@
1
+ module AdtekioAdnetworks
2
+ end
3
+
4
+ require_relative 'adtekio_adnetworks/importers'
5
+ require_relative 'adtekio_adnetworks/postbacks'
6
+ require_relative 'adtekio_adnetworks/api_key_scrapers'
@@ -0,0 +1,59 @@
1
+ require 'mechanize'
2
+
3
+ module AdtekioAdnetworks
4
+ class ApiKeyScrapers
5
+ attr_reader :agent, :params
6
+
7
+ def initialize
8
+ @agent = Mechanize.new
9
+ @agent.user_agent_alias = 'Mac Mozilla'
10
+ end
11
+
12
+ def obtain_key_for(network, params)
13
+ @params = params
14
+ send("key_for_#{network}")
15
+ end
16
+
17
+ def self.supporter_adnetworks
18
+ public_instance_methods.
19
+ select { |a| a =~ /key_for_/ }.map { |a| a.to_s.sub(/key_for_/,'') }
20
+ end
21
+
22
+ protected
23
+
24
+ def _g(url)
25
+ agent.get(url)
26
+ end
27
+
28
+ def _p(url, data)
29
+ agent.post(url, data)
30
+ end
31
+
32
+ def get_and_match(url, regexp)
33
+ _g(url).content =~ regexp && $1
34
+ end
35
+
36
+ def post_and_match(url, data, regexp)
37
+ _p(url, data).content =~ regexp && $1
38
+ end
39
+
40
+ def return_result_hash(&block)
41
+ {}.tap { |result| yield(result) }
42
+ end
43
+
44
+ def return_token_hash(&block)
45
+ return_result_hash { |r| r[:token] = yield }
46
+ end
47
+
48
+ def enter_login_details(form)
49
+ form.fields.
50
+ select { |a| a.name =~ /email/i }.first.value = params["username"]
51
+ form.fields.
52
+ select {|a| a.name =~ /passw(or)?d/i}.first.value = params["password"]
53
+ form
54
+ end
55
+ end
56
+ end
57
+
58
+ Dir[File.join(File.dirname(__FILE__), "api_key_scrapers", '*.rb')].
59
+ each { |f| require f }
@@ -0,0 +1,20 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_adcolony
4
+ return_token_hash do
5
+ csrf_token =
6
+ get_and_match("https://clients.adcolony.com/login",
7
+ /_csrf.:.([^"]+)"/)
8
+
9
+ data = {
10
+ "_csrf" => csrf_token,
11
+ "email" => params["username"],
12
+ "password" => params["password"]
13
+ }
14
+
15
+ post_and_match("https://clients.adcolony.com/login", data,
16
+ /single_access_token.:.([^"]+)"/)
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,13 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_applift
4
+ return_token_hash do
5
+ enter_login_details(_g("https://partner.applift.com").forms.first).
6
+ submit
7
+
8
+ get_and_match("https://partner.applift.com/stats/stats_api",
9
+ /Your API Key .+ <i>([^ ]+)[<]/)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,13 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_applovin
4
+ return_token_hash do
5
+ enter_login_details(_g("https://www.applovin.com/login").forms.first).
6
+ submit
7
+
8
+ page = _g("https://www.applovin.com/account")
9
+ page.search("input[id=report_key]").first.attributes["value"].value
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_chartboost
4
+ return_result_hash do |result|
5
+ _p("https://dashapi.chartboost.com/v3/login", {
6
+ "email" => params["username"],
7
+ "password" => params["password"]
8
+ })
9
+
10
+ chsh = JSON.parse(_g("https://dashapi.chartboost.com/v3/"+
11
+ "companies?with=money%2users,ounts").content)
12
+
13
+ result["user_id"] = chsh["response"]["user_id"]
14
+ result["signature"] = chsh["response"]["user_signature"]
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,13 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_crossinstall
4
+ return_token_hash do
5
+ agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
6
+ form = _g("https://secure.crossinstall.com/login").forms.first
7
+
8
+ enter_login_details(form).submit.link_with(:text => " API Key").
9
+ click.search("input[name=api_key]").first.attributes["value"].value
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,18 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_leadbolt
4
+ return_result_hash do |r|
5
+ form =
6
+ _g("https://www.leadboltnetwork.net/advertiser/login").forms.first
7
+ enter_login_details(form).submit
8
+
9
+ page = _g("https://www.leadboltnetwork.net/a/account/accountsettings")
10
+
11
+ r["secret_key"] =
12
+ page.search("div p[class=form-control-static]").last.text
13
+ r["advertiser_id"] =
14
+ page.search("div p[class=form-control-static]")[-2].text
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,12 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_loopme
4
+ return_token_hash do
5
+ form = _g("https://loopme.me/login").forms.first
6
+ enter_login_details(form).submit
7
+ page = _g("https://loopme.me/account/settings")
8
+ page.search("span[id=api_auth_token]").first.children.first.text
9
+ end
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,22 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_mdotm
4
+ return_result_hash do |result|
5
+ agent.agent.http.verify_mode = OpenSSL::SSL::VERIFY_NONE
6
+
7
+ form = _g("https://platform.mdotm.com/app/login").forms.first
8
+ page = enter_login_details(form).submit
9
+ page = page.link_with(:text => "Your Profile").click
10
+
11
+ {
12
+ "account_id" => /AccountID.*<code>(.+)<\/code>/,
13
+ "token" => /Your API Key.*<code>(.+)<\/code>/,
14
+ "secret_key" => /Your Secret Key.*<code>(.+)<\/code>/
15
+ }.each do |key, regexp|
16
+ page.content =~ regexp
17
+ result[key] = $1
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,22 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_revmob
4
+ return_result_hash do |result|
5
+ _p("https://www.revmobmobileadnetwork.com/home/signIn",{
6
+ "emailSignIn" => params["username"],
7
+ "pass" => params["password"],
8
+ "originalUrl" => "/users/session/new"})
9
+
10
+ page = _p("https://www.revmobmobileadnetwork.com/myMedias",{
11
+ "countEnable" => "false",
12
+ "filterText" => "",
13
+ "limitEnd" => 15,
14
+ "limitStart" => 15})
15
+
16
+ hsh = JSON.parse(page.content)
17
+ result["user_id"] = hsh["user_id"]
18
+ result["auth_token"] = hsh["auth_token"]
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_tapjoy
4
+ return_token_hash do
5
+ page = _p("https://dashboard.tapjoy.com/api/client/v1/session", {
6
+ 'username' => params["username"],
7
+ 'password' => params["password"],
8
+ "_method" => "put"})
9
+
10
+ user_id = get_and_match(JSON.parse(page.content)["link"] + "/d",
11
+ /User Id., "([^"]+)"/)
12
+
13
+ page = _g("https://dashboard.tapjoy.com/api/client/users/#{user_id}")
14
+
15
+ JSON.parse(page.content)["result"]["user"]["api_key"]
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,13 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_unilead
4
+ return_token_hash do
5
+ enter_login_details(_g("http://my.unileadnetwork.com/").forms.first).
6
+ submit
7
+
8
+ get_and_match("http://my.unileadnetwork.com/stats/stats_api",
9
+ /Your API Key .+ <i>([^ ]+)[<]/)
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,23 @@
1
+ module AdtekioAdnetworks
2
+ class ApiKeyScrapers
3
+ def key_for_vungle
4
+ return_token_hash do
5
+ csrf_token = get_and_match("https://v.vungle.com/dashboard/login",
6
+ /id="csrf" value="([^"]+)"/)
7
+
8
+ _p("https://v.vungle.com/dashboard/login", {
9
+ "_csrf" => csrf_token,
10
+ "email" => params["username"],
11
+ "password" => params["password"]})
12
+
13
+ account_id = get_and_match("https://v.vungle.com/dashboard/reports",
14
+ /"account":."_id":"([^"]+)"/)
15
+
16
+ page = _g("https://v.vungle.com/dashboard/api/1/"+
17
+ "accounts/#{account_id}/users")
18
+
19
+ JSON.parse(page.content).map {|a|a["secretKey"]}.compact.first
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,58 @@
1
+ require 'adwords_api'
2
+ require 'addressable'
3
+ require 'addressable/uri'
4
+ require 'csv'
5
+ require 'curb'
6
+ require 'mechanize'
7
+ require 'uri'
8
+ require 'net/http'
9
+ require 'net/http/persistent'
10
+ require 'net/http/digest_auth'
11
+ require 'rest-client'
12
+ require 'digest/sha1'
13
+
14
+ module AdtekioAdnetworks
15
+ module BaseImporter
16
+ def self.included(klz)
17
+ klz.class_eval do
18
+ def self.networks
19
+ @networks
20
+ end
21
+
22
+ def self.register(importer_klz)
23
+ (@networks ||= {})[importer_klz.new.network] = importer_klz
24
+ end
25
+
26
+ def self.included(importer_klz)
27
+ register(importer_klz)
28
+ importer_klz.class_eval do
29
+ def self.define_required_credentials(&block)
30
+ @reqcreds = yield
31
+ self.class_eval do
32
+ def self.required_credentials
33
+ @reqcreds
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+
42
+ def network
43
+ @network ||=
44
+ self.class.name.to_s.sub(/^.+::([^:]+)$/,'\1').snakecase.to_sym
45
+ end
46
+
47
+ def credentials
48
+ @credentials ||= OpenStruct.new
49
+ end
50
+
51
+ def credentials=(val)
52
+ @credentials = val.is_a?(Hash) ? OpenStruct.new(val) : val
53
+ end
54
+ end
55
+ end
56
+
57
+ require_relative 'importers/cost_import'
58
+ require_relative 'importers/revenue_import'
@@ -0,0 +1,43 @@
1
+ class AdtekioAdnetworks::Cost::Adcolony
2
+ include AdtekioAdnetworks::CostImport
3
+
4
+ define_required_credentials do
5
+ [:api_key]
6
+ end
7
+
8
+ def campaign_costs(from, till)
9
+ uri = Addressable::URI.
10
+ parse("http://clients.adcolony.com/api/v2/advertiser_summary")
11
+
12
+ uri.query_values = {
13
+ :user_credentials => credentials.api_key,
14
+ :date => from.strftime("%m%d%Y"),
15
+ :end_date => till.strftime("%m%d%Y"),
16
+ :group_by => [:campaign, :ad_group, :country],
17
+ :date_group => :day
18
+ }
19
+ req = Net::HTTP::Get.new(uri.request_uri)
20
+ res = Net::HTTP.start(uri.host, uri.port) do |http|
21
+ http.request(req)
22
+ end
23
+
24
+ (JSON.parse(res.body, :symbolize_names => true)[:results] || []).
25
+ map do |campaign|
26
+ next if campaign[:spend].to_f == 0.0
27
+ campaign_name = campaign[:group_name].
28
+ encode(Encoding.find('ASCII'),
29
+ :invalid => :replace, :replace => '', :undef => :replace)
30
+
31
+ {
32
+ :date => Date.strptime(campaign[:date], "%Y-%m-%d"),
33
+ :campaign => campaign_name,
34
+ :adgroup => campaign[:country],
35
+ :impressions => campaign[:impressions].to_i,
36
+ :clicks => campaign[:total_clicks].to_i,
37
+ :conversions => campaign[:installs].to_i,
38
+ :amount => campaign[:spend].to_f,
39
+ :target_country => campaign[:country].try(:downcase),
40
+ }
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,68 @@
1
+ class AdtekioAdnetworks::Cost::Adquant
2
+ include AdtekioAdnetworks::CostImport
3
+
4
+ API_ENDPOINT = "https://rpc.mb4w.com/"
5
+ AUTH_ROUTE = "auth"
6
+ DATA_ROUTE = "report/grid"
7
+
8
+ define_required_credentials do
9
+ [:username, :password]
10
+ end
11
+
12
+ def campaign_costs(from, till)
13
+ load_data.map do |campaign_data|
14
+ campaign_name = campaign_data[:fcg_name]
15
+ adgroup_name = campaign_data[:fbc_name].
16
+ sub(/(#{Regexp.escape(campaign_name)}_)/i, "").sub('%) ', '_')
17
+ ad_name = campaign_data[:fba_name].
18
+ sub(/(#{Regexp.escape(campaign_name)}_#{Regexp.escape(adgroup_name)}_)/i, "")
19
+
20
+ {
21
+ :date => Date.parse(campaign_data[:date]).to_s,
22
+ :campaign => campaign_name,
23
+ :adgroup => adgroup_name,
24
+ :ad => ad_name,
25
+ :impressions => campaign_data[:fb_unique_imps],
26
+ :clicks => campaign_data[:fb_unique_clicks],
27
+ :conversions => campaign_data[:conversion],
28
+ :amount => campaign_data[:dst_amount][:USD]
29
+ }
30
+ end.select { |d| (from..till).include?(Date.parse(d[:date])) }
31
+ end
32
+
33
+ private
34
+
35
+ def load_data
36
+ params = {
37
+ :token => api_token,
38
+ :groups => ["cpn_id", "fcg_id", "fbc_id", "fba_id", "date"].to_json,
39
+ :values => ["cpn_id", "fcg_id", "fbc_id", "fba_id", "date", "dst_amount",
40
+ "act_action_date", "conversions", "fb_unique_imps",
41
+ "fb_unique_clicks", "cpn_title"].to_json,
42
+ }
43
+ make_request(params, DATA_ROUTE)[:rowset]
44
+ end
45
+
46
+ def api_token
47
+ @api_token ||= begin
48
+ params = {
49
+ :usr_email => credentials.username,
50
+ :usr_pwd => credentials.password
51
+ }
52
+ response_json = make_request(params, AUTH_ROUTE)
53
+ response_json[:token]
54
+ end
55
+ end
56
+
57
+ def make_request(params, route)
58
+ response = ::RestClient::Request.
59
+ execute(method: :post,
60
+ content_type: 'application/json',
61
+ url: "#{API_ENDPOINT}#{route}",
62
+ payload: params,
63
+ headers: {"Accept-Encoding" => "deflate"},
64
+ ssl_version: :SSLv23)
65
+
66
+ JSON.parse(response.to_str, :symbolize_names => true)[:data]
67
+ end
68
+ end