AdsenseCrawlerForPrivate

Easy way to enable AdSense crawler to login and see private or custom pages in your rails application. Basically one custom login filter. Gem enables you to easily slightly increase revenues from Google AdSense/AdWords. It makes it easy to enable crawling on private pages and so get better targeted ads even in pages behind login screen.

Usage

Install: In RAILS_ROOT/Gemfile.rb

gem 'adsense_crawler_for_private'

Initialize: In RAILS_ROOT/config/initializers/adsense_crawler_for_private.rb

# Configure adsense_crawler_for_private

AdsenseCrawlerForPrivate.cookie_name = "adsense_crawler"
AdsenseCrawlerForPrivate.cookie_domain = :all
AdsenseCrawlerForPrivate.crawler_name = "test_name"
AdsenseCrawlerForPrivate.crawler_password = "test_password"

# If you are paranoid you can specify ip addresses that are ok to the crawlers to access
# AdsenseCrawlerForPrivate.ip_ranges = [IPAddr.new("127.0.0.1"), IPAddr.new("192.168.0.1/20")]

Routes:

  # Give url "http://domain.dom/adsense_crawler_for_private/login" for crawlers to log in
  # or directly "http://domain.dom/adsense_crawler_for_private/login?name=test_name&password=test_password"
  mount AdsenseCrawlerForPrivate::Engine => "/adsense_crawler_for_private"

Rendering etc usage: in controller define what to render for crawlers


def SomeController << ApplicationController

  before_filter :adsense_crawler_private_specific_page # normal authentication filters after this one

  def adsense_crawler_private_specific_page
    if AdsenseCrawlerForPrivate.login_check(cookies, request)
      # here info how to render page for crawler
      # e.g render 'crawler_ad_page'
      # or creating a dummy login info
      return false # so that normal authentication filters etc are not effective
    end
  end

  # Here would be rest of the controller

end

Or if you want only to check alongside other authentication you can call in your own authentication filters AdsenseCrawlerForPrivate.login_check(request)-method directly.

Testing your own stuff

You can test your filters by setting cookie in the same way as in AdsenseCrawlerLoginController#login .

If you have enabled ip_ranges option you have to make sure that the ip that tests use is enabled for crawlers.

test "here would be a test for logged crawler in functional tests"
  # Dummy login for crawler, These should be configured in initializers
  crawler_name="adsense_crawler"; crawler_password = "adsense_pass";
  @request.remote_addr = ip = "127.0.0.1"

  # In some frameworks cookies.signed would be enough. Some will need you to sign the cookie by yourself.
  # If you have a better way, let me know
  # same as cookies.signed[AdsenseCrawlerForPrivate.cookie_name] = AdsenseCrawlerForPrivate.cookie_hash(crawler_name, ip)
  @request.cookies[AdsenseCrawlerForPrivate.cookie_name] =
        ActiveSupport::MessageVerifier.new(Dummy::Application.config.secret_token).generate(
            AdsenseCrawlerForPrivate.cookie_str(crawler_name, crawler_password, 2.days.from_now, ip))


  #Normal test in here
  get :index
  assert_response :success
  assert response.body.include?("Hi normal crawler")
end

test "here would be a test for non-logged crawler"
  get :index
  assert_response :success
  assert response.body.include?("Hi normal user")
end

robots.txt

Remember to update robots.txt if you have previously forbidden adsense to crawl certain pages.

Requirements

Gem has been tested with ruby 1.8.7, 1.9.2 and Rails 3.1.

http://travis-ci.org/#!/holli/adsense_crawler_for_private

Support

Submit suggestions or feature requests as a GitHub Issue or Pull Request. Remember to update tests. Tests are quite extensive.

License

Released under the MIT license (http://www.opensource.org/licenses/mit-license.php)