linkshare-oauth2-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (55) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +102 -0
  4. data/Rakefile +34 -0
  5. data/lib/linkshare.rb +62 -0
  6. data/lib/linkshare/advanced_reports.rb +45 -0
  7. data/lib/linkshare/advertiser_search.rb +16 -0
  8. data/lib/linkshare/coupon.rb +37 -0
  9. data/lib/linkshare/events.rb +7 -0
  10. data/lib/linkshare/link_locator.rb +55 -0
  11. data/lib/linkshare/product_search.rb +57 -0
  12. data/lib/linkshare/request.rb +12 -0
  13. data/lib/linkshare/response.rb +10 -0
  14. data/lib/linkshare/strategy.rb +38 -0
  15. data/lib/linkshare/version.rb +3 -0
  16. data/lib/tasks/linkshare_tasks.rake +4 -0
  17. data/test/dummy/README.rdoc +28 -0
  18. data/test/dummy/Rakefile +6 -0
  19. data/test/dummy/app/assets/javascripts/application.js +13 -0
  20. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  21. data/test/dummy/app/controllers/application_controller.rb +5 -0
  22. data/test/dummy/app/controllers/linkshare_controller.rb +8 -0
  23. data/test/dummy/app/helpers/application_helper.rb +2 -0
  24. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  25. data/test/dummy/bin/bundle +3 -0
  26. data/test/dummy/bin/rails +4 -0
  27. data/test/dummy/bin/rake +4 -0
  28. data/test/dummy/bin/setup +29 -0
  29. data/test/dummy/config.ru +4 -0
  30. data/test/dummy/config/application.rb +29 -0
  31. data/test/dummy/config/boot.rb +5 -0
  32. data/test/dummy/config/environment.rb +5 -0
  33. data/test/dummy/config/environments/development.rb +38 -0
  34. data/test/dummy/config/environments/production.rb +76 -0
  35. data/test/dummy/config/environments/test.rb +42 -0
  36. data/test/dummy/config/initializers/assets.rb +11 -0
  37. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  38. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  39. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  40. data/test/dummy/config/initializers/inflections.rb +16 -0
  41. data/test/dummy/config/initializers/mime_types.rb +4 -0
  42. data/test/dummy/config/initializers/session_store.rb +3 -0
  43. data/test/dummy/config/initializers/wrap_parameters.rb +9 -0
  44. data/test/dummy/config/locales/en.yml +23 -0
  45. data/test/dummy/config/routes.rb +57 -0
  46. data/test/dummy/config/secrets.yml +22 -0
  47. data/test/dummy/log/development.log +18 -0
  48. data/test/dummy/log/test.log +54 -0
  49. data/test/dummy/public/404.html +67 -0
  50. data/test/dummy/public/422.html +67 -0
  51. data/test/dummy/public/500.html +66 -0
  52. data/test/dummy/public/favicon.ico +0 -0
  53. data/test/linkshare_test.rb +16 -0
  54. data/test/test_helper.rb +19 -0
  55. metadata +179 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 4930165256ed7cc09ecaba18a76ec84c87a0e23d
