rakuten_web_service 1.16.0 → 1.17.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 +4 -4
- data/.github/workflows/ci.yml +16 -0
- data/CHANGELOG.md +8 -0
- data/README.ja.md +4 -0
- data/README.md +4 -0
- data/Rakefile +44 -0
- data/lib/rakuten_web_service/books/book.rb +1 -1
- data/lib/rakuten_web_service/books/cd.rb +1 -1
- data/lib/rakuten_web_service/books/dvd.rb +1 -1
- data/lib/rakuten_web_service/books/foreign_book.rb +1 -1
- data/lib/rakuten_web_service/books/game.rb +1 -1
- data/lib/rakuten_web_service/books/genre.rb +1 -1
- data/lib/rakuten_web_service/books/magazine.rb +1 -1
- data/lib/rakuten_web_service/books/software.rb +1 -1
- data/lib/rakuten_web_service/books/total.rb +1 -1
- data/lib/rakuten_web_service/client.rb +6 -0
- data/lib/rakuten_web_service/configuration.rb +20 -4
- data/lib/rakuten_web_service/error.rb +4 -1
- data/lib/rakuten_web_service/gora/course.rb +1 -1
- data/lib/rakuten_web_service/gora/course_detail.rb +1 -1
- data/lib/rakuten_web_service/gora/plan.rb +1 -1
- data/lib/rakuten_web_service/ichiba/genre.rb +2 -2
- data/lib/rakuten_web_service/ichiba/item.rb +1 -1
- data/lib/rakuten_web_service/ichiba/product.rb +4 -4
- data/lib/rakuten_web_service/ichiba/ranking.rb +1 -1
- data/lib/rakuten_web_service/ichiba/tag_group.rb +1 -1
- data/lib/rakuten_web_service/kobo/ebook.rb +1 -1
- data/lib/rakuten_web_service/kobo/genre.rb +1 -1
- data/lib/rakuten_web_service/recipe/category.rb +1 -1
- data/lib/rakuten_web_service/recipe.rb +1 -1
- data/lib/rakuten_web_service/resource.rb +8 -0
- data/lib/rakuten_web_service/travel/area_class.rb +1 -1
- data/lib/rakuten_web_service/travel/hotel.rb +1 -1
- data/lib/rakuten_web_service/version.rb +1 -1
- data/rakuten_web_service.gemspec +1 -0
- data/sig/generated/attributes.rbs +611 -0
- data/sig/manifest.yaml +5 -0
- data/sig/rakuten_web_service/all_proxy.rbs +12 -0
- data/sig/rakuten_web_service/books/book.rbs +7 -0
- data/sig/rakuten_web_service/books/cd.rbs +7 -0
- data/sig/rakuten_web_service/books/dvd.rbs +7 -0
- data/sig/rakuten_web_service/books/foreign_book.rbs +7 -0
- data/sig/rakuten_web_service/books/game.rbs +7 -0
- data/sig/rakuten_web_service/books/genre.rbs +7 -0
- data/sig/rakuten_web_service/books/magazine.rbs +7 -0
- data/sig/rakuten_web_service/books/resource.rbs +27 -0
- data/sig/rakuten_web_service/books/software.rbs +7 -0
- data/sig/rakuten_web_service/books/total.rbs +10 -0
- data/sig/rakuten_web_service/books.rbs +0 -0
- data/sig/rakuten_web_service/client.rbs +21 -0
- data/sig/rakuten_web_service/configuration.rbs +43 -0
- data/sig/rakuten_web_service/error.rbs +35 -0
- data/sig/rakuten_web_service/genre.rbs +33 -0
- data/sig/rakuten_web_service/genre_information.rbs +16 -0
- data/sig/rakuten_web_service/gora/course.rbs +6 -0
- data/sig/rakuten_web_service/gora/course_detail.rbs +19 -0
- data/sig/rakuten_web_service/gora/plan.rbs +17 -0
- data/sig/rakuten_web_service/gora.rbs +0 -0
- data/sig/rakuten_web_service/ichiba/genre.rbs +9 -0
- data/sig/rakuten_web_service/ichiba/item.rbs +18 -0
- data/sig/rakuten_web_service/ichiba/product.rbs +7 -0
- data/sig/rakuten_web_service/ichiba/ranking.rbs +6 -0
- data/sig/rakuten_web_service/ichiba/shop.rbs +7 -0
- data/sig/rakuten_web_service/ichiba/tag.rbs +7 -0
- data/sig/rakuten_web_service/ichiba/tag_group.rbs +7 -0
- data/sig/rakuten_web_service/ichiba.rbs +0 -0
- data/sig/rakuten_web_service/kobo/ebook.rbs +9 -0
- data/sig/rakuten_web_service/kobo/genre.rbs +7 -0
- data/sig/rakuten_web_service/kobo.rbs +0 -0
- data/sig/rakuten_web_service/recipe/category.rbs +25 -0
- data/sig/rakuten_web_service/recipe.rbs +5 -0
- data/sig/rakuten_web_service/resource.rbs +64 -0
- data/sig/rakuten_web_service/response.rbs +38 -0
- data/sig/rakuten_web_service/search_result.rbs +56 -0
- data/sig/rakuten_web_service/string_support.rbs +4 -0
- data/sig/rakuten_web_service/travel/area_class.rbs +65 -0
- data/sig/rakuten_web_service/travel/hotel.rbs +11 -0
- data/sig/rakuten_web_service/travel/open_struct.rbs +9 -0
- data/sig/rakuten_web_service/travel/resource.rbs +7 -0
- data/sig/rakuten_web_service/travel/search_result.rbs +31 -0
- data/sig/rakuten_web_service/travel.rbs +0 -0
- data/sig/rakuten_web_service/version.rbs +3 -0
- data/sig/rakuten_web_service.rbs +12 -0
- data/spec/rakuten_web_service/books/book_spec.rb +2 -1
- data/spec/rakuten_web_service/books/cd_spec.rb +2 -1
- data/spec/rakuten_web_service/books/dvd_spec.rb +2 -1
- data/spec/rakuten_web_service/books/foreign_book_spec.rb +2 -1
- data/spec/rakuten_web_service/books/game_spec.rb +2 -1
- data/spec/rakuten_web_service/books/genre_spec.rb +2 -1
- data/spec/rakuten_web_service/books/magazine_spec.rb +2 -1
- data/spec/rakuten_web_service/books/software_spec.rb +2 -1
- data/spec/rakuten_web_service/books/total_spec.rb +2 -1
- data/spec/rakuten_web_service/client_spec.rb +34 -1
- data/spec/rakuten_web_service/configuration_spec.rb +64 -5
- data/spec/rakuten_web_service/genre_spec.rb +1 -0
- data/spec/rakuten_web_service/gora/course_detail_spec.rb +2 -1
- data/spec/rakuten_web_service/gora/course_spec.rb +2 -1
- data/spec/rakuten_web_service/gora/plan_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/genre_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/item_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/product_search_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/ranking_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/shop_spec.rb +2 -1
- data/spec/rakuten_web_service/ichiba/tag_group_spec.rb +2 -1
- data/spec/rakuten_web_service/kobo/ebook_spec.rb +2 -1
- data/spec/rakuten_web_service/kobo/genre_spec.rb +2 -1
- data/spec/rakuten_web_service/recipe/category_spec.rb +2 -1
- data/spec/rakuten_web_service/recipe_spec.rb +2 -1
- data/spec/rakuten_web_service/resource_spec.rb +30 -0
- data/spec/rakuten_web_service/travel/area_class_spec.rb +2 -1
- data/spec/rakuten_web_service/travel/simple_hotel_search_spec.rb +2 -1
- data/spec/rakuten_web_service_spec.rb +1 -0
- data/spec/spec_helper.rb +1 -0
- metadata +63 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7680e31b8cfe5db1599dfa4e721a69819fc5f4a47a2b36c12c703a7f967457ea
|
|
4
|
+
data.tar.gz: e13ad84b8941b87dd2ad6bfbdd496efec1639bc27d4d262935889ac49e1f23ac
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 7776c1c27d1ab2e47c9c6d23bc770e572490605e5e98f187c35d17f3a1cfae7e17ddd4ce4f963fa902dfebdc05528767d9348add83ff54c47197bbcd84b11847
|
|
7
|
+
data.tar.gz: 0b0bf4c5223e8dcdbbbc6e20e09743b738a5f8499ce2de1701c84fcfca608526dff24fb87ce7c593e459a02397da49179d183f1053aa65f24c27dfab325518a8
|
data/.github/workflows/ci.yml
CHANGED
|
@@ -29,3 +29,19 @@ jobs:
|
|
|
29
29
|
bundler-cache: true
|
|
30
30
|
- name: Run test
|
|
31
31
|
run: bundle exec rake
|
|
32
|
+
|
|
33
|
+
rbs:
|
|
34
|
+
runs-on: ubuntu-latest
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v4
|
|
38
|
+
- uses: ruby/setup-ruby@v1
|
|
39
|
+
env:
|
|
40
|
+
BUNDLE_WITHOUT: vscode
|
|
41
|
+
with:
|
|
42
|
+
ruby-version: 4.0
|
|
43
|
+
bundler-cache: true
|
|
44
|
+
- name: Check generated RBS signatures are up to date
|
|
45
|
+
run: bundle exec rake sig:check
|
|
46
|
+
- name: Validate RBS signatures
|
|
47
|
+
run: bundle exec rbs -r uri -r json -I sig validate
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# CHANGELOG
|
|
2
2
|
|
|
3
|
+
## v1.17.0 (2026/06/02)
|
|
4
|
+
|
|
5
|
+
### Improvements
|
|
6
|
+
|
|
7
|
+
- Ships RBS type signatures under `sig/` so users can type-check code that uses this gem.
|
|
8
|
+
- `SearchResult`, `Response` and `AllProxy` are generic over the resource class, so e.g. `Ichiba::Item.search(...).first` is typed as `Ichiba::Item?`.
|
|
9
|
+
- Reader methods defined by `attribute` are declared in `sig/generated/attributes.rbs`, generated by `rake sig:generate`.
|
|
10
|
+
|
|
3
11
|
## v1.13.2 (2023/03/26)
|
|
4
12
|
|
|
5
13
|
### Improvements
|
data/README.ja.md
CHANGED
|
@@ -51,6 +51,10 @@ gem install rakuten_web_service
|
|
|
51
51
|
# (必須) アプリケーションID
|
|
52
52
|
c.application_id = 'YOUR_APPLICATION_ID'
|
|
53
53
|
|
|
54
|
+
# (必須) アクセスキー
|
|
55
|
+
# 注意: セキュリティ上の理由から、この値はシークレットマネージャーまたは環境変数から取得することを推奨します。
|
|
56
|
+
c.access_key = 'YOUR_ACCESS_KEY'
|
|
57
|
+
|
|
54
58
|
# (任意) 楽天アフィリエイトID
|
|
55
59
|
c.affiliate_id = 'YOUR_AFFILIATE_ID' # default: nil
|
|
56
60
|
|
data/README.md
CHANGED
|
@@ -72,6 +72,10 @@ At first, you have to specify your application's key. And you can tell the clien
|
|
|
72
72
|
# (Required) Appliction ID for your application.
|
|
73
73
|
c.application_id = 'YOUR_APPLICATION_ID'
|
|
74
74
|
|
|
75
|
+
# (Required) Access key
|
|
76
|
+
# Note: For security purposes, we recommend retrieving this value from a secrets manager or environment variable.
|
|
77
|
+
c.access_key = 'YOUR_ACCESS_KEY'
|
|
78
|
+
|
|
75
79
|
# (Optional) Affiliate ID for your Rakuten account.
|
|
76
80
|
c.affiliate_id = 'YOUR_AFFILIATE_ID' # default: nil
|
|
77
81
|
|
data/Rakefile
CHANGED
|
@@ -14,6 +14,50 @@ task :endpoints do
|
|
|
14
14
|
puts table
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
+
namespace :sig do
|
|
18
|
+
ATTRIBUTES_SIG = 'sig/generated/attributes.rbs'
|
|
19
|
+
|
|
20
|
+
# Builds RBS declarations for the reader methods that `Resource.attribute`
|
|
21
|
+
# defines dynamically, so they are visible to type checkers.
|
|
22
|
+
def attributes_sig
|
|
23
|
+
require 'rakuten_web_service'
|
|
24
|
+
|
|
25
|
+
resource_file = File.expand_path('lib/rakuten_web_service/resource.rb', __dir__)
|
|
26
|
+
resource_classes = ObjectSpace.each_object(Class).select { |klass| klass < RakutenWebService::Resource }
|
|
27
|
+
|
|
28
|
+
sig = +"# This file is generated by `rake sig:generate`. Do not edit it by hand.\n"
|
|
29
|
+
resource_classes.sort_by(&:name).each do |klass|
|
|
30
|
+
# Skip methods overridden by a hand-written definition; those are
|
|
31
|
+
# declared in the hand-written signatures.
|
|
32
|
+
method_names = klass.attribute_methods.uniq.select do |method_name|
|
|
33
|
+
klass.instance_method(method_name).source_location&.first == resource_file
|
|
34
|
+
end
|
|
35
|
+
next if method_names.empty?
|
|
36
|
+
|
|
37
|
+
sig << "\nclass #{klass.name} < #{klass.superclass.name}\n"
|
|
38
|
+
method_names.each do |method_name|
|
|
39
|
+
return_type = method_name.end_with?('?') ? 'bool' : 'untyped'
|
|
40
|
+
sig << " def #{method_name}: () -> #{return_type}\n"
|
|
41
|
+
end
|
|
42
|
+
sig << "end\n"
|
|
43
|
+
end
|
|
44
|
+
sig
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
desc "Generate #{ATTRIBUTES_SIG} from the attributes declared in resources"
|
|
48
|
+
task :generate do
|
|
49
|
+
FileUtils.mkdir_p(File.dirname(ATTRIBUTES_SIG))
|
|
50
|
+
File.write(ATTRIBUTES_SIG, attributes_sig)
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
desc "Check that #{ATTRIBUTES_SIG} is up to date"
|
|
54
|
+
task :check do
|
|
55
|
+
unless File.exist?(ATTRIBUTES_SIG) && File.read(ATTRIBUTES_SIG) == attributes_sig
|
|
56
|
+
abort "#{ATTRIBUTES_SIG} is outdated. Run `rake sig:generate`."
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
|
|
17
61
|
RSpec::Core::RakeTask.new do |t|
|
|
18
62
|
t.pattern = 'spec/**/*_spec.rb'
|
|
19
63
|
t.rspec_opts = '-c -fd'
|
|
@@ -5,8 +5,8 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class Book < Books::Resource
|
|
8
|
-
endpoint 'https://app.rakuten.co.jp/services/api/BooksBook/Search/20170404'
|
|
9
8
|
|
|
9
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksBook/Search/20170404'
|
|
10
10
|
attribute :title, :titleKana, :subTitle, :subTitleKana,
|
|
11
11
|
:seriesName, :seriesNameKana,
|
|
12
12
|
:contents, :contentsKana,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class CD < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksCD/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :artistName, :artistNameKana,
|
|
11
11
|
:label, :jan, :makerCode,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class DVD < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksDVD/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :artistName, :artistNameKana,
|
|
11
11
|
:label, :jan, :makerCode,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class ForeignBook < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksForeignBook/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :japaneseTitle,
|
|
11
11
|
:author, :authorKana,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class Game < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksGame/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :hardware, :jan, :makerCode,
|
|
11
11
|
:itemCaption,
|
|
@@ -7,7 +7,7 @@ module RakutenWebService
|
|
|
7
7
|
class Genre < RakutenWebService::BaseGenre
|
|
8
8
|
self.resource_name = 'books_genre'
|
|
9
9
|
|
|
10
|
-
endpoint 'https://
|
|
10
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksGenre/Search/20121128'
|
|
11
11
|
|
|
12
12
|
attribute :booksGenreId, :booksGenreName, :genreLevel, :itemCount
|
|
13
13
|
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class Magazine < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksMagazine/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :publisherName, :jan,
|
|
11
11
|
:itemCaption,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class Software < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksSoftware/Search/20170404'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :os, :jan, :makerCode,
|
|
11
11
|
:itemCaption,
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/books/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Books
|
|
7
7
|
class Total < Books::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/BooksTotal/Search/20170404'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['Items'].map do |item|
|
|
@@ -39,6 +39,12 @@ module RakutenWebService
|
|
|
39
39
|
end
|
|
40
40
|
path = "#{path}?#{URI.encode_www_form(params)}"
|
|
41
41
|
header = { 'User-Agent' => USER_AGENT }
|
|
42
|
+
if RakutenWebService.configuration.access_key
|
|
43
|
+
case RakutenWebService.configuration.access_key_transport
|
|
44
|
+
when :access_key_header
|
|
45
|
+
header['accessKey'] = RakutenWebService.configuration.access_key
|
|
46
|
+
end
|
|
47
|
+
end
|
|
42
48
|
http.get(path, header)
|
|
43
49
|
end
|
|
44
50
|
end
|
|
@@ -4,12 +4,17 @@ require 'rakuten_web_service/string_support'
|
|
|
4
4
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
class Configuration
|
|
7
|
-
attr_accessor :application_id, :affiliate_id, :max_retries, :debug
|
|
7
|
+
attr_accessor :application_id, :affiliate_id, :max_retries, :debug, :access_key
|
|
8
|
+
attr_reader :access_key_transport
|
|
9
|
+
|
|
10
|
+
ALLOWED_ACCESS_KEY_TRANSPORTS = [:access_key_header, :query].freeze
|
|
8
11
|
|
|
9
12
|
def initialize
|
|
10
13
|
@application_id = ENV['RWS_APPLICATION_ID']
|
|
11
14
|
@affiliate_id = ENV['RWS_AFFILIATE_ID']
|
|
12
15
|
@max_retries = 5
|
|
16
|
+
@access_key = ENV['RWS_ACCESS_KEY']
|
|
17
|
+
@access_key_transport = :access_key_header
|
|
13
18
|
end
|
|
14
19
|
|
|
15
20
|
def generate_parameters(params)
|
|
@@ -17,18 +22,29 @@ module RakutenWebService
|
|
|
17
22
|
end
|
|
18
23
|
|
|
19
24
|
def default_parameters
|
|
20
|
-
raise 'Application ID
|
|
21
|
-
{ application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
|
|
25
|
+
raise 'Application ID and access key are not defined' unless has_required_options?
|
|
26
|
+
params = { application_id: application_id, affiliate_id: affiliate_id, format_version: '2' }
|
|
27
|
+
if access_key_transport == :query
|
|
28
|
+
params[:access_key] = access_key
|
|
29
|
+
end
|
|
30
|
+
params
|
|
22
31
|
end
|
|
23
32
|
|
|
24
33
|
def has_required_options?
|
|
25
|
-
application_id && application_id != ''
|
|
34
|
+
application_id && application_id != '' && access_key && access_key != ''
|
|
26
35
|
end
|
|
27
36
|
|
|
28
37
|
def debug_mode?
|
|
29
38
|
ENV.key?('RWS_SDK_DEBUG') || debug
|
|
30
39
|
end
|
|
31
40
|
|
|
41
|
+
def access_key_transport=(value)
|
|
42
|
+
unless ALLOWED_ACCESS_KEY_TRANSPORTS.include?(value&.to_sym)
|
|
43
|
+
raise ArgumentError, "Invalid access_key_transport value: #{value}, expected one of: #{ALLOWED_ACCESS_KEY_TRANSPORTS.inspect}"
|
|
44
|
+
end
|
|
45
|
+
@access_key_transport = value&.to_sym
|
|
46
|
+
end
|
|
47
|
+
|
|
32
48
|
private
|
|
33
49
|
|
|
34
50
|
using RakutenWebService::StringSupport
|
|
@@ -8,7 +8,10 @@ module RakutenWebService
|
|
|
8
8
|
|
|
9
9
|
def self.for(response)
|
|
10
10
|
error_class = repository[response.code.to_i]
|
|
11
|
-
|
|
11
|
+
json_body = JSON.parse(response.body)
|
|
12
|
+
# Note: In some case (e.g. authentication info missing), the server returns another format of error response like following:
|
|
13
|
+
# {"errors"=>{"errorCode"=>400, "errorMessage"=>"accessKey must be present as a query parameter or in the header"}}
|
|
14
|
+
error_class.new(json_body['error_description'] || json_body.dig('errors', 'errorMessage'))
|
|
12
15
|
end
|
|
13
16
|
|
|
14
17
|
def self.repository
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Gora
|
|
7
7
|
class Course < Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraGolfCourseSearch/20170623'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['Items'].map { |item| new(item) }
|
|
@@ -11,7 +11,7 @@ module RakutenWebService
|
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
|
|
14
|
-
endpoint 'https://
|
|
14
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraGolfCourseDetail/20170623'
|
|
15
15
|
|
|
16
16
|
parser do |response|
|
|
17
17
|
[new(response['Item'])]
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Gora
|
|
7
7
|
class Plan < Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Gora/GoraPlanSearch/20170623'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['Items'].map { |item| new(item) }
|
|
@@ -7,9 +7,9 @@ require 'rakuten_web_service/ichiba/product'
|
|
|
7
7
|
module RakutenWebService
|
|
8
8
|
module Ichiba
|
|
9
9
|
class Genre < RakutenWebService::BaseGenre
|
|
10
|
-
endpoint 'https://
|
|
10
|
+
endpoint 'https://openapi.rakuten.co.jp/ichibagt/api/IchibaGenre/Search/20170711'
|
|
11
11
|
|
|
12
|
-
attribute :genreId, :genreName, :genreLevel, :itemCount
|
|
12
|
+
attribute :genreId, :genreName, :genreLevel, :englishName, :linkGenreId, :chopperFlg, :lowestFlg, :itemCount
|
|
13
13
|
|
|
14
14
|
root_id 0
|
|
15
15
|
|
|
@@ -15,7 +15,7 @@ module RakutenWebService
|
|
|
15
15
|
end
|
|
16
16
|
end
|
|
17
17
|
|
|
18
|
-
endpoint 'https://
|
|
18
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaItem/Search/20220601'
|
|
19
19
|
|
|
20
20
|
parser do |response|
|
|
21
21
|
(response['Items'] || []).map { |item| Item.new(item) }
|
|
@@ -6,14 +6,14 @@ require 'rakuten_web_service/ichiba/genre'
|
|
|
6
6
|
module RakutenWebService
|
|
7
7
|
module Ichiba
|
|
8
8
|
class Product < Resource
|
|
9
|
-
endpoint 'https://
|
|
9
|
+
endpoint 'https://openapi.rakuten.co.jp/ichibaproduct/api/Product/Search/20250801'
|
|
10
10
|
|
|
11
11
|
parser do |response|
|
|
12
12
|
(response['Products'] || []).map { |prod| Product.new(prod) }
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
attribute :productId, :productName, :productNo, :brandName,
|
|
16
|
-
:productUrlPC, :productUrlMobile, :affiliateUrl,
|
|
15
|
+
attribute :productId, :productCode, :productName, :productNo, :brandName,
|
|
16
|
+
:productUrlPC, :productUrlMobile, :searchUrl, :affiliateUrl,
|
|
17
17
|
:smallImageUrl, :mediumImageUrl,
|
|
18
18
|
:productCaption, :releaseDate,
|
|
19
19
|
:makerCode, :makerName, :makerNameKana, :makerNameFormal,
|
|
@@ -24,7 +24,7 @@ module RakutenWebService
|
|
|
24
24
|
:minPrice, :salesMinPrice, :usedExcludeMinPrice, :usedExcludeSalesMinPrice,
|
|
25
25
|
:averagePrice,
|
|
26
26
|
:reviewCount, :reviewAverage, :reviewUrlPC, :reviewUrlMobile,
|
|
27
|
-
:rankTargetGenreId, :rankTargetProductCount,
|
|
27
|
+
:rank, :rankTargetGenreId, :rankTargetProductCount,
|
|
28
28
|
:genreId, :genreName,
|
|
29
29
|
:ProductDetails
|
|
30
30
|
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/ichiba/item'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Ichiba
|
|
7
7
|
class RankingItem < RakutenWebService::Ichiba::Item
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaItem/Ranking/20220601'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['Items'].map { |item| RankingItem.new(item) }
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Ichiba
|
|
7
7
|
class TagGroup < Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/IchibaTag/Search/20140222'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['tagGroups'].map { |tag_group| TagGroup.new(tag_group) }
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Kobo
|
|
7
7
|
class Ebook < RakutenWebService::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Kobo/EbookSearch/20170426'
|
|
9
9
|
|
|
10
10
|
attribute :title, :titleKana, :subTitle, :seriesName,
|
|
11
11
|
:author, :authorKana, :publisherName,
|
|
@@ -9,7 +9,7 @@ module RakutenWebService
|
|
|
9
9
|
|
|
10
10
|
root_id '101'
|
|
11
11
|
|
|
12
|
-
endpoint 'https://
|
|
12
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Kobo/GenreSearch/20131010'
|
|
13
13
|
|
|
14
14
|
attribute :koboGenreId, :koboGenreName, :genreLevel, :itemCount
|
|
15
15
|
|
|
@@ -27,7 +27,7 @@ module RakutenWebService
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
class Category < Resource
|
|
30
|
-
endpoint 'https://
|
|
30
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Recipe/CategoryList/20170426'
|
|
31
31
|
|
|
32
32
|
attribute :categoryId, :categoryName, :categoryUrl, :parentCategoryId, :categoryType
|
|
33
33
|
|
|
@@ -6,7 +6,7 @@ require 'rakuten_web_service/recipe/category'
|
|
|
6
6
|
|
|
7
7
|
module RakutenWebService
|
|
8
8
|
class Recipe < Resource
|
|
9
|
-
endpoint 'https://
|
|
9
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Recipe/CategoryRanking/20170426'
|
|
10
10
|
|
|
11
11
|
attribute :recipeId, :recipeTitle, :recipeUrl,
|
|
12
12
|
:foodImageUrl, :mediumImageUrl, :smallImageUrl,
|
|
@@ -34,6 +34,12 @@ module RakutenWebService
|
|
|
34
34
|
end
|
|
35
35
|
end
|
|
36
36
|
|
|
37
|
+
# Names of the reader methods defined by `attribute` on this class
|
|
38
|
+
# (not including ones inherited from superclasses).
|
|
39
|
+
def attribute_methods
|
|
40
|
+
@attribute_methods ||= []
|
|
41
|
+
end
|
|
42
|
+
|
|
37
43
|
def search(options)
|
|
38
44
|
SearchResult.new(options, self)
|
|
39
45
|
end
|
|
@@ -69,6 +75,7 @@ module RakutenWebService
|
|
|
69
75
|
define_method method_name do
|
|
70
76
|
get_attribute(attribute_name)
|
|
71
77
|
end
|
|
78
|
+
attribute_methods << method_name
|
|
72
79
|
end
|
|
73
80
|
|
|
74
81
|
def define_asking_method_for_attribute(attribute_name)
|
|
@@ -79,6 +86,7 @@ module RakutenWebService
|
|
|
79
86
|
define_method "#{method_name}?" do
|
|
80
87
|
get_attribute(attribute_name) == 1
|
|
81
88
|
end
|
|
89
|
+
attribute_methods << "#{method_name}?"
|
|
82
90
|
end
|
|
83
91
|
end
|
|
84
92
|
|
|
@@ -18,7 +18,7 @@ module RakutenWebService
|
|
|
18
18
|
module_function :search, :[]
|
|
19
19
|
|
|
20
20
|
class Base < RakutenWebService::Travel::Resource
|
|
21
|
-
endpoint 'https://
|
|
21
|
+
endpoint 'https://openapi.rakuten.co.jp/engine/api/Travel/GetAreaClass/20140210'
|
|
22
22
|
|
|
23
23
|
parser do |response|
|
|
24
24
|
response['areaClasses']['largeClasses'].map do |data|
|
|
@@ -5,7 +5,7 @@ require 'rakuten_web_service/travel/resource'
|
|
|
5
5
|
module RakutenWebService
|
|
6
6
|
module Travel
|
|
7
7
|
class Hotel < RakutenWebService::Travel::Resource
|
|
8
|
-
endpoint 'https://
|
|
8
|
+
endpoint 'https://openapi.rakuten.co.jp/services/api/Travel/SimpleHotelSearch/20170426'
|
|
9
9
|
|
|
10
10
|
parser do |response|
|
|
11
11
|
response['hotels'].map do |hotel_info|
|
data/rakuten_web_service.gemspec
CHANGED
|
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
|
|
|
24
24
|
spec.add_development_dependency 'bundler'
|
|
25
25
|
spec.add_development_dependency 'debug'
|
|
26
26
|
spec.add_development_dependency 'rake', '~> 13.0'
|
|
27
|
+
spec.add_development_dependency 'rbs', '~> 4.0'
|
|
27
28
|
spec.add_development_dependency 'rexml', '~> 3.2'
|
|
28
29
|
spec.add_development_dependency 'rspec', '~> 3.9'
|
|
29
30
|
spec.add_development_dependency 'tapp', '~> 1.5.1'
|