ebay-ruby 0.3.3 → 0.3.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +74 -35
- data/lib/ebay/browse.rb +13 -15
- data/lib/ebay/config.rb +1 -1
- data/lib/ebay/finding.rb +7 -1
- data/lib/ebay/merchandising.rb +6 -0
- data/lib/ebay/requestable.rb +28 -0
- data/lib/ebay/shopping.rb +8 -2
- data/lib/ebay/version.rb +1 -1
- metadata +36 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bbadae6120cf8748d6f33d847c9746199717facc4734db1d81719a37393886bc
|
4
|
+
data.tar.gz: d457466d75675c9fb698d9fa8feac2bb773d4a89be43f698ab22598bada96839
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 98aea0105ee22960dece81289809e60048afbc5a68bd17bbf3ef2d54c6f0c139b5551b0f0e04293d49d471a2bd7d244d285f8fcc76a8f8b35eb5eaef05b6900c
|
7
|
+
data.tar.gz: 769e216aa765b9850aa3192e82668bc9a79bc69e47b34e54799ecb897b4bbbb38a3750d237a841ce3f3abc2556b9b0f77017801ea97229bb3521053f52354d7e
|
data/README.md
CHANGED
@@ -2,81 +2,120 @@
|
|
2
2
|
|
3
3
|
[![Build](https://github.com/hakanensari/ebay-ruby/workflows/build/badge.svg)](https://github.com/hakanensari/ebay-ruby/actions)
|
4
4
|
|
5
|
-
|
5
|
+
This library provides a wrapper to the [eBay APIs].
|
6
6
|
|
7
|
-
##
|
7
|
+
## Getting started
|
8
|
+
|
9
|
+
You can instantiate API requests using shorthand class methods defined on `Ebay`.
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
Ebay.finding # returns a new Ebay::Finding instance
|
13
|
+
```
|
8
14
|
|
9
|
-
###
|
15
|
+
### Keys
|
10
16
|
|
11
|
-
|
17
|
+
eBay APIs require [developer keys].
|
12
18
|
|
13
|
-
|
19
|
+
You can provide these globally with the environment variables `EBAY_APP_ID`, `EBAY_DEV_ID`, and `EBAY_CERT_ID`.
|
14
20
|
|
15
|
-
|
21
|
+
If you prefer not to use environment variables, you can provide your keys globally with:
|
16
22
|
|
17
23
|
```ruby
|
18
|
-
|
19
|
-
|
24
|
+
Ebay.configure do |config|
|
25
|
+
config.app_id = 'YOUR APP ID'
|
26
|
+
config.dev_id = 'YOUR DEV ID'
|
27
|
+
config.cert_id = 'YOUR CERT ID'
|
28
|
+
end
|
29
|
+
```
|
20
30
|
|
21
|
-
|
22
|
-
request = Ebay::Browse.new(campaign_id: '123',
|
23
|
-
country: 'US',
|
24
|
-
zip: '19406',
|
25
|
-
access_token: access_token)
|
26
|
-
response = @request.search(q: 'iphone')
|
31
|
+
Finally, you can provide your keys individually to the request when instantiating it. This is what you will want to do if you are using multiple sets of credentials.
|
27
32
|
|
28
|
-
|
33
|
+
Please note that each API names keys differently.
|
34
|
+
|
35
|
+
```ruby
|
36
|
+
request = Ebay.finding(security_appname: 'YOUR APP ID')
|
29
37
|
```
|
30
38
|
|
31
|
-
|
39
|
+
In the examples below, we will assume we are providing our keys with environment variables.
|
32
40
|
|
33
|
-
|
41
|
+
### Parsing a response
|
34
42
|
|
35
|
-
|
43
|
+
The eBay APIs return responses in XML or JSON format.
|
36
44
|
|
37
|
-
|
45
|
+
You can override the default format of an API when instantiating the request.
|
38
46
|
|
39
47
|
```ruby
|
40
|
-
require '
|
48
|
+
require 'json'
|
41
49
|
|
42
|
-
|
50
|
+
# the Finding API returns XML by default
|
51
|
+
request = Ebay.finding(response_data_format: 'JSON')
|
43
52
|
response = request.find_items_by_keywords('iphone')
|
44
53
|
|
45
54
|
JSON.parse(response)
|
46
55
|
```
|
47
56
|
|
48
|
-
|
49
|
-
|
50
|
-
Retrieve public items and user data to create shopping and marketing applications.
|
57
|
+
## Usage
|
51
58
|
|
52
|
-
|
59
|
+
### [Browse API]
|
53
60
|
|
54
|
-
The
|
61
|
+
The Browse API allows your buyers to search eBay items by keyword and category. It also allows them to view and add items to their eBay shopping cart.
|
55
62
|
|
56
63
|
```ruby
|
57
|
-
require 'ebay/
|
64
|
+
require 'ebay/browse'
|
65
|
+
require 'ebay/oauth/client_credentials_grant'
|
58
66
|
|
59
|
-
|
60
|
-
|
67
|
+
access_token = Oauth::ClientCredentialsGrant.new.mint_access_token
|
68
|
+
request = Ebay.browse(campaign_id: '123', country: 'US', zip: '19406',
|
69
|
+
access_token: access_token)
|
70
|
+
response = request.search(q: 'iphone')
|
71
|
+
```
|
61
72
|
|
62
|
-
|
73
|
+
### [Finding API]
|
74
|
+
|
75
|
+
The Finding API lets you search and browse for items listed on eBay and provides useful metadata to refine searches.
|
76
|
+
|
77
|
+
```ruby
|
78
|
+
require 'ebay/finding'
|
79
|
+
|
80
|
+
request = Ebay.finding
|
81
|
+
response = request.find_items_by_keywords('iphone')
|
63
82
|
```
|
64
83
|
|
65
|
-
|
84
|
+
### [Merchandising API]
|
66
85
|
|
67
|
-
The Merchandising API
|
86
|
+
The Merchandising API retrieves information about products or item listings on eBay to help you sell more merchandise to eBay buyers.
|
68
87
|
|
69
88
|
```ruby
|
70
89
|
require 'ebay/merchandising'
|
71
90
|
|
72
|
-
request = Ebay::Merchandising.new
|
91
|
+
request = Ebay::Merchandising.new
|
73
92
|
response = request.get_most_watched_items
|
93
|
+
```
|
74
94
|
|
75
|
-
|
95
|
+
### [Shopping API]
|
96
|
+
|
97
|
+
The eBay Shopping API makes it easy to search for things on eBay.
|
98
|
+
|
99
|
+
```ruby
|
100
|
+
require 'ebay/shopping'
|
101
|
+
|
102
|
+
request = Ebay::Shopping.new
|
103
|
+
response = request.find_products('QueryKeywords' => 'tolkien')
|
104
|
+
```
|
105
|
+
|
106
|
+
## Development
|
107
|
+
|
108
|
+
To write requests and responses to a logger, use the logging feature:
|
109
|
+
|
110
|
+
```ruby
|
111
|
+
require 'logger'
|
112
|
+
|
113
|
+
request = request.use(logging: {logger: Logger.new(STDOUT)})
|
76
114
|
```
|
77
115
|
|
78
116
|
[eBay APIs]: https://developer.ebay.com/docs
|
117
|
+
[developer keys]: https://developer.ebay.com/my/keys
|
79
118
|
[Browse API]: https://developer.ebay.com/api-docs/buy/browse/static/overview.html
|
80
119
|
[Finding API]: https://developer.ebay.com/Devzone/finding/Concepts/FindingAPIGuide.html
|
81
|
-
[Shopping API]: https://developer.ebay.com/Devzone/shopping/docs/Concepts/ShoppingAPIGuide.html
|
82
120
|
[Merchandising API]: https://developer.ebay.com/Devzone/merchandising/docs/Concepts/merchandisingAPIGuide.html
|
121
|
+
[Shopping API]: https://developer.ebay.com/Devzone/shopping/docs/Concepts/ShoppingAPIGuide.html
|
data/lib/ebay/browse.rb
CHANGED
@@ -5,11 +5,15 @@ require 'base64'
|
|
5
5
|
require 'ebay/config'
|
6
6
|
require 'ebay/requestable'
|
7
7
|
|
8
|
+
# Ruby wrapper to the eBay APIs
|
8
9
|
module Ebay
|
9
|
-
#
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
# Returns a {Ebay::Browse#initialize Browse API} instance
|
11
|
+
def self.browse(**params)
|
12
|
+
Browse.new(**params)
|
13
|
+
end
|
14
|
+
|
15
|
+
# The Browse API allows your buyers to search eBay items by keyword and category. It also allows them to view and add
|
16
|
+
# items to their eBay shopping cart.
|
13
17
|
#
|
14
18
|
# @see https://developer.ebay.com/api-docs/buy/browse/overview.html
|
15
19
|
class Browse
|
@@ -39,8 +43,7 @@ module Ebay
|
|
39
43
|
# @param [String] campaign_id
|
40
44
|
# @param [String] reference_id
|
41
45
|
# @param [String] access_token
|
42
|
-
def initialize(campaign_id:, reference_id: nil, country: nil, zip: nil,
|
43
|
-
access_token: nil)
|
46
|
+
def initialize(campaign_id:, reference_id: nil, country: nil, zip: nil, access_token: nil)
|
44
47
|
@campaign_id = campaign_id
|
45
48
|
@reference_id = reference_id
|
46
49
|
@country = country
|
@@ -48,8 +51,7 @@ module Ebay
|
|
48
51
|
@access_token = access_token
|
49
52
|
end
|
50
53
|
|
51
|
-
# Searches for eBay items by various query parameters and retrieves
|
52
|
-
# summaries of the item
|
54
|
+
# Searches for eBay items by various query parameters and retrieves summaries of the item
|
53
55
|
#
|
54
56
|
# @param [Hash] params
|
55
57
|
# @return [HTTP::Response]
|
@@ -115,8 +117,7 @@ module Ebay
|
|
115
117
|
def check_compatibility(item_id, marketplace_id, compatibility_properties)
|
116
118
|
url = build_url('item', item_id, 'check_compatibility')
|
117
119
|
headers = build_headers
|
118
|
-
headers.update('X-EBAY-C-MARKETPLACE-ID' => marketplace_id,
|
119
|
-
'CONTENT-TYPE' => 'application/json')
|
120
|
+
headers.update('X-EBAY-C-MARKETPLACE-ID' => marketplace_id, 'CONTENT-TYPE' => 'application/json')
|
120
121
|
body = JSON.dump('compatibilityProperties' => compatibility_properties)
|
121
122
|
|
122
123
|
http.headers(headers).post(url, body: body)
|
@@ -152,14 +153,11 @@ module Ebay
|
|
152
153
|
def build_ebay_enduser_context
|
153
154
|
{ 'affiliateCampaignId' => campaign_id,
|
154
155
|
'affiliateReferenceId' => reference_id,
|
155
|
-
'contextualLocation' => build_contextual_location }
|
156
|
-
.compact.map { |kv| kv.join('=') }.join(',')
|
156
|
+
'contextualLocation' => build_contextual_location }.compact.map { |kv| kv.join('=') }.join(',')
|
157
157
|
end
|
158
158
|
|
159
159
|
def build_contextual_location
|
160
|
-
string = { 'country' => country, 'zip' => zip }
|
161
|
-
.compact.map { |kv| kv.join('=') }.join(',')
|
162
|
-
|
160
|
+
string = { 'country' => country, 'zip' => zip }.compact.map { |kv| kv.join('=') }.join(',')
|
163
161
|
CGI.escape(string) if string
|
164
162
|
end
|
165
163
|
end
|
data/lib/ebay/config.rb
CHANGED
data/lib/ebay/finding.rb
CHANGED
@@ -3,8 +3,14 @@
|
|
3
3
|
require 'ebay/config'
|
4
4
|
require 'ebay/requestable'
|
5
5
|
|
6
|
+
# Ruby wrapper to the eBay APIs
|
6
7
|
module Ebay
|
7
|
-
#
|
8
|
+
# Returns a {Ebay::Finding#initialize Finding API} instance
|
9
|
+
def self.finding(**params)
|
10
|
+
Finding.new(**params)
|
11
|
+
end
|
12
|
+
|
13
|
+
# The Finding API lets you search and browse for items listed on eBay and
|
8
14
|
# provides useful metadata to refine searches.
|
9
15
|
#
|
10
16
|
# @see https://developer.ebay.com/Devzone/finding/Concepts/MakingACall.html
|
data/lib/ebay/merchandising.rb
CHANGED
@@ -3,7 +3,13 @@
|
|
3
3
|
require 'ebay/config'
|
4
4
|
require 'ebay/requestable'
|
5
5
|
|
6
|
+
# Ruby wrapper to the eBay APIs
|
6
7
|
module Ebay
|
8
|
+
# Returns a {Ebay::Merchandising#initialize Merchandising API} instance
|
9
|
+
def self.merchandising(**params)
|
10
|
+
Merchandising.new(**params)
|
11
|
+
end
|
12
|
+
|
7
13
|
# Retrieves information about products or item listings on eBay to help you
|
8
14
|
# sell more merchandise to eBay buyers
|
9
15
|
#
|
data/lib/ebay/requestable.rb
CHANGED
@@ -37,5 +37,33 @@ module Ebay
|
|
37
37
|
@endpoint = endpoint.sub('ebay', 'sandbox.ebay')
|
38
38
|
self
|
39
39
|
end
|
40
|
+
|
41
|
+
# Flags request as persistent
|
42
|
+
#
|
43
|
+
# @param [Integer] timeout
|
44
|
+
# @return [self]
|
45
|
+
def persistent(timeout: 5)
|
46
|
+
self.http = http.persistent(endpoint, timeout: timeout)
|
47
|
+
self
|
48
|
+
end
|
49
|
+
|
50
|
+
# @!method use(*features)
|
51
|
+
# Turns on {https://github.com/httprb/http HTTP} features
|
52
|
+
#
|
53
|
+
# @param features
|
54
|
+
# @return [self]
|
55
|
+
#
|
56
|
+
# @!method via(*proxy)
|
57
|
+
# Makes a request through an HTTP proxy
|
58
|
+
#
|
59
|
+
# @param [Array] proxy
|
60
|
+
# @raise [HTTP::Request::Error] if HTTP proxy is invalid
|
61
|
+
# @return [self]
|
62
|
+
%i[timeout via through headers use].each do |method_name|
|
63
|
+
define_method(method_name) do |*args, &block|
|
64
|
+
self.http = http.send(method_name, *args, &block)
|
65
|
+
self
|
66
|
+
end
|
67
|
+
end
|
40
68
|
end
|
41
69
|
end
|
data/lib/ebay/shopping.rb
CHANGED
@@ -3,7 +3,13 @@
|
|
3
3
|
require 'ebay/config'
|
4
4
|
require 'ebay/requestable'
|
5
5
|
|
6
|
+
# Ruby wrapper to the eBay APIs
|
6
7
|
module Ebay
|
8
|
+
# Returns a {Ebay::Shopping#initialize Shopping API} instance
|
9
|
+
def self.shopping(**params)
|
10
|
+
Shopping.new(**params)
|
11
|
+
end
|
12
|
+
|
7
13
|
# The eBay Shopping API makes it easy to search for things on eBay.
|
8
14
|
#
|
9
15
|
# @see https://developer.ebay.com/Devzone/shopping/docs/Concepts/ShoppingAPI_FormatOverview.html
|
@@ -96,7 +102,7 @@ module Ebay
|
|
96
102
|
# @return [HTTP::Response]
|
97
103
|
def get_item_status(*item_ids)
|
98
104
|
payload = item_ids.last.is_a?(Hash) ? item_ids.pop : {}
|
99
|
-
payload = payload.merge('ItemID' => item_ids.
|
105
|
+
payload = payload.merge('ItemID' => item_ids.map(&:to_s))
|
100
106
|
request('GetItemStatus', payload)
|
101
107
|
end
|
102
108
|
|
@@ -108,7 +114,7 @@ module Ebay
|
|
108
114
|
# @return [HTTP::Response]
|
109
115
|
def get_multiple_items(*item_ids)
|
110
116
|
payload = item_ids.last.is_a?(Hash) ? item_ids.pop : {}
|
111
|
-
payload = payload.merge('ItemID' => item_ids.
|
117
|
+
payload = payload.merge('ItemID' => item_ids.map(&:to_s))
|
112
118
|
|
113
119
|
request('GetMultipleItems', payload)
|
114
120
|
end
|
data/lib/ebay/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ebay-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Hakan Ensari
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: http
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rubocop-minitest
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rubocop-rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: vcr
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -122,7 +150,7 @@ dependencies:
|
|
122
150
|
- - ">="
|
123
151
|
- !ruby/object:Gem::Version
|
124
152
|
version: '0'
|
125
|
-
description:
|
153
|
+
description:
|
126
154
|
email:
|
127
155
|
- me@hakanensari.com
|
128
156
|
executables: []
|
@@ -145,7 +173,7 @@ homepage: https://github.com/hakanensari/ebay-ruby
|
|
145
173
|
licenses:
|
146
174
|
- MIT
|
147
175
|
metadata: {}
|
148
|
-
post_install_message:
|
176
|
+
post_install_message:
|
149
177
|
rdoc_options: []
|
150
178
|
require_paths:
|
151
179
|
- lib
|
@@ -153,15 +181,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
153
181
|
requirements:
|
154
182
|
- - ">="
|
155
183
|
- !ruby/object:Gem::Version
|
156
|
-
version: '2.
|
184
|
+
version: '2.5'
|
157
185
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
158
186
|
requirements:
|
159
187
|
- - ">="
|
160
188
|
- !ruby/object:Gem::Version
|
161
189
|
version: '0'
|
162
190
|
requirements: []
|
163
|
-
rubygems_version: 3.
|
164
|
-
signing_key:
|
191
|
+
rubygems_version: 3.2.3
|
192
|
+
signing_key:
|
165
193
|
specification_version: 4
|
166
194
|
summary: Ruby wrapper to the eBay APIs
|
167
195
|
test_files: []
|