Module: AdMob
- Defined in:
- lib/admob.rb
Overview
This module encapsulates functionality (ad requests, analytics requests) provided by AdMob. See README.txt for usage.
Defined Under Namespace
Constant Summary collapse
- GEM_VERSION =
'1.1.2'- ENDPOINT =
URI.parse('http://r.admob.com/ad_source.php')
- PUBCODE_VERSION =
'20090714-RUBY-8708a7ab5f2b70b6'- DEFAULT_TIMEOUT =
1.0
Class Method Summary collapse
-
.config {|AdMob::Defaults| ... } ⇒ Object
Provides access to AdMob config, used for setting default request info.
-
.request(request, session_id, params = {}) ⇒ Object
Make an AdMob ad/analytics request.
-
.set_cookie(request, cookies, params = {}) ⇒ Object
This function should be called from an ActionController to set a cookie on behalf of AdMob.
Class Method Details
.config {|AdMob::Defaults| ... } ⇒ Object
Provides access to AdMob config, used for setting default request info. Currently, can be used to set defaults for: publisher_id, analytics_id, ad encoding, request timeout, cookie_domain, cookie_path and whether exceptions are raised when something goes wrong. For example, in environment.rb: require 'admob' AdMob::config do |c| c.publisher_id = 'YOUR_DEFAULT_PUBLISHER_ID' c.analytics_id = 'YOUR_DEFAULT_ANALYTICS_ID' c.encoding = 'SJIS' c.timeout = 3 c.raise_exceptions = true c.cookie_domain = 'example.com' # this can also be passed to AdMob::set_cookie() but not AdMob::request() c.cookie_path = '/' # this can also be passed to AdMob::set_cookie() but not AdMob:request() end
149 150 151 |
# File 'lib/admob.rb', line 149 def self.config yield AdMob::Defaults end |
.request(request, session_id, params = {}) ⇒ Object
Make an AdMob ad/analytics request. The first param is the request variable from Rails; the second is a unique session identifier. In general, requests should always be of the form <%= AdMob::request(request, session.session_id, ...) %>. Regardless of how many times AdMob::request is called, only one analytics call will be made per page load. The remaining params set optional features of the request. Params that can be set are:
[:publisher_id] your admob publisher_id, a default can be set using AdMob::config {|c| c.publisher_id = "YOUR_PUBLISHER_ID"} [:analytics_id] your admob analytics_id, a default can be set using AdMob::config {|c| c.analytics_id = "YOUR_ANALYTICS_ID"} [:ad_request] whether to make an ad request, defaults to true [:analytics_request] whether to make an analytics request, defaults to true [:encoding] char encoding of the response, either "UTF-8" or "SJIS", defaults to UTF-8 [:markup] your site's markup, e.g. "xhtml", "wml", "chtml" [:postal_code] postal code of the current user, e.g. "94401" [:area_code] area code of the current user, e.g. "415" [:coordinates] lat/long of the current user, comma separated, e.g. "37.563657,-122.324807" [:dob] date of birth of the current user, e.g. "19800229" [:gender] gender of the current user, e.g. "m" or "f" [:keywords] keywords, e.g. "ruby gem admob" [:search] searchwords (much more restrictive than keywords), e.g. "ruby gem admob" [:title] title of the page, e.g. "Home Page" [:event] the event you want to report to analytics, e.g. "reg_success" [:text_only] if set to true, don't return a banner ad for this request [:test] whether this should issue a test ad request, not a real one [:timeout] override the default timeout value for this ad request in seconds, e.g. 2 [:raise_exceptions] whether to raise exceptions when something goes wrong (defaults to false); exceptions will all be instances of AdMob::Error; a default can be set using AdMob::config {|c| c.raise_exceptions = true}
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 |
# File 'lib/admob.rb', line 41 def self.request(request, session_id, params = {}) raise_exceptions = params[:raise_exceptions].nil? ? AdMob::Defaults.raise_exceptions : params[:raise_exceptions] if raise_exceptions and !params[:cookie_domain].nil? raise AdMob::Error.new("Cannot set cookie_domain in AdMob::request(), set the cookie_domain in the call to AdMob::set_cookie()") end if raise_exceptions and !params[:cookie_path].nil? raise AdMob::Error.new("Cannot set cookie_path in AdMob::request(), set the cookie_path in the call to AdMob::set_cookie()") end # Build the post request post_data = self.build_post_data(request, session_id, params) if post_data.nil? raise AdMob::Error.new("AdMob::request called as neither an ad nor an analytics request") if raise_exceptions return '' end # Send request req = Net::HTTP::Post.new(ENDPOINT.path) req.set_form_data(post_data) conn = Net::HTTP.new(ENDPOINT.host, ENDPOINT.port) timeout = params[:timeout] || AdMob::Defaults.timeout || DEFAULT_TIMEOUT conn.read_timeout = timeout conn.open_timeout = timeout begin start = Time.now.getutc.to_f response = conn.start {|http| http.request(req)} contents = response.body rescue Timeout::Error => te raise AdMob::Error.new("AdMob::request timed out; timeout was #{timeout}, elapsed time was #{Time.now.to_f - post_data['z']}") if raise_exceptions rescue raise AdMob::Error.new("AdMob::request encountered unexpected exception #{$!}") if raise_exceptions ensure contents ||= '' lt = Time.now.getutc.to_f - start end # If appropriate, add the analytics pixel if !request.env['admob_pixel_sent'] request.env['admob_pixel_sent'] = true contents << '<img src="http://p.admob.com/e0?' contents << "rt=#{post_data['rt']}&" contents << "z=#{post_data['z']}&" contents << "a=#{post_data['a']}&" contents << "s=#{post_data['s']}&" contents << "o=#{post_data['o']}&" contents << "lt=%0.4f&" % lt contents << "to=#{timeout}" contents << '" alt="" width="1" height="1"/>' end contents end |
.set_cookie(request, cookies, params = {}) ⇒ Object
This function should be called from an ActionController to set a cookie on behalf of AdMob. If you need to override the default cookie domain or cookie path, pass these as optional parameters to AdMob::set_cookie(). AdMob::set_cookie(request, cookies, :cookie_domain => 'example.com', :cookie_path => '/videos') You can NOT pass cookie_domain or cookie_path as optional parameters to AdMob::request() AdMob recommends using a before_filter in your ActionController::Base class (usually in app/controllers/application.rb) to call set_cookie on each request. Here is a sample application.rb. require 'admob'
Filters added to this controller apply to all controllers in the application.
Likewise, all the methods added will be available for all controllers.
class ApplicationController < ActionController::Base
before_filter :admob_set_cookie
def
AdMob::(request, )
end
end
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
# File 'lib/admob.rb', line 113 def self.(request, , params = {}) # don't make a new cookie if one already exists return if request.env['admobuu'] or [:admobuu] # make a new cookie ua = request.user_agent || '' value = MD5.hexdigest(rand().to_s + ua + request.remote_ip + Time.now.to_f.to_s) = { :value => value, :expires => Time.at(0x7fffffff), # end of 32 bit time :path => params[:cookie_path] || AdMob::Defaults. || "/" } domain = params[:cookie_domain] || AdMob::Defaults. if domain domain = '.' + domain if domain[0].chr != '.' [:domain] = domain end [:admobuu] = # make this cookie visible to the current page request.env['admobuu'] = value end |