linkshare 0.0.9
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.
- data/.gitignore +4 -0
- data/Gemfile +4 -0
- data/README.rdoc +18 -0
- data/Rakefile +2 -0
- data/lib/linkshare.rb +6 -0
- data/lib/linkshare/base.rb +84 -0
- data/lib/linkshare/commission.rb +15 -0
- data/lib/linkshare/version.rb +3 -0
- data/linkshare.gemspec +23 -0
- metadata +101 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
linkshare
|
2
|
+
|
3
|
+
LinkShare HTTP web service interface
|
4
|
+
|
5
|
+
Currently you will need a ~/.linkshare.yml to use this.
|
6
|
+
|
7
|
+
Retrieves data from LinkShare via HTTP web service and returns simple objects:
|
8
|
+
|
9
|
+
[Example]
|
10
|
+
|
11
|
+
Linkshare::Commission.find("bdate" =>"20110401", "edate" => "20110415")
|
12
|
+
|
13
|
+
[Example YAML]
|
14
|
+
|
15
|
+
user_id: test_user
|
16
|
+
pass: secure_password
|
17
|
+
|
18
|
+
Methods accept the same parameters as the LinkShare API.
|
data/Rakefile
ADDED
data/lib/linkshare.rb
ADDED
@@ -0,0 +1,84 @@
|
|
1
|
+
module Linkshare
|
2
|
+
class Base
|
3
|
+
include HTTParty
|
4
|
+
format :xml
|
5
|
+
|
6
|
+
@@credentials = {}
|
7
|
+
@@default_params = {}
|
8
|
+
|
9
|
+
def initialize(params)
|
10
|
+
raise ArgumentError, "Init with a Hash; got #{params.class} instead" unless params.is_a?(Hash)
|
11
|
+
|
12
|
+
params.each do |key, val|
|
13
|
+
instance_variable_set("@#{key}".intern, val)
|
14
|
+
instance_eval " class << self ; attr_reader #{key.intern.inspect} ; end "
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def user_id=(id)
|
19
|
+
@@credentials['user_id'] = id.to_s
|
20
|
+
end
|
21
|
+
|
22
|
+
def pass=(pass)
|
23
|
+
@@credentials['pass'] = pass.to_s
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
class << self
|
28
|
+
def base_url
|
29
|
+
"http://cli.linksynergy.com/"
|
30
|
+
end
|
31
|
+
|
32
|
+
def validate_params!(provided_params, available_params, default_params = {})
|
33
|
+
params = default_params.merge(provided_params)
|
34
|
+
invalid_params = params.select{|k,v| !available_params.include?(k.to_s)}.map{|k,v| k}
|
35
|
+
raise ArgumentError.new("Invalid parameters: #{invalid_params.join(', ')}") if invalid_params.length > 0
|
36
|
+
end
|
37
|
+
|
38
|
+
def get_service(path, query)
|
39
|
+
query.keys.each{|k| query[k.to_s] = query.delete(k)}
|
40
|
+
query.merge!({'cuserid' => credentials['user_id'], 'cpi' => credentials['pass']})
|
41
|
+
|
42
|
+
results = []
|
43
|
+
|
44
|
+
begin
|
45
|
+
response = get(path, :query => query, :timeout => 30)
|
46
|
+
rescue Timeout::Error
|
47
|
+
nil
|
48
|
+
end
|
49
|
+
|
50
|
+
unless validate_response(response)
|
51
|
+
str = response.body #+ "1x1\t36342\tAdvertiser Y\t2163\t1/31/2002\t8:58\t32\t7.99\t1\t0.39\t2/1/2002\t12:46" #dummy data
|
52
|
+
str = str.gsub(" \t","\t").gsub("\t\n", "\n").gsub(" ", "_").gsub("($)", "").downcase!
|
53
|
+
|
54
|
+
results = FasterCSV.parse(str, {:col_sep => "\t", :row_sep => "\n", :headers => true})
|
55
|
+
end
|
56
|
+
|
57
|
+
results.map{|r| self.new(r.to_hash)}
|
58
|
+
end # get
|
59
|
+
|
60
|
+
def credentials
|
61
|
+
unless @@credentials && @@credentials.length > 0
|
62
|
+
# there is no offline or test mode for CJ - so I won't include any credentials in this gem
|
63
|
+
config_file = ["config/linkshare.yml", File.join(ENV['HOME'], '.linkshare.yaml')].select{|f| File.exist?(f)}.first
|
64
|
+
|
65
|
+
unless File.exist?(config_file)
|
66
|
+
warn "Warning: config/linkshare.yaml does not exist. Put your CJ developer key and website ID in ~/.linkshare.yml to enable live testing."
|
67
|
+
else
|
68
|
+
@@credentials = YAML.load(File.read(config_file))
|
69
|
+
end
|
70
|
+
end
|
71
|
+
@@credentials
|
72
|
+
end # credentails
|
73
|
+
|
74
|
+
def validate_response(response)
|
75
|
+
raise ArgumentError, "There was an error connecting to LinkShare's reporting server." if response.body.include?("REPORTING ERROR")
|
76
|
+
end
|
77
|
+
|
78
|
+
def first(params)
|
79
|
+
find(params).first
|
80
|
+
end
|
81
|
+
|
82
|
+
end # self
|
83
|
+
end # Base
|
84
|
+
end # Linkshare
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Linkshare
|
2
|
+
class Commission < Base
|
3
|
+
class << self
|
4
|
+
def service_url
|
5
|
+
base_url + "cli/publisher/reports/downloadReport.php"
|
6
|
+
end
|
7
|
+
|
8
|
+
def find(params = {})
|
9
|
+
validate_params!(params, %w{bdate edate eid nid})
|
10
|
+
get_service(service_url, params)
|
11
|
+
end
|
12
|
+
|
13
|
+
end # << self
|
14
|
+
end # class
|
15
|
+
end # module
|
data/linkshare.gemspec
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "linkshare/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "linkshare"
|
7
|
+
s.version = Linkshare::VERSION
|
8
|
+
s.platform = Gem::Platform::RUBY
|
9
|
+
s.authors = ["Ian Ehlert"]
|
10
|
+
s.email = ["ian.ehlert@tstmedia.com"]
|
11
|
+
s.homepage = ""
|
12
|
+
s.summary = %q{Ruby gem to hit the Linkshare report api.}
|
13
|
+
s.description = %q{Ruby gem to hit the Linkshare report api.}
|
14
|
+
|
15
|
+
s.rubyforge_project = "linkshare"
|
16
|
+
|
17
|
+
s.files = `git ls-files`.split("\n")
|
18
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
s.add_dependency(%q<httparty>)
|
22
|
+
s.add_dependency(%q<fastercsv>)
|
23
|
+
end
|
metadata
ADDED
@@ -0,0 +1,101 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: linkshare
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 13
|
5
|
+
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 9
|
10
|
+
version: 0.0.9
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Ian Ehlert
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-11-26 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: httparty
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
none: false
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
32
|
+
type: :runtime
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: fastercsv
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
38
|
+
none: false
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
46
|
+
type: :runtime
|
47
|
+
version_requirements: *id002
|
48
|
+
description: Ruby gem to hit the Linkshare report api.
|
49
|
+
email:
|
50
|
+
- ian.ehlert@tstmedia.com
|
51
|
+
executables: []
|
52
|
+
|
53
|
+
extensions: []
|
54
|
+
|
55
|
+
extra_rdoc_files: []
|
56
|
+
|
57
|
+
files:
|
58
|
+
- .gitignore
|
59
|
+
- Gemfile
|
60
|
+
- README.rdoc
|
61
|
+
- Rakefile
|
62
|
+
- lib/linkshare.rb
|
63
|
+
- lib/linkshare/base.rb
|
64
|
+
- lib/linkshare/commission.rb
|
65
|
+
- lib/linkshare/version.rb
|
66
|
+
- linkshare.gemspec
|
67
|
+
homepage: ""
|
68
|
+
licenses: []
|
69
|
+
|
70
|
+
post_install_message:
|
71
|
+
rdoc_options: []
|
72
|
+
|
73
|
+
require_paths:
|
74
|
+
- lib
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
76
|
+
none: false
|
77
|
+
requirements:
|
78
|
+
- - ">="
|
79
|
+
- !ruby/object:Gem::Version
|
80
|
+
hash: 3
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
85
|
+
none: false
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
hash: 3
|
90
|
+
segments:
|
91
|
+
- 0
|
92
|
+
version: "0"
|
93
|
+
requirements: []
|
94
|
+
|
95
|
+
rubyforge_project: linkshare
|
96
|
+
rubygems_version: 1.8.10
|
97
|
+
signing_key:
|
98
|
+
specification_version: 3
|
99
|
+
summary: Ruby gem to hit the Linkshare report api.
|
100
|
+
test_files: []
|
101
|
+
|