ebisu-rb 0.1.0
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.
- checksums.yaml +7 -0
- data/.gitignore +8 -0
- data/Gemfile +6 -0
- data/README.md +35 -0
- data/Rakefile +2 -0
- data/bin/console +10 -0
- data/bin/setup +8 -0
- data/ebisu.gemspec +30 -0
- data/lib/ebisu.rb +16 -0
- data/lib/ebisu/apis.rb +6 -0
- data/lib/ebisu/apis/category_search.rb +17 -0
- data/lib/ebisu/apis/item_search.rb +52 -0
- data/lib/ebisu/client.rb +58 -0
- data/lib/ebisu/faraday/connection.rb +30 -0
- data/lib/ebisu/faraday/request.rb +38 -0
- data/lib/ebisu/models/brands.rb +17 -0
- data/lib/ebisu/models/category.rb +36 -0
- data/lib/ebisu/models/category_id_path.rb +16 -0
- data/lib/ebisu/models/category_search_response.rb +37 -0
- data/lib/ebisu/models/ex_image.rb +24 -0
- data/lib/ebisu/models/image.rb +22 -0
- data/lib/ebisu/models/item.rb +139 -0
- data/lib/ebisu/models/item_search_response.rb +73 -0
- data/lib/ebisu/models/payment.rb +18 -0
- data/lib/ebisu/models/payment_method.rb +16 -0
- data/lib/ebisu/models/point.rb +24 -0
- data/lib/ebisu/models/price.rb +27 -0
- data/lib/ebisu/models/price_label.rb +47 -0
- data/lib/ebisu/models/review.rb +22 -0
- data/lib/ebisu/models/shipping.rb +17 -0
- data/lib/ebisu/models/store.rb +26 -0
- data/lib/ebisu/models/store_image.rb +16 -0
- data/lib/ebisu/models/store_ratings.rb +16 -0
- data/lib/ebisu/version.rb +3 -0
- metadata +187 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 521b49e69f7f688cbc7680960e7ada3ef50102c58d7183297c19705689ca5034
|
4
|
+
data.tar.gz: b5825249c6f94d85a31b5bddaecd304d5b2f31d90576b04decdba0328180c20a
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: eaa7652f553b4ca2ed77a42034154593d76774fce9ffbebd99d8a2146fe6d0ea17894fe6615beb598a7f330aa0a63c600a1e67e4622a786dcce0c13eae89d8ff
|
7
|
+
data.tar.gz: e68081055d4a44a3ba77890cc0b658f5c038f5b098bc6dfa3bdc2e34b788fb40cf0ee642884daa997d5184cc27e2e8eb7e4465684aaf9e15c7ea1016400f700b
|
data/.gitignore
ADDED
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Ebisu
|
2
|
+
|
3
|
+
Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/ebisu`. To experiment with that code, run `bin/console` for an interactive prompt.
|
4
|
+
|
5
|
+
TODO: Delete this and the text above, and describe your gem
|
6
|
+
|
7
|
+
## Installation
|
8
|
+
|
9
|
+
Add this line to your application's Gemfile:
|
10
|
+
|
11
|
+
```ruby
|
12
|
+
gem 'ebisu'
|
13
|
+
```
|
14
|
+
|
15
|
+
And then execute:
|
16
|
+
|
17
|
+
$ bundle
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
$ gem install ebisu
|
22
|
+
|
23
|
+
## Usage
|
24
|
+
|
25
|
+
TODO: Write usage instructions here
|
26
|
+
|
27
|
+
## Development
|
28
|
+
|
29
|
+
After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
30
|
+
|
31
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
32
|
+
|
33
|
+
## Contributing
|
34
|
+
|
35
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/takafumi.hirata/ebisu.
|
data/Rakefile
ADDED
data/bin/console
ADDED
data/bin/setup
ADDED
data/ebisu.gemspec
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
|
2
|
+
lib = File.expand_path("../lib", __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require "ebisu/version"
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "ebisu-rb"
|
8
|
+
spec.version = Ebisu::VERSION
|
9
|
+
spec.authors = ["totem3"]
|
10
|
+
spec.email = ["ganzheit.com@gmail.com"]
|
11
|
+
|
12
|
+
spec.summary = %q{yahoo api client}
|
13
|
+
spec.description = %q{Ebisu is the yahoo item search api cilent.}
|
14
|
+
|
15
|
+
# Specify which files should be added to the gem when it is released.
|
16
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
17
|
+
spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
|
18
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
end
|
20
|
+
spec.require_paths = ["lib"]
|
21
|
+
|
22
|
+
spec.add_dependency "faraday"
|
23
|
+
spec.add_dependency "faraday_middleware"
|
24
|
+
spec.add_dependency "multi_xml"
|
25
|
+
spec.add_dependency 'nokogiri'
|
26
|
+
spec.add_dependency 'mysql2'
|
27
|
+
spec.add_development_dependency "bundler", "~> 1.17"
|
28
|
+
spec.add_development_dependency "rake", "~> 10.0"
|
29
|
+
spec.add_development_dependency "pry"
|
30
|
+
end
|
data/lib/ebisu.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
require "ebisu/version"
|
2
|
+
require "logger"
|
3
|
+
require "nokogiri"
|
4
|
+
require "multi_xml"
|
5
|
+
require "faraday"
|
6
|
+
require "faraday_middleware"
|
7
|
+
require "ebisu/faraday/request"
|
8
|
+
require "ebisu/faraday/connection"
|
9
|
+
require "ebisu/apis/category_search"
|
10
|
+
require "ebisu/apis/item_search"
|
11
|
+
require "ebisu/apis"
|
12
|
+
require "ebisu/client"
|
13
|
+
|
14
|
+
module Ebisu
|
15
|
+
class Error < StandardError; end
|
16
|
+
end
|
data/lib/ebisu/apis.rb
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'ebisu/models/category_search_response'
|
2
|
+
module Ebisu
|
3
|
+
module Apis
|
4
|
+
module CategorySearch
|
5
|
+
# @param [Integer] category_id
|
6
|
+
# @param [Hash] options
|
7
|
+
# @option options [String] :output 出力形式 ( xml, php, jsonp )
|
8
|
+
# @option options [String] :affiliate_type バリューコマースアフィリエイト(vc)
|
9
|
+
# @option options [String] :affiliate_id バリューコマースアフィリエイトのID
|
10
|
+
# @option options [String] :callback JSONPの場合のコールバック
|
11
|
+
def category_search(category_id, options = {})
|
12
|
+
options.merge!(category_id: category_id)
|
13
|
+
Ebisu::CategorySearchResponse.new get('categorySearch', options)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require 'ebisu/models/item_search_response'
|
2
|
+
module Ebisu
|
3
|
+
module Apis
|
4
|
+
module ItemSearch
|
5
|
+
# @param [Hash] options
|
6
|
+
# @option options [String] :query
|
7
|
+
# @option options [String] :category_id
|
8
|
+
# @option options [String] :product_id
|
9
|
+
# @option options [String] :person_id
|
10
|
+
# @option options [String] :brand_id
|
11
|
+
# @option options [String] :store_id
|
12
|
+
# @option options [Integer] :price_from
|
13
|
+
# @option options [Integer] :price_to
|
14
|
+
# @option options [Float] :affiliate_from
|
15
|
+
# @option options [Float] :affiliate_to
|
16
|
+
# @option options [Integer] :preorder
|
17
|
+
# @option options [Integer] :hits
|
18
|
+
# @option options [Integer] :offset
|
19
|
+
# @option options [String] :module priceranges/subcategories
|
20
|
+
# @option options [Integer] :availability
|
21
|
+
# @option options [Integer] :discount
|
22
|
+
# @option options [Integer] :shipping (1/2)
|
23
|
+
# @option options [String] :payment
|
24
|
+
# ウォレット対応カード:yahoowallet
|
25
|
+
# クレジットカード:creditcard
|
26
|
+
# 商品代引:cod
|
27
|
+
# 銀行振込:banktransfer
|
28
|
+
# 郵便振替:pmo
|
29
|
+
# モバイルSuica:mobilesuica
|
30
|
+
# ペイジー:payeasy
|
31
|
+
# Yahoo!マネー/預金払い:yahoomoney
|
32
|
+
# コンビニ:convenience
|
33
|
+
# @option options [String] :license diamond/platinum/gold/silver/bronze/guest
|
34
|
+
# @option options [String] :salestart_from
|
35
|
+
# @option options [String] :salestart_to
|
36
|
+
# @option options [String] :saleend_from
|
37
|
+
# @option options [String] :saleend_to
|
38
|
+
# @option options [String] :seller (all/store/consumer)
|
39
|
+
# @option options [String] :sort (商品価格:price/ストア名:name/おすすめ順:score(デフォルト)/ レビュー数順:review_count)
|
40
|
+
# @option options [String] :condition (all/new/used)
|
41
|
+
# @option options [String] :output 出力形式 ( xml, php, jsonp )
|
42
|
+
# @option options [String] :affiliate_type バリューコマースアフィリエイト(vc)
|
43
|
+
# @option options [String] :affiliate_id バリューコマースアフィリエイトのID
|
44
|
+
# @option options [String] :callback JSONPの場合のコールバック
|
45
|
+
#
|
46
|
+
# @return [Ebisu::ItemSearchResponse]
|
47
|
+
def item_search(options = {})
|
48
|
+
Ebisu::ItemSearchResponse.new(get('itemSearch', options))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
data/lib/ebisu/client.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Ebisu
|
4
|
+
module Configuration
|
5
|
+
extend self
|
6
|
+
|
7
|
+
ATTRIBUTES = %i[
|
8
|
+
api_version
|
9
|
+
user_agent
|
10
|
+
endpoint
|
11
|
+
appid
|
12
|
+
proxy
|
13
|
+
logger
|
14
|
+
timeout
|
15
|
+
open_timeout
|
16
|
+
].freeze
|
17
|
+
|
18
|
+
ATTRIBUTES.each do |a|
|
19
|
+
attr_accessor a
|
20
|
+
end
|
21
|
+
|
22
|
+
def reset
|
23
|
+
self.api_version = 'V1'
|
24
|
+
self.endpoint = "https://shopping.yahooapis.jp/ShoppingWebService/#{api_version}/"
|
25
|
+
self.user_agent = "YahooShopping Ruby Client/#{Ebisu::VERSION}"
|
26
|
+
self.appid = nil
|
27
|
+
self.proxy = nil
|
28
|
+
self.logger = nil
|
29
|
+
self.timeout = 10
|
30
|
+
self.open_timeout = 5
|
31
|
+
end
|
32
|
+
end
|
33
|
+
Configuration.reset
|
34
|
+
|
35
|
+
class Client
|
36
|
+
include Ebisu::Faraday::Connection
|
37
|
+
include Ebisu::Faraday::Request
|
38
|
+
include Ebisu::Apis
|
39
|
+
|
40
|
+
Configuration::ATTRIBUTES.each do |a|
|
41
|
+
attr_accessor a
|
42
|
+
end
|
43
|
+
|
44
|
+
def initialize(options = {})
|
45
|
+
Configuration::ATTRIBUTES.each do |key|
|
46
|
+
send("#{key}=", options[key] || Configuration.send(key))
|
47
|
+
end
|
48
|
+
@logger ||= Configuration.logger || ::Logger.new(STDOUT)
|
49
|
+
@appid ||= Configuration.appid
|
50
|
+
end
|
51
|
+
|
52
|
+
class << self
|
53
|
+
def configure
|
54
|
+
block_given? ? yield(Configuration) : Configuration
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Ebisu
|
2
|
+
module Faraday
|
3
|
+
module Connection
|
4
|
+
private
|
5
|
+
|
6
|
+
def connection
|
7
|
+
options = {
|
8
|
+
headers: { 'Accept' => 'application/xml' }
|
9
|
+
}
|
10
|
+
|
11
|
+
options[:headers]['User-Agent'] = user_agent if user_agent
|
12
|
+
options[:proxy] = proxy if proxy
|
13
|
+
|
14
|
+
request_options = {}
|
15
|
+
request_options[:timeout] = timeout if timeout
|
16
|
+
request_options[:open_timeout] = open_timeout if open_timeout
|
17
|
+
options[:request] = request_options if request_options.any?
|
18
|
+
|
19
|
+
::Faraday::Connection.new(endpoint, options) do |connection|
|
20
|
+
connection.use ::Faraday::Request::UrlEncoded
|
21
|
+
connection.use ::Faraday::Response::RaiseError
|
22
|
+
connection.use ::FaradayMiddleware::ParseXml
|
23
|
+
require 'logger'
|
24
|
+
connection.response :logger, logger if logger
|
25
|
+
connection.adapter ::Faraday.default_adapter
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Ebisu
|
2
|
+
module Faraday
|
3
|
+
module Request
|
4
|
+
def get(path, options = {})
|
5
|
+
request(:get, path, options)
|
6
|
+
end
|
7
|
+
|
8
|
+
def post(path, options = {})
|
9
|
+
request(:post, path, options)
|
10
|
+
end
|
11
|
+
|
12
|
+
def put(path, options = {})
|
13
|
+
request(:put, path, options)
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete(path, options = {})
|
17
|
+
request(:delete, path, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def request(method, path, options)
|
23
|
+
options = options.merge(appid: appid)
|
24
|
+
response = connection.send(method) do |request|
|
25
|
+
case method
|
26
|
+
when :get, :delete
|
27
|
+
request.url(path, options)
|
28
|
+
when :post, :put
|
29
|
+
request.path = path
|
30
|
+
request.body = options unless options.empty?
|
31
|
+
end
|
32
|
+
request.options.merge!(options.delete(:request)) if options.key?(:request)
|
33
|
+
end
|
34
|
+
response.body
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Brands
|
3
|
+
# @!attribute name
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# @!attribute path
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :path
|
10
|
+
def initialize(brands)
|
11
|
+
@name = brands.dig('Name')
|
12
|
+
@path = brands.dig('Path', 'Brand')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class YCategory
|
3
|
+
IDAndName = Struct.new(:id, :name)
|
4
|
+
|
5
|
+
# @!attribute current
|
6
|
+
# @return [IDAndName]
|
7
|
+
attr_reader :current
|
8
|
+
def initialize(category)
|
9
|
+
@current = IDAndName.new(
|
10
|
+
category.dig('Current', 'Id'),
|
11
|
+
category.dig('Current', 'Name')
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
class CategoryDetail
|
17
|
+
# @!attribute id
|
18
|
+
# @return [Integer]
|
19
|
+
attr_reader :id
|
20
|
+
|
21
|
+
# @!attribute name
|
22
|
+
# @return [String]
|
23
|
+
attr_reader :name
|
24
|
+
|
25
|
+
# @!attribute parent_id
|
26
|
+
# @return [Integer]
|
27
|
+
attr_reader :parent_id
|
28
|
+
|
29
|
+
def initialize(data)
|
30
|
+
@id = data.dig('Id')
|
31
|
+
@name = data.dig('Title', 'Short')
|
32
|
+
@parent_id = data.dig('ParentId')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class CategoryIdPath
|
3
|
+
# @!attribute path
|
4
|
+
# @return [Array[String]]
|
5
|
+
attr_reader :path
|
6
|
+
def initialize(data)
|
7
|
+
category = data['Category']
|
8
|
+
@path = case category
|
9
|
+
when Array
|
10
|
+
category.map { |x| x['Id'] }
|
11
|
+
else
|
12
|
+
[]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ebisu/models/category'
|
4
|
+
|
5
|
+
module Ebisu
|
6
|
+
class CategorySearchResponse
|
7
|
+
def initialize(resp)
|
8
|
+
@original_response = resp
|
9
|
+
end
|
10
|
+
|
11
|
+
def [](key)
|
12
|
+
@original_response[key]
|
13
|
+
end
|
14
|
+
|
15
|
+
def result_set
|
16
|
+
@original_response['ResultSet']
|
17
|
+
end
|
18
|
+
|
19
|
+
def current
|
20
|
+
Ebisu::CategoryDetail.new(result_set.dig('Result', 'Categories', 'Current'))
|
21
|
+
end
|
22
|
+
|
23
|
+
# @return [Array<Ebisu::CategoryDetail>]
|
24
|
+
def children
|
25
|
+
parent_id = current.id
|
26
|
+
children = result_set.dig('Result', 'Categories', 'Children', 'Child')
|
27
|
+
if children
|
28
|
+
children.map do |child|
|
29
|
+
child['ParentId'] = parent_id
|
30
|
+
Ebisu::CategoryDetail.new(child)
|
31
|
+
end
|
32
|
+
else
|
33
|
+
[]
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class ExImage
|
3
|
+
# @!attribute url
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :url
|
6
|
+
|
7
|
+
# @!attribute width
|
8
|
+
# @return [Integer]
|
9
|
+
attr_reader :width
|
10
|
+
|
11
|
+
# @!attribute height
|
12
|
+
# @return [Integer]
|
13
|
+
attr_reader :height
|
14
|
+
|
15
|
+
def initialize(image)
|
16
|
+
return unless image
|
17
|
+
|
18
|
+
@url = image.dig('Url')
|
19
|
+
@width = image.dig('Width')
|
20
|
+
@height = image.dig('Height')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Image
|
3
|
+
# @!attribute id
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @!attribute small
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :small
|
10
|
+
|
11
|
+
# @!attribute medium
|
12
|
+
# @return [String]
|
13
|
+
attr_reader :medium
|
14
|
+
|
15
|
+
def initialize(data)
|
16
|
+
@id = data["Id"]
|
17
|
+
@small = data["Small"]
|
18
|
+
@medium = data["Medium"]
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
@@ -0,0 +1,139 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Item
|
3
|
+
# @!attribute name
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# @!attribute description
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :description
|
10
|
+
|
11
|
+
# @!attribute headline
|
12
|
+
# @return [String]
|
13
|
+
attr_reader :headline
|
14
|
+
|
15
|
+
# @!attribute url
|
16
|
+
# @return [String]
|
17
|
+
attr_reader :url
|
18
|
+
|
19
|
+
# @!attribute [r] availability
|
20
|
+
# @return [Ebisu::Item::Availability]
|
21
|
+
attr_reader :availability
|
22
|
+
|
23
|
+
# @!attribute code
|
24
|
+
# @return [String]
|
25
|
+
attr_reader :code
|
26
|
+
|
27
|
+
# @!attribute person_id
|
28
|
+
# @return [String]
|
29
|
+
attr_reader :person_id
|
30
|
+
|
31
|
+
# @!attribute product_id
|
32
|
+
# @return [String]
|
33
|
+
attr_reader :product_id
|
34
|
+
|
35
|
+
# @!attribute image
|
36
|
+
# @return [Ebisu::Image]
|
37
|
+
attr_reader :image
|
38
|
+
|
39
|
+
# @!attribute price
|
40
|
+
# @return [Ebisu::Price]
|
41
|
+
attr_reader :price
|
42
|
+
|
43
|
+
# @!attribute price_label
|
44
|
+
# @return [Ebisu::PriceLabel]
|
45
|
+
attr_reader :price_label
|
46
|
+
|
47
|
+
# @!attribute jan_code
|
48
|
+
# @return [String]
|
49
|
+
attr_reader :jan_code
|
50
|
+
|
51
|
+
# @!attribute model
|
52
|
+
# @return [String]
|
53
|
+
attr_reader :model
|
54
|
+
|
55
|
+
# @!attribute isbn_code
|
56
|
+
# @return [String]
|
57
|
+
attr_reader :isbn_code
|
58
|
+
|
59
|
+
# @!attribute release_date
|
60
|
+
# @return [String]
|
61
|
+
attr_reader :release_date
|
62
|
+
|
63
|
+
# @!attribute ex_image
|
64
|
+
# @return [Ebisu::ExImage]
|
65
|
+
attr_reader :ex_image
|
66
|
+
|
67
|
+
# @!attribute review
|
68
|
+
# @return [Ebisu::Review]
|
69
|
+
attr_reader :review
|
70
|
+
|
71
|
+
# @!attribute point
|
72
|
+
# @return [Ebisu::Point]
|
73
|
+
attr_reader :point
|
74
|
+
|
75
|
+
# @!attribute shipping
|
76
|
+
# @return [Ebisu::Shipping]
|
77
|
+
attr_reader :shipping
|
78
|
+
|
79
|
+
# @!attribute category
|
80
|
+
# @return [Ebisu::YCategory]
|
81
|
+
attr_reader :category
|
82
|
+
|
83
|
+
# @!attribute category_id_path
|
84
|
+
# @return [Ebisu::CategoryIdPath]
|
85
|
+
attr_reader :category_id_path
|
86
|
+
|
87
|
+
# @!attribute brands
|
88
|
+
# @return [Ebisu::Brands]
|
89
|
+
attr_reader :brands
|
90
|
+
|
91
|
+
# @!attribute store
|
92
|
+
# @return [Ebisu::Store]
|
93
|
+
attr_reader :store
|
94
|
+
|
95
|
+
class Availability
|
96
|
+
def initialize(v)
|
97
|
+
case v
|
98
|
+
when 'instock'
|
99
|
+
@available = true
|
100
|
+
when 'outofstock'
|
101
|
+
@available = false
|
102
|
+
else
|
103
|
+
@available = false
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
# @return [True|False]
|
108
|
+
def available?
|
109
|
+
@available
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
def initialize(hit)
|
114
|
+
@name = hit.dig('Name')
|
115
|
+
@description = hit.dig('Description')
|
116
|
+
@headline = hit.dig('Headline')
|
117
|
+
@url = hit.dig('Url')
|
118
|
+
@availability = Availability.new(hit.dig('Availability'))
|
119
|
+
@code = hit.dig('Code')
|
120
|
+
@person_id = hit.dig('PersonId')
|
121
|
+
@product_id = hit.dig('ProductId')
|
122
|
+
@price = Ebisu::Price.new(hit.dig('Price'))
|
123
|
+
@price_label = Ebisu::PriceLabel.new(hit.dig('PriceLabel'))
|
124
|
+
@jan_code = hit.dig('JanCode')
|
125
|
+
@model = hit.dig('Model')
|
126
|
+
@isbn_code = hit.dig('IsbnCode')
|
127
|
+
@release_date = hit.dig('ReleaseDate')
|
128
|
+
@image = Ebisu::Image.new(hit.dig('Image'))
|
129
|
+
@ex_image = Ebisu::ExImage.new(hit.dig('ExImage'))
|
130
|
+
@review = Ebisu::Review.new(hit.dig('Review'))
|
131
|
+
@point = Ebisu::Point.new(hit.dig('Point'))
|
132
|
+
@shipping = Ebisu::Shipping.new(hit.dig('Shipping'))
|
133
|
+
@category = Ebisu::YCategory.new(hit.dig('Category'))
|
134
|
+
@category_id_path = Ebisu::CategoryIdPath.new(hit.dig('CategoryIdPath'))
|
135
|
+
@brands = Ebisu::Brands.new(hit.dig('Brands'))
|
136
|
+
@store = Ebisu::Store.new(hit.dig('Store'))
|
137
|
+
end
|
138
|
+
end
|
139
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'ebisu/models/brands'
|
4
|
+
require 'ebisu/models/category'
|
5
|
+
require 'ebisu/models/category_id_path'
|
6
|
+
require 'ebisu/models/ex_image'
|
7
|
+
require 'ebisu/models/image'
|
8
|
+
require 'ebisu/models/item'
|
9
|
+
require 'ebisu/models/payment'
|
10
|
+
require 'ebisu/models/payment_method'
|
11
|
+
require 'ebisu/models/point'
|
12
|
+
require 'ebisu/models/price'
|
13
|
+
require 'ebisu/models/price_label'
|
14
|
+
require 'ebisu/models/review'
|
15
|
+
require 'ebisu/models/shipping'
|
16
|
+
require 'ebisu/models/store'
|
17
|
+
require 'ebisu/models/store_image'
|
18
|
+
require 'ebisu/models/store_ratings'
|
19
|
+
|
20
|
+
module Ebisu
|
21
|
+
# response wrapper
|
22
|
+
class ItemSearchResponse
|
23
|
+
def initialize(resp)
|
24
|
+
@original_response = resp
|
25
|
+
end
|
26
|
+
|
27
|
+
def [](key)
|
28
|
+
@original_response[key]
|
29
|
+
end
|
30
|
+
|
31
|
+
def result_set
|
32
|
+
@original_response['ResultSet']
|
33
|
+
end
|
34
|
+
|
35
|
+
# @return [Integer] 検索総HIT数
|
36
|
+
def total_results_available
|
37
|
+
result_set['totalResultsAvailable'].to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
# @return [Integer] 返された値の個数
|
41
|
+
def total_results_returned
|
42
|
+
result_set['totalResultsReturned'].to_i
|
43
|
+
end
|
44
|
+
|
45
|
+
# @return [Integer] 最初のデータが何個目にあたるか(最初=1)
|
46
|
+
def first_result_position
|
47
|
+
result_set['firstResultPosition'].to_i
|
48
|
+
end
|
49
|
+
|
50
|
+
# @return [Array<Ebisu::Item>] 検索結果のアイテムのリスト
|
51
|
+
def hits
|
52
|
+
result_hit = result_set['Result']['Hit']
|
53
|
+
case result_hit
|
54
|
+
when Array
|
55
|
+
result_hit.map{|hit| Ebisu::Item.new(hit)}
|
56
|
+
when Hash
|
57
|
+
# 結果がないとき
|
58
|
+
if result_hit['index'].to_i == 0
|
59
|
+
[].map{|hit| Ebisu::Item.new(hit)}
|
60
|
+
|
61
|
+
# 結果が1件だけのとき
|
62
|
+
else
|
63
|
+
[result_hit].map{|hit| Ebisu::Item.new(hit)}
|
64
|
+
end
|
65
|
+
when NilClass
|
66
|
+
[].map{|hit| Ebisu::Item.new(hit)}
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Payment
|
3
|
+
# @!attribute method
|
4
|
+
# @return [Array[PaymentMethod]]
|
5
|
+
attr_reader :method
|
6
|
+
def initialize(data)
|
7
|
+
@method = case data['Method']
|
8
|
+
when Array
|
9
|
+
data['Method'].map { |x| PaymentMethod.new(x) }
|
10
|
+
when NilClass
|
11
|
+
[]
|
12
|
+
else
|
13
|
+
[PaymentMethod.new(data)]
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class PaymentMethod
|
3
|
+
# @!attribute code
|
4
|
+
# @return [Integer]
|
5
|
+
attr_reader :code
|
6
|
+
|
7
|
+
# @!attribute name
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :name
|
10
|
+
def initialize(data)
|
11
|
+
@code = data.dig('Code').to_i
|
12
|
+
@name = data.dig('Name')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Point
|
3
|
+
# @!attribute amount
|
4
|
+
# @return [Integer]
|
5
|
+
attr_reader :amount
|
6
|
+
# @!attribute times
|
7
|
+
# @return [Integer]
|
8
|
+
attr_reader :times
|
9
|
+
# @!attribute premium_amount
|
10
|
+
# @return [Integer]
|
11
|
+
attr_reader :premium_amount
|
12
|
+
# @!attribute premium_times
|
13
|
+
# @return [Integer]
|
14
|
+
attr_reader :premium_times
|
15
|
+
|
16
|
+
def initialize(point)
|
17
|
+
@amount = point.dig('Amount').to_i
|
18
|
+
@times = point.dig('Times').to_i
|
19
|
+
@premium_amount = point.dig('PremiumAmount').to_i
|
20
|
+
@premium_times = point.dig('PremiumTimes').to_i
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Price
|
3
|
+
# @!attribute value
|
4
|
+
# @return [Integer]
|
5
|
+
attr_reader :value
|
6
|
+
|
7
|
+
# @!attribute currency
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :currency
|
10
|
+
|
11
|
+
def initialize(price)
|
12
|
+
case price
|
13
|
+
when Hash
|
14
|
+
@value = Integer(price['__content__'])
|
15
|
+
@currency = price['currency']
|
16
|
+
when String
|
17
|
+
@value = Integer(price)
|
18
|
+
@currency = 'JPY'
|
19
|
+
when Integer
|
20
|
+
@value = price
|
21
|
+
@currency = 'JPY'
|
22
|
+
else
|
23
|
+
raise "assertion failed. invalid price response value: #{price}"
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class PriceLabel
|
3
|
+
# @!attribute is_inclusive
|
4
|
+
# @return [True|False]
|
5
|
+
attr_reader :is_inclusive
|
6
|
+
|
7
|
+
# @!attribute fixed_price
|
8
|
+
# @return [Integer|Nil]
|
9
|
+
attr_reader :fixed_price
|
10
|
+
|
11
|
+
# @!attribute default_price
|
12
|
+
# @return [Integer|Nil]
|
13
|
+
attr_reader :default_price
|
14
|
+
|
15
|
+
# @!attribute sale_price
|
16
|
+
# @return [Integer|Nil]
|
17
|
+
attr_reader :sale_price
|
18
|
+
|
19
|
+
# @!attribute base_fixed_price
|
20
|
+
# @return [Integer|Nil]
|
21
|
+
attr_reader :base_fixed_price
|
22
|
+
|
23
|
+
# @!attribute base_sale_price
|
24
|
+
# @return [Integer|Nil]
|
25
|
+
attr_reader :base_sale_price
|
26
|
+
|
27
|
+
# @!attribute period_start
|
28
|
+
# @return [String]
|
29
|
+
attr_reader :period_start
|
30
|
+
|
31
|
+
# @!attribute period_end
|
32
|
+
# @return [String]
|
33
|
+
attr_reader :period_end
|
34
|
+
|
35
|
+
def initialize(price_label)
|
36
|
+
@is_inclusive = price_label['taxIncluded'] == 'true'
|
37
|
+
@fixed_price = price_label['FixedPrice']
|
38
|
+
@default_price = price_label['DefaultPrice']
|
39
|
+
@sale_price = price_label['SalePrice']
|
40
|
+
@base_fixed_price = price_label['BaseFixedPrice']
|
41
|
+
@base_sale_price = price_label['BaseSalePrice']
|
42
|
+
@period_start = price_label['PeriodStart']
|
43
|
+
@period_end = price_label['PeriodEnd']
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Review
|
3
|
+
# @!attribute rate
|
4
|
+
# @return [Float]
|
5
|
+
attr_reader :rate
|
6
|
+
|
7
|
+
# @!attribute count
|
8
|
+
# @return [Integer]
|
9
|
+
attr_reader :count
|
10
|
+
|
11
|
+
# @!attribute url
|
12
|
+
# @return [String]
|
13
|
+
attr_reader :url
|
14
|
+
|
15
|
+
def initialize(review)
|
16
|
+
@rate = review.dig('Rate').to_f
|
17
|
+
@count = review.dig('Count').to_i
|
18
|
+
@url = review.dig('Url')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Shipping
|
3
|
+
# @!attribute code
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :code
|
6
|
+
|
7
|
+
# @!attribute name
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :name
|
10
|
+
|
11
|
+
def initialize(shipping)
|
12
|
+
@code = shipping.dig('Code')
|
13
|
+
@name = shipping.dig('Name')
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class Store
|
3
|
+
# @!attribute name
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :name
|
6
|
+
|
7
|
+
# @!attribute payment
|
8
|
+
# @return [Ebisu::Payment]
|
9
|
+
attr_reader :payment
|
10
|
+
|
11
|
+
# @!attribute is_best_store
|
12
|
+
# @return [True|False]
|
13
|
+
attr_reader :is_best_store
|
14
|
+
|
15
|
+
# @!attribute ratings
|
16
|
+
# @return [Ebisu::StoreRatings]
|
17
|
+
attr_reader :ratings
|
18
|
+
def initialize(data)
|
19
|
+
@name = data.dig('Name')
|
20
|
+
@payment = Ebisu::Payment.new(data.dig('Payment'))
|
21
|
+
@is_best_store = data.dig('IsBestStore') == 'true'
|
22
|
+
@ratings = Ebisu::StoreRatings.new(data.dig('Ratings'))
|
23
|
+
@image = Ebisu::StoreImage.new(data.dig('Image'))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class StoreImage
|
3
|
+
# @!attribute id
|
4
|
+
# @return [String]
|
5
|
+
attr_reader :id
|
6
|
+
|
7
|
+
# @!attribute medium
|
8
|
+
# @return [String]
|
9
|
+
attr_reader :medium
|
10
|
+
def initialize(data)
|
11
|
+
@id = data.dig('Id')
|
12
|
+
@medium = data.dig('Medium')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module Ebisu
|
2
|
+
class StoreRatings
|
3
|
+
# @!attribute rate
|
4
|
+
# @return [Float]
|
5
|
+
attr_reader :rate
|
6
|
+
|
7
|
+
# @!attribute count
|
8
|
+
# @return [Integer]
|
9
|
+
attr_reader :count
|
10
|
+
def initialize(data)
|
11
|
+
@rate = data.dig('Rate').to_f
|
12
|
+
@count = data.dig('Count').to_i
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
metadata
ADDED
@@ -0,0 +1,187 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ebisu-rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- totem3
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-10-22 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: multi_xml
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: nokogiri
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: mysql2
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: bundler
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.17'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.17'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: rake
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '10.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '10.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: pry
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - ">="
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: Ebisu is the yahoo item search api cilent.
|
126
|
+
email:
|
127
|
+
- ganzheit.com@gmail.com
|
128
|
+
executables: []
|
129
|
+
extensions: []
|
130
|
+
extra_rdoc_files: []
|
131
|
+
files:
|
132
|
+
- ".gitignore"
|
133
|
+
- Gemfile
|
134
|
+
- README.md
|
135
|
+
- Rakefile
|
136
|
+
- bin/console
|
137
|
+
- bin/setup
|
138
|
+
- ebisu.gemspec
|
139
|
+
- lib/ebisu.rb
|
140
|
+
- lib/ebisu/apis.rb
|
141
|
+
- lib/ebisu/apis/category_search.rb
|
142
|
+
- lib/ebisu/apis/item_search.rb
|
143
|
+
- lib/ebisu/client.rb
|
144
|
+
- lib/ebisu/faraday/connection.rb
|
145
|
+
- lib/ebisu/faraday/request.rb
|
146
|
+
- lib/ebisu/models/brands.rb
|
147
|
+
- lib/ebisu/models/category.rb
|
148
|
+
- lib/ebisu/models/category_id_path.rb
|
149
|
+
- lib/ebisu/models/category_search_response.rb
|
150
|
+
- lib/ebisu/models/ex_image.rb
|
151
|
+
- lib/ebisu/models/image.rb
|
152
|
+
- lib/ebisu/models/item.rb
|
153
|
+
- lib/ebisu/models/item_search_response.rb
|
154
|
+
- lib/ebisu/models/payment.rb
|
155
|
+
- lib/ebisu/models/payment_method.rb
|
156
|
+
- lib/ebisu/models/point.rb
|
157
|
+
- lib/ebisu/models/price.rb
|
158
|
+
- lib/ebisu/models/price_label.rb
|
159
|
+
- lib/ebisu/models/review.rb
|
160
|
+
- lib/ebisu/models/shipping.rb
|
161
|
+
- lib/ebisu/models/store.rb
|
162
|
+
- lib/ebisu/models/store_image.rb
|
163
|
+
- lib/ebisu/models/store_ratings.rb
|
164
|
+
- lib/ebisu/version.rb
|
165
|
+
homepage:
|
166
|
+
licenses: []
|
167
|
+
metadata: {}
|
168
|
+
post_install_message:
|
169
|
+
rdoc_options: []
|
170
|
+
require_paths:
|
171
|
+
- lib
|
172
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - ">="
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: '0'
|
177
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
178
|
+
requirements:
|
179
|
+
- - ">="
|
180
|
+
- !ruby/object:Gem::Version
|
181
|
+
version: '0'
|
182
|
+
requirements: []
|
183
|
+
rubygems_version: 3.0.3
|
184
|
+
signing_key:
|
185
|
+
specification_version: 4
|
186
|
+
summary: yahoo api client
|
187
|
+
test_files: []
|