rakuten_api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. data/.gitignore +17 -0
  2. data/Gemfile +14 -0
  3. data/Guardfile +5 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +151 -0
  6. data/Rakefile +1 -0
  7. data/examples/show_ranking.rb +20 -0
  8. data/lib/rakuten_api/base/client.rb +41 -0
  9. data/lib/rakuten_api/base/item.rb +55 -0
  10. data/lib/rakuten_api/base/model.rb +41 -0
  11. data/lib/rakuten_api/base/params.rb +72 -0
  12. data/lib/rakuten_api/base/response.rb +39 -0
  13. data/lib/rakuten_api/configuration.rb +27 -0
  14. data/lib/rakuten_api/dummy_module.rb +6 -0
  15. data/lib/rakuten_api/error.rb +14 -0
  16. data/lib/rakuten_api/genre_search/client.rb +41 -0
  17. data/lib/rakuten_api/genre_search/model.rb +22 -0
  18. data/lib/rakuten_api/genre_search/response.rb +43 -0
  19. data/lib/rakuten_api/item_ranking/client.rb +29 -0
  20. data/lib/rakuten_api/item_ranking/model.rb +17 -0
  21. data/lib/rakuten_api/item_ranking/response.rb +57 -0
  22. data/lib/rakuten_api/item_search/client.rb +34 -0
  23. data/lib/rakuten_api/item_search/model.rb +15 -0
  24. data/lib/rakuten_api/item_search/response.rb +71 -0
  25. data/lib/rakuten_api/version.rb +3 -0
  26. data/lib/rakuten_api.rb +45 -0
  27. data/rakuten_api.gemspec +24 -0
  28. data/spec/fixtures/vcr_cassettes/genre_search_response.yml +75 -0
  29. data/spec/fixtures/vcr_cassettes/genre_search_response_0.yml +75 -0
  30. data/spec/fixtures/vcr_cassettes/genre_search_response_551169.yml +62 -0
  31. data/spec/fixtures/vcr_cassettes/genre_search_response_551172.yml +62 -0
  32. data/spec/fixtures/vcr_cassettes/item_ranking_error_response.yml +56 -0
  33. data/spec/fixtures/vcr_cassettes/item_ranking_response.yml +853 -0
  34. data/spec/fixtures/vcr_cassettes/item_ranking_response_next_ranking.yml +789 -0
  35. data/spec/fixtures/vcr_cassettes/item_ranking_response_prev_ranking.yml +853 -0
  36. data/spec/fixtures/vcr_cassettes/item_search_response.yml +116 -0
  37. data/spec/fixtures/vcr_cassettes/item_search_response_next_page.yml +89 -0
  38. data/spec/fixtures/vcr_cassettes/item_search_response_prev_page.yml +107 -0
  39. data/spec/rakuten_api/base/params_spec.rb +42 -0
  40. data/spec/rakuten_api/genre_search/client_spec.rb +37 -0
  41. data/spec/rakuten_api/genre_search/model_spec.rb +32 -0
  42. data/spec/rakuten_api/genre_search/response_spec.rb +47 -0
  43. data/spec/rakuten_api/item_ranking/client_spec.rb +19 -0
  44. data/spec/rakuten_api/item_ranking/model_spec.rb +19 -0
  45. data/spec/rakuten_api/item_ranking/response_spec.rb +64 -0
  46. data/spec/rakuten_api/item_search/client_spec.rb +35 -0
  47. data/spec/rakuten_api/item_search/model_spec.rb +33 -0
  48. data/spec/rakuten_api/item_search/response_spec.rb +73 -0
  49. data/spec/spec_helper.rb +34 -0
  50. metadata +181 -0
