rakuten_web_service 0.1.1 → 0.2.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 +8 -8
- data/README.md +51 -2
- data/lib/rakuten_web_service.rb +1 -0
- data/lib/rakuten_web_service/ichiba/item.rb +9 -1
- data/lib/rakuten_web_service/ichiba/shop.rb +12 -0
- data/lib/rakuten_web_service/resource.rb +1 -1
- data/lib/rakuten_web_service/version.rb +1 -1
- data/spec/rakuten_web_service/ichiba/item_spec.rb +20 -0
- data/spec/rakuten_web_service/ichiba/shop_spec.rb +53 -0
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
ZjUxOTgxNTFiYTgyOGJhZTAyMDk5YTg3YzdlZGMyZTdmNGVlNjJkNw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
NGI5NGMyZDg5OGFiNTQwMmRiN2E4ZDg0ZGIxNzdmZjdmNjM5NzY0Yg==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
Yzk0NzQxMzM1MmJmN2M5NTFmODFkMzEzMzdhZTRmOWY4NDBlZTUwYzE0NTJi
|
10
|
+
OWYyNTM1MzRmMGQyODNjYTI5MWFhZDUxMDA5MTUwN2QwMzcwNjBiNDFjODQ4
|
11
|
+
M2Q2NjZiNzdhNDA1YjgwMzQ2MmU4NDE2YmNlYmI1OTk4ZmYxODA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZjEyYjRmMWNmOWMzMTM2MzIwMDIwZTE3YjgxNTI1MTRlNTU1NzQ1ZjliMzky
|
14
|
+
MjUxOWQ5MzVmMGQ4N2FmYTk0ODc0NzliNzY3MDdkYWM1MWJkZDY5ZGRmZGM5
|
15
|
+
MDIyM2Q4ODRiNzhmYzVkMGYwMWY5N2I3ZWFhZWVlMmMzMjNmOWY=
|
data/README.md
CHANGED
@@ -6,7 +6,9 @@
|
|
6
6
|
|
7
7
|
Add this line to your application's Gemfile:
|
8
8
|
|
9
|
-
|
9
|
+
```ruby
|
10
|
+
gem 'rakuten_web_service'
|
11
|
+
```
|
10
12
|
|
11
13
|
And then execute:
|
12
14
|
|
@@ -18,7 +20,54 @@ Or install it yourself as:
|
|
18
20
|
|
19
21
|
## Usage
|
20
22
|
|
21
|
-
|
23
|
+
Now rakuten\_web\_service is supporting the following APIs:
|
24
|
+
|
25
|
+
* [Rakuten Ichiba Item Search API](http://webservice.rakuten.co.jp/api/ichibaitemsearch/)
|
26
|
+
* [Rakuten Ichiba Genre Search API](http://webservice.rakuten.co.jp/api/ichibagenresearch/)
|
27
|
+
* [Rakuten Ichiba Ranking API](http://webservice.rakuten.co.jp/api/ichibaitemranking/)
|
28
|
+
|
29
|
+
### Configuration
|
30
|
+
|
31
|
+
`RakutenWebService.configuration` allows you to specify your application's key called application\_id and your affiliate id(optional).
|
32
|
+
|
33
|
+
```ruby
|
34
|
+
RakutenWebService.configuration do |c|
|
35
|
+
c.application_id = YOUR_APPLICATION_ID
|
36
|
+
c.affiliate_id = YOUR_AFFILIATE_ID
|
37
|
+
end
|
38
|
+
```
|
39
|
+
|
40
|
+
### Search Ichiba Items
|
41
|
+
|
42
|
+
```ruby
|
43
|
+
items = RakutenWebService::Ichiba::Item.search(:keyword => 'Ruby') # This returns Enamerable object
|
44
|
+
items.first(10).each do |item|
|
45
|
+
puts "#{item['itemName']}, #{item.price} yen" # You can refer to values as well as Hash.
|
46
|
+
end
|
47
|
+
```
|
48
|
+
|
49
|
+
### Genre
|
50
|
+
|
51
|
+
Genre class provides an interface to traverse sub genres.
|
52
|
+
|
53
|
+
```ruby
|
54
|
+
root = RakutenWebService::Ichiba::Genre.root # root genre
|
55
|
+
# children returns sub genres
|
56
|
+
root.children.each do |child|
|
57
|
+
puts "[#{child.id}] #{child.name}"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Use genre id to fetch genre object
|
61
|
+
RakutenWebService::Ichiba::Genre[100316].name # => "水・ソフトドリンク"
|
62
|
+
```
|
63
|
+
|
64
|
+
|
65
|
+
### Ichiba Item Ranking
|
66
|
+
|
67
|
+
```ruby
|
68
|
+
RakutenWebService::Ichiba::Item.ranking(:age => 30, :sex => 0) # returns the TOP 30 items for Male in 30s
|
69
|
+
RakutenWebService::Ichiba::Genre[100316].ranking # the TOP 30 items in "水・ソフトドリンク" genre
|
70
|
+
```
|
22
71
|
|
23
72
|
## Contributing
|
24
73
|
|
data/lib/rakuten_web_service.rb
CHANGED
@@ -3,6 +3,7 @@ require 'rakuten_web_service/configuration'
|
|
3
3
|
require 'rakuten_web_service/client'
|
4
4
|
require 'rakuten_web_service/search_result'
|
5
5
|
require 'rakuten_web_service/resource'
|
6
|
+
require 'rakuten_web_service/ichiba/shop'
|
6
7
|
require 'rakuten_web_service/ichiba/item'
|
7
8
|
require 'rakuten_web_service/ichiba/genre'
|
8
9
|
require 'rakuten_web_service/ichiba/ranking'
|
@@ -24,13 +24,21 @@ module RakutenWebService
|
|
24
24
|
:affiliateRate,
|
25
25
|
:startTime, :endTime,
|
26
26
|
:reviewCount, :reviewAverage,
|
27
|
-
:pointRate, :pointRateStartTime, :pointRateEndTime
|
27
|
+
:pointRate, :pointRateStartTime, :pointRateEndTime,
|
28
28
|
:shopName, :shopCode, :shopUrl,
|
29
29
|
:genreId
|
30
30
|
|
31
31
|
def genre
|
32
32
|
Genre[self.genre_id]
|
33
33
|
end
|
34
|
+
|
35
|
+
def shop
|
36
|
+
Shop.new({
|
37
|
+
'shopName' => self.shop_name,
|
38
|
+
'shopCode' => self.shop_code,
|
39
|
+
'shopUrl' => self.shop_url
|
40
|
+
})
|
41
|
+
end
|
34
42
|
end
|
35
43
|
end
|
36
44
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module RakutenWebService
|
2
|
+
module Ichiba
|
3
|
+
class Shop < Resource
|
4
|
+
attribute :shopName, :shopCode, :shopUrl
|
5
|
+
|
6
|
+
def items(options={})
|
7
|
+
options = options.merge(:shop_code => self.code)
|
8
|
+
RakutenWebService::Ichiba::Item.search(options)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -5,7 +5,7 @@ module RakutenWebService
|
|
5
5
|
class << self
|
6
6
|
def attribute(*attributes)
|
7
7
|
attributes.each do |attribute|
|
8
|
-
method_name = attribute.to_s.gsub(/([a-z]+)([A-Z]{1})/) do
|
8
|
+
method_name = attribute.to_s.gsub(/([a-z]+)([A-Z]{1})/) do |matched|
|
9
9
|
"#{$1}_#{$2.downcase}"
|
10
10
|
end
|
11
11
|
method_name = method_name.sub(/^#{resource_name}_(\w+)$/) { $1 }
|
@@ -101,4 +101,24 @@ describe RakutenWebService::Ichiba::Item do
|
|
101
101
|
expect { subject }.to_not raise_error
|
102
102
|
end
|
103
103
|
end
|
104
|
+
|
105
|
+
describe '#shop' do
|
106
|
+
let(:response) { JSON.parse(fixture('ichiba/item_search_with_keyword_Ruby.json')) }
|
107
|
+
let(:expected_item) { response['Items'][0]['Item'] }
|
108
|
+
|
109
|
+
before do
|
110
|
+
stub_request(:get, endpoint).with(:query => expected_query).
|
111
|
+
to_return(:body => response.to_json)
|
112
|
+
end
|
113
|
+
|
114
|
+
subject do
|
115
|
+
RakutenWebService::Ichiba::Item.search(:keyword => 'Ruby').first.shop
|
116
|
+
end
|
117
|
+
|
118
|
+
specify 'responds Shop object' do
|
119
|
+
expect(subject.name).to eq(expected_item['shopName'])
|
120
|
+
expect(subject.code).to eq(expected_item['shopCode'])
|
121
|
+
expect(subject.url).to eq(expected_item['shopUrl'])
|
122
|
+
end
|
123
|
+
end
|
104
124
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
require 'rakuten_web_service'
|
3
|
+
|
4
|
+
describe RakutenWebService::Ichiba::Shop do
|
5
|
+
let(:params) do
|
6
|
+
{ 'shopName' => 'Hoge Shop',
|
7
|
+
'shopCode' => 'hogeshop',
|
8
|
+
'shopUrl' => 'http://www.rakuten.co.jp/hogeshop' }
|
9
|
+
end
|
10
|
+
let(:shop) { RakutenWebService::Ichiba::Shop.new(params) }
|
11
|
+
let(:endpoint) { 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20130805' }
|
12
|
+
let(:affiliate_id) { 'dummy_affiliate_id' }
|
13
|
+
let(:application_id) { 'dummy_application_id' }
|
14
|
+
let(:expected_query) do
|
15
|
+
{
|
16
|
+
'affiliateId' => affiliate_id,
|
17
|
+
'applicationId' => application_id,
|
18
|
+
'shopCode' => 'hogeshop'
|
19
|
+
}
|
20
|
+
end
|
21
|
+
|
22
|
+
before do
|
23
|
+
RakutenWebService.configuration do |c|
|
24
|
+
c.affiliate_id = affiliate_id
|
25
|
+
c.application_id = application_id
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe '.new' do
|
30
|
+
specify 'returned object should have methods to fetch values' do
|
31
|
+
expect(shop.name).to eq('Hoge Shop')
|
32
|
+
expect(shop.code).to eq('hogeshop')
|
33
|
+
expect(shop.url).to eq('http://www.rakuten.co.jp/hogeshop')
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#items' do
|
38
|
+
let(:response) do
|
39
|
+
{ 'Items' => [] }
|
40
|
+
end
|
41
|
+
|
42
|
+
before do
|
43
|
+
@expected_request = stub_request(:get, endpoint).
|
44
|
+
with(:query => expected_query).to_return(:body => response.to_json)
|
45
|
+
end
|
46
|
+
|
47
|
+
specify 'call the endpoint with the shopCode' do
|
48
|
+
shop.items.first
|
49
|
+
|
50
|
+
expect(@expected_request).to have_been_made
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rakuten_web_service
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tatsuya Sato
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08
|
11
|
+
date: 2013-09-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -128,6 +128,7 @@ files:
|
|
128
128
|
- lib/rakuten_web_service/ichiba/genre.rb
|
129
129
|
- lib/rakuten_web_service/ichiba/item.rb
|
130
130
|
- lib/rakuten_web_service/ichiba/ranking.rb
|
131
|
+
- lib/rakuten_web_service/ichiba/shop.rb
|
131
132
|
- lib/rakuten_web_service/resource.rb
|
132
133
|
- lib/rakuten_web_service/search_result.rb
|
133
134
|
- lib/rakuten_web_service/version.rb
|
@@ -140,6 +141,7 @@ files:
|
|
140
141
|
- spec/rakuten_web_service/ichiba/genre_spec.rb
|
141
142
|
- spec/rakuten_web_service/ichiba/item_spec.rb
|
142
143
|
- spec/rakuten_web_service/ichiba/ranking_spec.rb
|
144
|
+
- spec/rakuten_web_service/ichiba/shop_spec.rb
|
143
145
|
- spec/spec_helper.rb
|
144
146
|
- spec/support/fixture_suppot.rb
|
145
147
|
homepage: http://webservice.rakuten.co.jp/
|
@@ -175,5 +177,6 @@ test_files:
|
|
175
177
|
- spec/rakuten_web_service/ichiba/genre_spec.rb
|
176
178
|
- spec/rakuten_web_service/ichiba/item_spec.rb
|
177
179
|
- spec/rakuten_web_service/ichiba/ranking_spec.rb
|
180
|
+
- spec/rakuten_web_service/ichiba/shop_spec.rb
|
178
181
|
- spec/spec_helper.rb
|
179
182
|
- spec/support/fixture_suppot.rb
|