OpenX

Description

A Ruby interface to the OpenX XML-RPC API. Used touchlocal 1.1.2 version as base for adding more API calls to OpenX API from developer.openx.org/api/ . It also works with v2 of OpenX API, especially that it now can pass localTZ to the OpenX API which will give back the correct statistics for the local time zone.

Synopsis

OpenX::Services::Base.configuration = {
  'username'  => 'admin',
  'password'  => 'password',
  'url'       => 'http://localhost/www/api/v2/xmlrpc/',
}

OpenX::Services::Agency.find(:all).each do |agency|
  puts agency.name

  # Look up publishers
  agency.publishers.each do |publisher|
    puts "-- #{publisher.name}"
  end

  # Create a publisher
  Publisher.create!(
    :agency       => agency,
    :name         => 'My Test Publisher',
    :contact_name => 'My Contact',
    :email        => '[email protected]',
    :username     => 'user',
    :password     => 'password'
  )
end

Requirements

  • ruby

Install

  • sudo gem install touchlocal-openx –source “gemcutter.org

  • add “require ‘openx’” to your code

  • Update your $HOME/.openx/credentials.yml file. Here is a sample:

    production:
      username: admin
      password: admin
      url: http://www.example.com/www/api/v2/xmlrpc/
      invocation_url: http://www.example.com/www/delivery/axmlrpc.php
    

The YAML file lists configuration for each environment. The gem uses the ‘production’ environment by default. Trailing slash is required on the ‘url’. ‘invocation_url’ is only used by the OpenX::Invocation methods to serve advertisements over XML-RPC

Ruby on Rails Integration

As common deployment scenarios for RoR projects dictates that you manage all of your dependent files from within your project, storing your credentials.yml file in the default location (as above) will not work. However, this is easily fixed.

Create your credentials.yml file in your ./config folder, and populate it with the necessary environment settings. It may in fact be more useful to name your file something like openx_credentials.yml to be explicit about the content.

Then, add your gem require line to the initialize block of the environment.rb:

config.gem "touchlocal-openx", 
  :lib => "openx", :source => "http://gemcutter.org"

You will of course need to install the gem, either manually or via rake gems:install

Finally, create a config/initializers/openx.rb and include the following:

require 'yaml'
OpenX::Services::Base.configuration = 
  YAML.load_file(File.join(Rails.root, 'config', 'credentials.yml'))[Rails.env]

Banner Keyword Support

Not all attributes of OpenX objects that can be set in the web interface are accessible via the API. A notable case of this is the ability to access Banner Keywords. While it seems to be a case of “We’ll add them as people need them,” this process is slower than one might expect; developer.openx.org/jira/browse/OX-4779 has been an open ticket since January 2009.

As TouchLocal required the ability to access Banner Keywords, the OpenX::Services::Banner object has the support for this attribute. If the server does not support the attribute, then setting it will have no effect, and it will return nil when retrieving it. To enable support on the server, you will need access to the server source, and the included php/openx-2.8.1-keywords.diff

Copy the openx-2.8.1-keywords.diff file to the root of the OpenX distribution on your server, and execute:

patch -p0 < openx-2.8.1-keywords.diff

This will patch the relevant OpenX API to allow access to the keyword attribute, meaning that now both your client and server support it. Happy days.

This patch has been tested on OpenX Server versions 2.8.1 and 2.8.2 at the time of writing.

License

(The MIT License)

Copyright © 2008:

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ‘Software’), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.