@@ -0,0 +1,116 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - ! '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMjo1MzoxNiBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ Mjc4MQ==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
114
+ http_version:
115
+ recorded_at: Mon, 18 Feb 2013 12:53:16 GMT
116
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,89 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94&page=2
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - ! '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMzo1NDo0NSBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MTU3NA==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
87
+ http_version:
88
+ recorded_at: Mon, 18 Feb 2013 13:54:45 GMT
89
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,107 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: get
5
+ uri: https://app.rakuten.co.jp/services/api/IchibaItem/Search/20120723?applicationId=16d8dfe13fde99ac5479d789764d2f7a&hits=2&keyword=%E3%82%8A%E3%82%93%E3%81%94&page=1
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
9
+ headers:
10
+ Accept-Encoding:
11
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
12
+ Accept:
13
+ - ! '*/*'
14
+ User-Agent:
15
+ - Ruby
16
+ response:
17
+ status:
18
+ code: 200
19
+ message: !binary |-
20
+ T0s=
21
+ headers:
22
+ !binary "RGF0ZQ==":
23
+ - !binary |-
24
+ TW9uLCAxOCBGZWIgMjAxMyAxMzo1OTo0MCBHTVQ=
25
+ !binary "QWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2lu":
26
+ - !binary |-
27
+ Kg==
28
+ !binary "Q2FjaGUtQ29udHJvbA==":
29
+ - !binary |-
30
+ bm8tc3RvcmU=
31
+ !binary "Q29udGVudC1UeXBl":
32
+ - !binary |-
33
+ YXBwbGljYXRpb24vanNvbjtjaGFyc2V0PVVURi04
34
+ !binary "Q29udGVudC1MYW5ndWFnZQ==":
35
+ - !binary |-
36
+ amEtSlA=
37
+ !binary "VmFyeQ==":
38
+ - !binary |-
39
+ QWNjZXB0LUVuY29kaW5n
40
+ !binary "Q29udGVudC1FbmNvZGluZw==":
41
+ - !binary |-
42
+ Z3ppcA==
43
+ !binary "Q29udGVudC1MZW5ndGg=":
44
+ - !binary |-
45
+ MjM2Nw==
46
+ !binary "Q29ubmVjdGlvbg==":
47
+ - !binary |-
48
+ Y2xvc2U=
49
+ body:
50
+ encoding: ASCII-8BIT
51
+ string: !binary |-
52
+ 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
104
+ r6dvt1Cb435fF7V7unkjffTqP6HK1yiLFwAA
105
+ http_version:
106
+ recorded_at: Mon, 18 Feb 2013 13:59:40 GMT
107
+ recorded_with: VCR 2.4.0
@@ -0,0 +1,42 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::Base::Params do
6
+ describe '#normalize' do
7
+ shared_examples "should normalize" do |value, expect|
8
+ it { described_class.new.normalize(value).should eql expect }
9
+ end
10
+ context "String" do
11
+ it_behaves_like "should normalize", 'foo', 'foo'
12
+ it_behaves_like "should normalize", 'foo_bar', 'fooBar'
13
+ it_behaves_like "should normalize", 'foo_bar_baz', 'fooBarBaz'
14
+ end
15
+
16
+ context "Symbol" do
17
+ it_behaves_like "should normalize", :foo, 'foo'
18
+ it_behaves_like "should normalize", :foo_bar, 'fooBar'
19
+ it_behaves_like "should normalize", :foo_bar_baz, 'fooBarBaz'
20
+ end
21
+ end
22
+
23
+ describe '#add_param' do
24
+ let(:obj) { described_class.new }
25
+ context "valid param" do
26
+ before {
27
+ obj.add_param(:application_id, 'foo')
28
+ }
29
+ it { obj[:application_id].should eql 'foo' }
30
+ it { obj['applicationId'].should eql 'foo' }
31
+ it { obj.to_hash.should be_include 'applicationId' }
32
+ it { obj.to_hash.should_not be_include 'application_id' }
33
+ end
34
+
35
+ context "invalid param" do
36
+ before {
37
+ obj.invalid_params_action = :raise
38
+ }
39
+ it { lambda { obj.add_param(:app_id, 'foo') }.should raise_error(RakutenApi::Error) }
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,37 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Client do
6
+ let(:client) {
7
+ described_class.new do |params|
8
+ params.add_param :genre_id, 0
9
+ end
10
+ }
11
+
12
+ describe '#request' do
13
+ let(:response) {
14
+ VCR.use_cassette('genre_search_response') do
15
+ client.request
16
+ end
17
+ }
18
+ it { response.should be_kind_of RakutenApi::GenreSearch::Response }
19
+ context :current do
20
+ subject { response.current }
21
+ it { should be_kind_of RakutenApi::GenreSearch::Model }
22
+ its(:genre_id) { should eql 0 }
23
+ its(:genre_name) { should eql '' }
24
+ its(:genre_level) { should eql 0 }
25
+ end
26
+ end
27
+
28
+ describe '.root_categories' do
29
+ let(:response) {
30
+ VCR.use_cassette('genre_search_response') do
31
+ described_class.root_categories
32
+ end
33
+ }
34
+ it { response.should be_kind_of Array }
35
+ it { response.first.should be_kind_of RakutenApi::GenreSearch::Model }
36
+ end
37
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Model do
6
+ describe ".from_hash" do
7
+ let(:data) {
8
+ {
9
+ 'genreId' => '1000',
10
+ 'genreName' => 'foo',
11
+ 'genreLevel' => '1'
12
+ }
13
+ }
14
+ subject { described_class.from_hash(data) }
15
+ its(:genre_id) { should eql 1000 }
16
+ its(:genre_name) { should eql 'foo' }
17
+ its(:genre_level) { should eql 1 }
18
+ end
19
+
20
+ describe "#to_hash" do
21
+ subject {
22
+ described_class.new.tap do |o|
23
+ o.genre_id = 1
24
+ o.genre_name = 'foo'
25
+ o.genre_level = 20
26
+ end.to_hash
27
+ }
28
+ its([:genre_id]) { should eql 1 }
29
+ its([:genre_name]) { should eql 'foo' }
30
+ its([:genre_level]) { should eql 20 }
31
+ end
32
+ end
@@ -0,0 +1,47 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::GenreSearch::Response do
6
+ let(:client) {
7
+ RakutenApi::GenreSearch::Client.new do |params|
8
+ params.add_param :genre_id, genre_id
9
+ end
10
+ }
11
+
12
+ let(:response) {
13
+ VCR.use_cassette('genre_search_response_' + genre_id.to_s) do
14
+ client.get
15
+ end
16
+ }
17
+
18
+ context 'root_category' do
19
+ let(:genre_id) { 0 }
20
+ subject { described_class.new(response) }
21
+ its(:status) { should eql 200 }
22
+ its(:body) { should be }
23
+ its(:children) { should be_kind_of Array }
24
+ its('children.first') { should be_kind_of RakutenApi::GenreSearch::Model }
25
+ end
26
+
27
+ context 'level 1 category' do
28
+ let(:genre_id) { 551169 }
29
+ let(:obj) { described_class.new(response) }
30
+ it { obj.parents.should eql [] }
31
+ it { obj.children.should be_kind_of Array }
32
+ it { obj.current.genre_level.should eql 1 }
33
+ end
34
+
35
+ context "level 2 category" do
36
+ let(:genre_id) { 551172 }
37
+ let(:obj) { described_class.new(response) }
38
+ context '#parents' do
39
+ subject { obj.parents }
40
+ it { should be_kind_of Array }
41
+ context "first" do
42
+ subject { obj.parents.first }
43
+ its(:genre_level) { should eql 1 }
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ describe RakutenApi::ItemRanking::Client do
7
+ let(:client) {
8
+ described_class.new
9
+ }
10
+ describe '#get' do
11
+ let(:response) {
12
+ VCR.use_cassette('item_ranking_response') do
13
+ client.get
14
+ end
15
+ }
16
+ it { response.should be_kind_of ::Faraday::Response }
17
+ it { JSON.parse(response.body)['title'].should eql "【楽天市場】ランキング市場 【総合】" }
18
+ end
19
+ end
@@ -0,0 +1,19 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemRanking::Model do
6
+ describe '.from_hash' do
7
+ context "ItemRankingData" do
8
+ let(:hash_data) {
9
+ {
10
+ "rank" => 10,
11
+ "carrier" => 1,
12
+ }
13
+ }
14
+ subject { described_class.from_hash(hash_data) }
15
+ its(:rank) { should eql 10 }
16
+ its(:carrier) { should eql 1 }
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,64 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemRanking::Response do
6
+ let(:client) { RakutenApi::ItemRanking::Client.new }
7
+ let(:response) {
8
+ VCR.use_cassette('item_ranking_response') do
9
+ client.get
10
+ end
11
+ }
12
+
13
+ describe '#initialize' do
14
+ let(:obj) { described_class.new(response) }
15
+ it { obj.title.should == '【楽天市場】ランキング市場 【総合】' }
16
+ it { obj.last_build_date.should be_kind_of DateTime }
17
+ it { obj.page.should eql 1 }
18
+ end
19
+
20
+ describe '#simple_mapping' do
21
+ let(:obj) { described_class.new(response).simple_mapping }
22
+ it { obj.should be_kind_of Array }
23
+ it { obj.first.should be_kind_of ::RakutenApi::ItemRanking::Model }
24
+ # 基本30件だが、出てこない場合がある様子
25
+ # xit {
26
+ # obj.each_with_index do |o, i|
27
+ # o.rank.should == i + 1
28
+ # end
29
+ # }
30
+ end
31
+
32
+ describe '#next_ranking' do
33
+ let(:obj) { described_class.new(response, client.params) }
34
+ let(:next_ranking) {
35
+ VCR.use_cassette('item_ranking_response_next_ranking') do
36
+ obj.next_ranking
37
+ end
38
+ }
39
+ it { next_ranking.should be_kind_of ::RakutenApi::ItemRanking::Response }
40
+ it { next_ranking.page.should eql 2 }
41
+
42
+ describe '#prev_ranking' do
43
+ let(:prev_ranking) {
44
+ VCR.use_cassette('item_ranking_response_prev_ranking') do
45
+ next_ranking.prev_ranking
46
+ end
47
+ }
48
+ it { prev_ranking.should be_kind_of ::RakutenApi::ItemRanking::Response }
49
+ it { prev_ranking.page.should eql 1 }
50
+ end
51
+ end
52
+
53
+ context 'error_response' do
54
+ let(:error_response) {
55
+ client.add_param :page, 0
56
+ VCR.use_cassette('item_ranking_error_response') do
57
+ client.request
58
+ end
59
+ }
60
+ it { error_response.should be_kind_of ::RakutenApi::ItemRanking::Response }
61
+ it { error_response.should be_error }
62
+ it { error_response.error_message.should == 'wrong_parameter: page must be over 1' }
63
+ end
64
+ end
@@ -0,0 +1,35 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+ require 'json'
5
+
6
+ describe RakutenApi::ItemSearch::Client do
7
+ let(:client) {
8
+ described_class.new do |params|
9
+ params.add_param :keyword, 'りんご'
10
+ params.add_param :hits, 2
11
+ end
12
+ }
13
+ describe '#get' do
14
+ let(:response) {
15
+ VCR.use_cassette('item_search_response') do
16
+ client.get
17
+ end
18
+ }
19
+ it { response.should be_kind_of ::Faraday::Response }
20
+ it { JSON.parse(response.body)['hits'].should eql 2 }
21
+
22
+ it "bad request" do
23
+ described_class.new.get.status.should eql 400
24
+ end
25
+ end
26
+
27
+ describe '#request' do
28
+ let(:response) {
29
+ VCR.use_cassette('item_search_response') do
30
+ client.request
31
+ end
32
+ }
33
+ it { response.should be_kind_of ::RakutenApi::ItemSearch::Response }
34
+ end
35
+ end
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RakutenApi::ItemSearch::Model do
6
+ describe '.from_hash' do
7
+ context "BooleanData" do
8
+ let(:hash_data) {
9
+ {
10
+ "imageFlag" => 1,
11
+ "availability" => 1,
12
+ "taxFlag" => 0,
13
+ "postageFlag" => 1,
14
+ "creditCardFlag" => 1,
15
+ "shopOfTheYearFlag"=> 0,
16
+ "shipOverseasFlag"=> 0,
17
+ "asurakuFlag"=> 0,
18
+ "giftFlag" => 0,
19
+ }
20
+ }
21
+ subject { described_class.from_hash(hash_data) }
22
+ its(:image_flag) { should be_true }
23
+ its(:availability) { should be_true }
24
+ its(:tax_flag) { should be_false }
25
+ its(:postage_flag) { should be_true }
26
+ its(:credit_card_flag) { should be_true }
27
+ its(:shop_of_the_year_flag) { should be_false }
28
+ its(:ship_overseas_flag) { should be_false }
29
+ its(:asuraku_flag) { should be_false }
30
+ its(:gift_flag) { should be_false }
31
+ end
32
+ end
33
+ end