4
+ data.tar.gz: 87eeb0821424fb5a60c57e29052c160eccc0396c
5
+ SHA512:
6
+ metadata.gz: fb2b10702d180772b1c1e15ce7f7e623be8c5ef54c3aa03fe0508e24d7787a79fb93e21f7699361b06cdb603fad9663cca214f73d795e5af5846d49d05377ed9
7
+ data.tar.gz: 3a6db6a21d4fb354d3fa78c35739326da9435dc38a381e1a048ecb2517fd30865a9d85f4ccfa5029d9cdf779718001acc33ea506509d3d1eb8aa0f3517a36ff9
@@ -0,0 +1,20 @@
1
+ Copyright 2015 Rudie Shahinian
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,102 @@
1
+ = Linkshare
2
+
3
+ A Ruby implementation of the Rakutan Linkshare API's. This gem provides access to the following APIs:
4
+ * [Advanced Reports - 1.0][advancedreport]
5
+ * [Coupons - 1.0][coupons]
6
+ * [Link Locator - 1.0][linklocator]
7
+ * [Product Search - 1.0][productsearch]
8
+ * [Advertiser Search - 1.0][advertisersearch]
9
+ * [Events - 1.0][events]
10
+
11
+ [advancedreport]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=AdvancedReports&version=1.0&provider=LinkShare
12
+ [coupons]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=Coupon&version=1.0&provider=LinkShare
13
+ [linklocator]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=LinkLocator&version=1.0&provider=LinkShare
14
+ [prsoductsearch]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=ProductSearch&version=1.0&provider=LinkShare
15
+ [advancedsearch]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=AdvertiserSearch&version=1.0&provider=LinkShare
16
+ [event]: https://developers.rakutenmarketing.com/subscribe/apis/info?name=Events&version=1.0&provider=LinkShare
17
+
18
+ ## Before You Begin
19
+
20
+ You will require an account with Linkshare, subscriptions to the API's and OAuth2 credentials which can be obtained by followng the instructions in the [Aquiring your Access Token][accesstoken] document
21
+
22
+ [accesstoken]: https://developers.rakutenmarketing.com/console/registry/resource/_system/governance/apimgt/applicationdata/provider/RakutenMarketing/artifacts/API_Developer_Portal-Acquiring_Your_Access_Token_Guide.pdf
23
+
24
+ You will need the following peices of information:
25
+ * AccountID (SID or MID)
26
+ * Account Username
27
+ * Account Password
28
+ * Consumer Key
29
+ * Consumer Secret
30
+ * Security Token
31
+
32
+ ## Installation
33
+
34
+ To install **linkshare**, run the following command:
35
+
36
+ ```
37
+ gem install linkshare
38
+ ```
39
+
40
+ Or if you are using **bundler**, add
41
+
42
+ ```
43
+ gem 'linkshare'
44
+ ```
45
+
46
+ to your `Gemfile`, and run `bundle install`
47
+
48
+ Then add the following code to an initializer:
49
+ ```
50
+ require 'linkshare'
51
+ Linkshare.consumer_key = "#########################"
52
+ Linkshare.consumer_secret = "#########################"
53
+ Linkshare.sid = "1234567"
54
+ Linkshare.username = "username"
55
+ Linkshare.password = "password"
56
+ Linkshare.security_token = "##################################################################"
57
+ ```
58
+
59
+ ## Usage Examples
60
+
61
+ ```ruby
62
+ require 'linkshare'
63
+
64
+ # Coupons API
65
+ coupn = Linkshare.coupon
66
+ coupn.fetch
67
+ coupn.getCoupons
68
+
69
+ ...
70
+
71
+ # Link Locator API
72
+ merchants = Linkshare.linklocator.getMerchByAppStatus(:approved)
73
+
74
+ ...
75
+
76
+ # Advanced Reports API
77
+ report = Linkshare.advancedreports.fetchReports(6, '20150101', '20160101')
78
+
79
+ ...
80
+
81
+ # Product Search API
82
+ products = Linkshare.productsearch
83
+ products.addKeyword('Toy','keyword')
84
+ products.getProducts
85
+
86
+ ...
87
+
88
+ # Events API
89
+ events = Linkshare.events.getEvents
90
+
91
+ ...
92
+
93
+ # Advertiser Search API
94
+ advertiser = Linkshare.advertisersearch.getAdvertisers ("Example Store")
95
+ ```
96
+
97
+
98
+ ## License
99
+ Copyright (c) 2015 Rudie Shahinian. See [LICENSE][] for
100
+ details.
101
+
102
+ [license]: LICENSE.md
@@ -0,0 +1,34 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'Linkshare'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+
21
+
22
+ Bundler::GemHelper.install_tasks
23
+
24
+ require 'rake/testtask'
25
+
26
+ Rake::TestTask.new(:test) do |t|
27
+ t.libs << 'lib'
28
+ t.libs << 'test'
29
+ t.pattern = 'test/**/*_test.rb'
30
+ t.verbose = false
31
+ end
32
+
33
+
34
+ task default: :test
@@ -0,0 +1,62 @@
1
+ require 'oauth2'
2
+ require 'base64'
3
+ require 'json'
4
+ require 'linkshare/request'
5
+ require 'linkshare/response'
6
+ require 'linkshare/strategy'
7
+ require 'linkshare/coupon'
8
+ require 'linkshare/link_locator'
9
+ require 'linkshare/advanced_reports'
10
+ require 'linkshare/product_search'
11
+ require 'linkshare/events'
12
+ require 'linkshare/advertiser_search'
13
+ module Linkshare
14
+ API_URIS = {
15
+ coupon: "https://api.rakutenmarketing.com/coupon/1.0",
16
+ link_locator: "https://api.rakutenmarketing.com/linklocator/1.0",
17
+ advanced_reports: "https://api.rakutenmarketing.com/advancedreports/1.0",
18
+ product_search: "https://api.rakutenmarketing.com/productsearch/1.0",
19
+ events: "https://api.rakutenmarketing.com/events/1.0/transactions",
20
+ advertiser_search: "https://api.rakutenmarketing.com/advertisersearch/1.0"
21
+ }
22
+ SITE = "https://api.rakutenmarketing.com/"
23
+ TOKEN_URL = "token/"
24
+
25
+ class << self
26
+ attr_accessor :consumer_key, :consumer_secret, :sid, :username, :password, :security_token
27
+ end
28
+
29
+ def self.token
30
+ @token ||= Linkshare::Strategy.new(client).get_token(Linkshare.username, Linkshare.password, Linkshare.sid);
31
+ end
32
+
33
+ def self.coupon
34
+ @coupon ||= Linkshare::Coupon.new
35
+ end
36
+
37
+ def self.linklocator
38
+ @linklocator ||= Linkshare::LinkLocator.new
39
+ end
40
+
41
+ def self.productsearch
42
+ @productsearch ||= Linkshare::ProductSearch.new
43
+ end
44
+
45
+ def self.advancedreports
46
+ @advancedreports ||= Linkshare::AdvancedReports.new
47
+ end
48
+
49
+ def self.advertisersearch
50
+ @advertisersearch ||= Linkshare::AdvertiserSearch.new
51
+ end
52
+
53
+ def self.events
54
+ @events ||= Linkshare::Events.new
55
+ end
56
+
57
+ protected
58
+
59
+ def self.client
60
+ @client ||= OAuth2::Client.new(Linkshare.consumer_key, Linkshare.consumer_secret, :site => SITE, :token_url => TOKEN_URL)
61
+ end
62
+ end
@@ -0,0 +1,45 @@
1
+ module Linkshare
2
+ class AdvancedReports
3
+ def initilize()
4
+ @reportsCSV = ''
5
+ @reportsRows = []
6
+ @cols = []
7
+ end
8
+ def getCSV
9
+ @reportsCSV
10
+ end
11
+
12
+ def getReports
13
+ @reportsRows
14
+ end
15
+
16
+ def fetchReports(reportid, bdate, edate, nid = '', mid = '')
17
+ token = Linkshare.security_token
18
+ params = {
19
+ 'token' => token,
20
+ 'reportid' => reportid,
21
+ 'bdate' => bdate,
22
+ 'edate' => edate
23
+ }
24
+ unless nid == ''
25
+ params.merge({ 'nid' => nid})
26
+ end
27
+ unless mid == ''
28
+ params.merge({ 'mid' => mid})
29
+ end
30
+ @reportsRows = []
31
+ @reportsCSV = Linkshare::Request.get(Linkshare::API_URIS[:advanced_reports], :params => params).body
32
+ reportsrows = @reportsCSV.split(/\n/)
33
+ @cols = reportsrows[0].split(/,/)
34
+ reportsrows.shift
35
+ reportsrows.each { |row|
36
+ r = {}
37
+ row.split(/,/).each_with_index { | o, i|
38
+ r[@cols[i]]=o
39
+ }
40
+ @reportsRows.push(r)
41
+ }
42
+ @reportsRows
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,16 @@
1
+ module Linkshare
2
+ class AdvertiserSearch
3
+ def getAdvertisers(merchantname = nil)
4
+ urlparam = ''
5
+ if merchantname != nil
6
+ urlparam = '?merchantname='+merchantname
7
+ end
8
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:advertiser_search]+urlparam))
9
+ if l['result'].has_key?('midlist')
10
+ l['result']['midlist']['merchant']
11
+ else
12
+ return {}
13
+ end
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,37 @@
1
+ module Linkshare
2
+ class Coupon
3
+ def initialize (query = {})
4
+ @totalMatches = 0
5
+ @totalPages = 0
6
+ @pageNumberRequested = 0
7
+ @coupons = []
8
+ @query = query
9
+ end
10
+ def getTotalMatches()
11
+ @totalMatches
12
+ end
13
+
14
+ def getTotalPages()
15
+ @totalPages
16
+ end
17
+
18
+ def getPageNumberRequested()
19
+ @pageNumberRequested
20
+ end
21
+
22
+ def getCoupons()
23
+ @coupons
24
+ end
25
+ def query(query)
26
+ @query = query
27
+ end
28
+
29
+ def fetch()
30
+ data = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:coupon], :params => @query))
31
+ @totalMatches = data["couponfeed"]["TotalMatches"]
32
+ @totalPages = data["couponfeed"]["TotalPages"]
33
+ @pageNumberRequested = data["couponfeed"]["PageNumberRequested"]
34
+ @coupons = data["couponfeed"]["link"]
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,7 @@
1
+ module Linkshare
2
+ class Events
3
+ def getEvents(process_date_start = nil, process_date_end=nil, transaction_date_start=nil, transaction_date_end=nil, limit="1000", page="1")
4
+ Linkshare::Response.json_parse(Linkshare::Request.get(Linkshare::API_URIS[:events], {:headers => {'Accept' => 'text/json'}}))
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,55 @@
1
+ module Linkshare
2
+ class LinkLocator
3
+ STATUS = {
4
+ :approved => "approved",
5
+ :wait => "wait",
6
+ :approval_extended => "approval extended",
7
+ :temp_removed => "temp removed",
8
+ :temp_rejected => "temp rejected",
9
+ :perm_removed => "perm removed",
10
+ :perm_rejected => "perm rejected",
11
+ :self_removed => "self removed"
12
+ }
13
+ def getMerchByID(mid)
14
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getMerchByID/'+mid.to_s))
15
+ l['getMerchByIDResponse']['return']
16
+ end
17
+
18
+ def getMerchByName(name)
19
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getMerchByName/'+name))
20
+ l['getMerchByNameResponse']['return']
21
+ end
22
+
23
+ def getMerchByCategory(cat)
24
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getMerchByCategory/'+cat.to_s))
25
+ l['getMerchByCategoryResponse']['return']
26
+ end
27
+
28
+ def getMerchByAppStatus(statusID = STATUS[:approved])
29
+ l = l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getMerchByAppStatus/' + STATUS[statusID]))
30
+ l['getMerchByAppStatusResponse']['return']
31
+ end
32
+
33
+ def getProductLinks(mid, creativeCategory = '0', page = '1')
34
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getProductLinks/'+mid.to_s+'/'+creativeCategory.to_s+'/-1/'+page.to_s))
35
+ l['getProductLinksResponse']['return']
36
+ end
37
+
38
+ def getDRMLinks(mid, creativeCategory = '0', startDate = '', endDate = '', page = '1')
39
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getDRMLinks/'+mid.to_s+'/'+creativeCategory.to_s+'/'+startDate+'/'+endDate+'/-1/'+page.to_s))
40
+ l['getDRMLinksResponse']['return']
41
+ end
42
+
43
+ def getBannerLinks(mid, creativeCategory = '0', startDate = '', endDate = '', size = '-1', page = '1')
44
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getBannerLinks/'+mid.to_s+'/'+creativeCategory.to_s+'/'+startDate+'/'+endDate+'/'+size.to_s+'/-1/'+page.to_s))
45
+ l['getBannerLinksResponse']['return']
46
+ end
47
+
48
+ def getTextLinks(mid, creativeCategory = '0', startDate = '', endDate = '', page = '1')
49
+ l = Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:link_locator]+'/getTextLinks/'+mid.to_s+'/'+creativeCategory.to_s+'/'+startDate+'/'+endDate+'/-1/'+page.to_s))
50
+ l['getTextLinksResponse']['return']
51
+ end
52
+
53
+
54
+ end
55
+ end
@@ -0,0 +1,57 @@
1
+ module Linkshare
2
+ class ProductSearch
3
+ def initialize
4
+ @keywords = []
5
+ @sorts = []
6
+ @mid = nil
7
+ @cat = nil
8
+ @max = "20"
9
+ @pagenumber = "1"
10
+ end
11
+ def addKeyword(keyword, type = "keyword")
12
+ @keywords.push({keyword: keyword, type: type})
13
+ end
14
+ def clearKeywords
15
+ @keywords = []
16
+ end
17
+ def addSort(sort, type = "desc")
18
+ @sorts.push({sort: sort, type: type})
19
+ end
20
+ def clearSorts
21
+ @sorts = []
22
+ end
23
+ def setCat(cat)
24
+ @cat = cat
25
+ end
26
+ def setMaxResults(maxResults = 20)
27
+ @max = maxResults.to_s
28
+ end
29
+ def setPageNumber(pagenumber = 1)
30
+ @pagenumber = pagenumber.to_s
31
+ end
32
+ def setMid(mid)
33
+ @mid = mid.to_s
34
+ end
35
+
36
+ def getProducts()
37
+ params = '?'
38
+ @keywords.each_with_index {|k, i|
39
+ if i != 0
40
+ params += "&"
41
+ end
42
+ params += k[:type]+"="+k[:keyword]
43
+ }
44
+ @sorts.each {|s| params += "&sort="+s[:sort]+"&sorttype="+s[:type]}
45
+ if @cat != nil
46
+ params += '&cat='+@cat
47
+ end
48
+ if @mid != nil
49
+ params += '&mid='+@mid
50
+ end
51
+ params += '&max='+@max
52
+ params += '&pagenumber='+@pagenumber
53
+ Linkshare::Response.parse(Linkshare::Request.get(Linkshare::API_URIS[:product_search]+params))
54
+ # ap Linkshare::Request.get('https://api.rakutenmarketing.com/productsearch/1.0?keyword=toy&max=20&pagenumber=1')
55
+ end
56
+ end
57
+ end