rakuten-api 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e809c4972052b855f3ae4ab121bde40af51d3389
4
+ data.tar.gz: 29dc5d316ce711d816a8de9d3073c07c372dfd87
5
+ SHA512:
6
+ metadata.gz: 532b424d6c15f75cbea06823aa6a53bdaa9ec9485db9e448ef1f6f0b3e7dd760e59fc6f5eaa58c827996793f6c9696eb3df80f76783cf28787d93db8b843f283
7
+ data.tar.gz: 3cd8620888d3944327da4efb851c36c50ed41c322d36e715718ab9d9249f7a843dc669386b5a6ac1a1d55c97f7d49f1d2e4958f1976fa0ee84b6603e6ba7d53d
@@ -0,0 +1,18 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ example/*.yml
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in rakuten-api.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 shoprev
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,96 @@
1
+ # Rakuten::Api
2
+
3
+ Ruby Rakuten Web API fully supported
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'rakuten-api'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install rakuten-api
18
+
19
+ ## Usage
20
+
21
+ ```ruby
22
+ require "rakuten/api"
23
+
24
+ # configure
25
+ Rakuten::Api.configure do |options|
26
+ options[:appid] = 'your api id'
27
+ options[:affiliate_id] = "your affiliate id"
28
+ end
29
+
30
+ # Item Search API v1
31
+ res = Rakuten::Api.get(Rakuten::Api::Ichiba::Search,{:genreId => "101240"})
32
+ res.code # 200
33
+ res.message # "OK"
34
+ res["Items"].each do |v|
35
+ name = v["Item"]["itemName"]
36
+ ...
37
+ end
38
+ ```
39
+ See the [examples directory](https://github.com/shoprev/rakuten-api/tree/master/example) for more usage.
40
+ ```ruby
41
+ # Rakuten Ichiba API
42
+ Rakuten::Api::Ichiba::Search # Ichiba Item Search API (version:2013-08-05)
43
+ Rakuten::Api::Ichiba::GenreSearch # Ichiba Genre Search API (version:2012-07-23)
44
+ Rakuten::Api::Ichiba::Ranking # Ichiba Item Ranking API (version:2012-09-27)
45
+ # Rakuten Product API
46
+ Rakuten::Api::Product::Search # Product Search API (version:2010-11-18)
47
+ Rakuten::Api::Product::DetailSearch # Product Detail Search API (version:2011-07-14)
48
+ Rakuten::Api::Product::GenreSearch # Product Genre Search API (version:2010-11-18)
49
+ # Rakuten Books API
50
+ Rakuten::Api::Books::TotalSearch # Books Total Search API (version:2013-05-22)
51
+ Rakuten::Api::Books::BookSearch # Books Book Search API (version:2013-05-22)
52
+ Rakuten::Api::Books::CdSearch # Books CD Search API (version:2013-05-22)
53
+ Rakuten::Api::Books::DvdSearch # Books DVD Search API (version:2013-05-22)
54
+ Rakuten::Api::Books::ForeignBookSearch # Books Foreign Book Search API (version:2013-05-22)
55
+ Rakuten::Api::Books::MagazineSearch # Books Magazine Search API (version:2013-05-22)
56
+ Rakuten::Api::Books::GameSearch # Books Game Search API (version:2013-05-22)
57
+ Rakuten::Api::Books::SoftwareSearch # Books Software Search API (version:2013-05-22)
58
+ Rakuten::Api::Books::GenreSearch # Books Genre Search API (version:2012-11-28)
59
+ # Rakuten Auction API
60
+ Rakuten::Api::Auction::GenreSearch # Auction Genre Search API (version:2012-09-27)
61
+ Rakuten::Api::Auction::GenreKeywordSearch # Auction Genre Keyword Search API (version:2012-09-27)
62
+ Rakuten::Api::Auction::Search # Auction Item Search API (version:2013-01-10)
63
+ Rakuten::Api::Auction::CodeSearch # Auction Item Code Search API (version:2012-10-10)
64
+ # Rakuten Travel API
65
+ Rakuten::Api::Travel::Search # Travel Search API (version:2009-10-20)
66
+ Rakuten::Api::Travel::DetailSearch # Travel Detail Search API (version:2009-09-09)
67
+ Rakuten::Api::Travel::VacantSearch # Travel Vacant Search API (version:2009-10-20)
68
+ Rakuten::Api::Travel::AreaCode # Travel Area Code API (version:2009-03-26)
69
+ Rakuten::Api::Travel::KeywordSearch # Travel Keyword Search API (version:2009-10-20)
70
+ Rakuten::Api::Travel::ChainList # Travel Chain List API (version:2009-05-12)
71
+ Rakuten::Api::Travel::Ranking # Travel Ranking API (version:2009-06-25)
72
+ # Rakuten Bookmark API
73
+ Rakuten::Api::Bookmark::List # Favorite Bookmark List API (version:2012-06-27)
74
+ Rakuten::Api::Bookmark::Add # Favorite Bookmark Add API (version:2012-06-27)
75
+ Rakuten::Api::Bookmark::Delete # Favorite Bookmark Delete API (version:2012-06-27)
76
+ # Rakuten Recipe API
77
+ Rakuten::Api::Recipe::CategoryList # Recipe Category List API (version:2012-11-21)
78
+ Rakuten::Api::Recipe::CategoryRanking # Recipe Category Ranking API (version:2012-11-21)
79
+ # Rakuten GORA API
80
+ Rakuten::Api::Gora::Search # Gora Search API (version:2010-06-30)
81
+ Rakuten::Api::Gora::DetailSearch # Gora Detail Search API (version:2010-06-30)
82
+ Rakuten::Api::Gora::PlanSearch # Gora Plan Search API (version:2012-12-10)
83
+ # Rakuten Etc API
84
+ Rakuten::Api::Etc::DynamicAd # Dynamic Ad API
85
+ Rakuten::Api::Etc::DynamicAdTravel # Dynamic Ad Travel API
86
+ Rakuten::Api::Etc::HighCommissionShop # High Commission Shop API (version:2012-03-13)
87
+ ```
88
+ Refer to [Rakuten Web API documentation](https://webservice.rakuten.co.jp/document/) for more infomation.
89
+
90
+ ## Contributing
91
+
92
+ 1. Fork it
93
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
94
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
95
+ 4. Push to the branch (`git push origin my-new-feature`)
96
+ 5. Create new Pull Request
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,26 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Auction Genre Search API (version:2012-09-27)
4
+ res = Rakuten::Api.get(Rakuten::Api::Auction::GenreSearch,{:auctionGenreId => "0"})
5
+ res["children"].each do |v|
6
+ p v["child"]["genreName"]
7
+ end
8
+
9
+ # Auction Genre Keyword Search API (version:2012-09-27)
10
+ res = Rakuten::Api.get(Rakuten::Api::Auction::GenreKeywordSearch,{:keyword => "CD"})
11
+ res["auctionGenreList"].each do |v|
12
+ p v["fullGenrePath"]
13
+ end
14
+
15
+ # Auction Item Search API (version:2013-01-10)
16
+ res = Rakuten::Api.get(Rakuten::Api::Auction::Search,{:keyword => "CD"})
17
+ res["Items"].each do |v|
18
+ p v["Item"]["itemName"]
19
+ end
20
+
21
+ # Auction Item Code Search API (version:2012-10-10)
22
+ res = Rakuten::Api.get(Rakuten::Api::Auction::CodeSearch,{:itemCode => "i:mycloset:10006143"})
23
+ res["Items"].each do |v|
24
+ p v["Item"]["itemName"]
25
+ end
26
+
@@ -0,0 +1,15 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Favorite Bookmark List API (version:2012-06-27)
4
+ res = Rakuten::Api.get(Rakuten::Api::Bookmark::List,{:hits => "10"})
5
+ res["items"].each do |v|
6
+ p v["item"]["itemName"]
7
+ end
8
+
9
+ Favorite Bookmark Add API (version:2012-06-27)
10
+ res = Rakuten::Api.get(Rakuten::Api::Bookmark::Add,{:itemCode => "donya:10657590"})
11
+ p res["bookmarkId"]
12
+
13
+ # Favorite Bookmark Delete API (version:2012-06-27)
14
+ res = Rakuten::Api.get(Rakuten::Api::Bookmark::Delete,{:bookmarkId => "4639852"})
15
+ p res["affectedCount"]
@@ -0,0 +1,55 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Books Total Search API (version:2013-05-22)
4
+ res = Rakuten::Api.get(Rakuten::Api::Books::TotalSearch,{:booksGenreId => "000"})
5
+ res["Items"].each do |v|
6
+ p v["Item"]["title"]
7
+ end
8
+
9
+ # Books Book Search API (version:2013-05-22)
10
+ res = Rakuten::Api.get(Rakuten::Api::Books::BookSearch,{:booksGenreId => "001004008"})
11
+ res["Items"].each do |v|
12
+ p v["Item"]["title"]
13
+ end
14
+
15
+ # Books CD Search API (version:2013-05-22)
16
+ res = Rakuten::Api.get(Rakuten::Api::Books::CdSearch,{:booksGenreId => "002"})
17
+ res["Items"].each do |v|
18
+ p v["Item"]["title"]
19
+ end
20
+
21
+ # Books DVD Search API (version:2013-05-22)
22
+ res = Rakuten::Api.get(Rakuten::Api::Books::DvdSearch,{:booksGenreId => "003"})
23
+ res["Items"].each do |v|
24
+ p v["Item"]["title"]
25
+ end
26
+
27
+ # Books Foreign Book Search API (version:2013-05-22)
28
+ res = Rakuten::Api.get(Rakuten::Api::Books::ForeignBookSearch,{:booksGenreId => "005407"})
29
+ res["Items"].each do |v|
30
+ p v["Item"]["title"]
31
+ end
32
+
33
+ # Books Magazine Search API (version:2013-05-22)
34
+ res = Rakuten::Api.get(Rakuten::Api::Books::MagazineSearch,{:booksGenreId => "007604001"})
35
+ res["Items"].each do |v|
36
+ p v["Item"]["title"]
37
+ end
38
+
39
+ # Books Game Search API (version:2013-05-22)
40
+ res = Rakuten::Api.get(Rakuten::Api::Books::GameSearch,{:booksGenreId => "006"})
41
+ res["Items"].each do |v|
42
+ p v["Item"]["title"]
43
+ end
44
+
45
+ # Books Software Search API (version:2013-05-22)
46
+ res = Rakuten::Api.get(Rakuten::Api::Books::SoftwareSearch,{:booksGenreId => "004"})
47
+ res["Items"].each do |v|
48
+ p v["Item"]["title"]
49
+ end
50
+
51
+ # Books Genre Search API (version:2012-11-28)
52
+ res = Rakuten::Api.get(Rakuten::Api::Books::GenreSearch,{:booksGenreId => "000"})
53
+ res["children"].each do |v|
54
+ p v["child"]["booksGenreName"]
55
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Dynamic Ad API
4
+ res = Rakuten::Api.get(Rakuten::Api::Etc::DynamicAd,{:url => 'http://plaza.rakuten.co.jp/isblog/diary/200705230001/'})
5
+ res["Body"]["Ads"]["Ad"].each do |v|
6
+ p v["ItemName"]
7
+ end
8
+
9
+ # Dynamic Ad Travel API
10
+ res = Rakuten::Api.get(Rakuten::Api::Etc::DynamicAdTravel,{:url => 'http://plaza.rakuten.co.jp/travelblog02/diary/200706140000/'})
11
+ res["Body"]["Ads"]["Ad"].each do |v|
12
+ p v["HotelName"]
13
+ end
14
+
15
+ # High Commission Shop API (version:2012-03-13)
16
+ res = Rakuten::Api.get(Rakuten::Api::Etc::HighCommissionShop,{:hits => '10'})
17
+ res["Body"]["HighCommissionShop"]["Shops"]["Shop"].each do |v|
18
+ p v["shopName"]
19
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Gora Search API (version:2010-06-30)
4
+ res = Rakuten::Api.get(Rakuten::Api::Gora::Search,{:areaCode => "1"})
5
+ res["Body"]["GoraGolfCourseSearch"]["Items"]["Item"].each do |v|
6
+ p v["golfCourseName"]
7
+ end
8
+
9
+ # Gora Detail Search API (version:2010-06-30)
10
+ res = Rakuten::Api.get(Rakuten::Api::Gora::DetailSearch,{:golfCourseId => "70008"})
11
+ res["Body"]["GoraGolfCourseDetail"]["Item"].each do |v|
12
+ p v["golfCourseName"]
13
+ end
14
+
15
+ # Gora Plan Search API (version:2012-12-10)
16
+ res = Rakuten::Api.get(Rakuten::Api::Gora::PlanSearch,{:areaCode => "1",:playDate => "2013-09-28"})
17
+ res["Body"]["GoraPlanSearch"]["Items"]["Item"].each do |v|
18
+ p v["golfCourseId"]
19
+ end
@@ -0,0 +1,10 @@
1
+ require "yaml"
2
+ require "rakuten/api"
3
+
4
+ config = YAML.load_file(File.dirname(__FILE__)+'/config.yml')
5
+
6
+ Rakuten::Api.configure do |options|
7
+ options[:applicationId] = config['applicationId']
8
+ options[:affiliateId] = config['affiliateId']
9
+ # options[:access_token] = config['access_token']
10
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Ichiba Item Search API (version:2013-08-05)
4
+ res = Rakuten::Api.get(Rakuten::Api::Ichiba::Search,{:genreId => "101240"})
5
+ res["Items"].each do |v|
6
+ p v["Item"]["itemName"]
7
+ end
8
+
9
+ # Ichiba Genre Search API (version:2012-07-23)
10
+ res = Rakuten::Api.get(Rakuten::Api::Ichiba::GenreSearch,{:genreId => "101240"})
11
+ res["children"].each do |v|
12
+ p v["child"]["genreName"]
13
+ end
14
+
15
+ # Ichiba Item Ranking API (version:2012-09-27)
16
+ res = Rakuten::Api.get(Rakuten::Api::Ichiba::Ranking,{:genreId => "101240"})
17
+ res["Items"].each do |v|
18
+ p v["Item"]["itemName"]
19
+ end
@@ -0,0 +1,19 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Product Search API (version:2010-11-18)
4
+ res = Rakuten::Api.get(Rakuten::Api::Product::Search,{:genreId => "101240"})
5
+ res["Body"]["ProductSearch"]["Items"]["Item"].each do |v|
6
+ p v["productName"]
7
+ end
8
+
9
+ # Product Detail Search API (version:2011-07-14)
10
+ res = Rakuten::Api.get(Rakuten::Api::Product::DetailSearch,{:productId => "182649bd754f31e43123378ea108411a"})
11
+ res["Body"]["ProductDetail"]["Item"].each do |v|
12
+ p v["productNo"]
13
+ end
14
+
15
+ # Product Genre Search API (version:2010-11-18)
16
+ res = Rakuten::Api.get(Rakuten::Api::Product::GenreSearch,{:genreId => "101240"})
17
+ res["Body"]["ProductGenreInfo"]["GenreInformation"]["child"].each do |v|
18
+ p v["genreName"]
19
+ end
@@ -0,0 +1,13 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Recipe Category List API (version:2012-11-21)
4
+ res = Rakuten::Api.get(Rakuten::Api::Recipe::CategoryList,{:categoryType => "large"})
5
+ res["result"]["large"].each do |v|
6
+ p v["categoryName"]
7
+ end
8
+
9
+ # Recipe Category Ranking API (version:2012-11-21)
10
+ res = Rakuten::Api.get(Rakuten::Api::Recipe::CategoryRanking,{:categoryId => "10"})
11
+ res["result"].each do |v|
12
+ p v["recipeTitle"]
13
+ end
@@ -0,0 +1,43 @@
1
+ require File.expand_path(File.dirname(__FILE__) + '/helper')
2
+
3
+ # Travel Search API (version:2009-10-20)
4
+ res = Rakuten::Api.get(Rakuten::Api::Travel::Search,{:largeClassCode => "japan",:middleClassCode => "hokkaido",:smallClassCode => "sapporo",:detailClassCode => "A"})
5
+ res['Body']['SimpleHotelSearch']['hotel'].each do |v|
6
+ p v['hotelBasicInfo']["hotelName"]
7
+ end
8
+
9
+ # Travel Detail Search API (version:2009-09-09)
10
+ res = Rakuten::Api.get(Rakuten::Api::Travel::DetailSearch,{:hotelNo => "142610"})
11
+ res['Body']['HotelDetailSearch']['hotel'].each do |v|
12
+ p v['hotelBasicInfo']["hotelName"]
13
+ end
14
+
15
+ # Travel Vacant Search API (version:2009-10-20)
16
+ res = Rakuten::Api.get(Rakuten::Api::Travel::VacantSearch,{:checkinDate => "2013-09-26",:checkoutDate => "2013-09-27",:largeClassCode => "japan",:middleClassCode => "hokkaido",:smallClassCode => "sapporo",:detailClassCode => "A"})
17
+ res["Body"]["hotel"].each do |v|
18
+ p v["hotelInfo"][0]["hotelBasicInfo"]["hotelName"]
19
+ end
20
+
21
+ # Travel Area Code API (version:2009-03-26)
22
+ res = Rakuten::Api.get(Rakuten::Api::Travel::AreaCode)
23
+ res["Body"]["GetAreaClassInfo"]["largeClass"]["middleClass"].each do |v|
24
+ p v["smallClass"]
25
+ end
26
+
27
+ # Travel Keyword Search API (version:2009-10-20)
28
+ res = Rakuten::Api.get(Rakuten::Api::Travel::KeywordSearch,{:keyword => 'au'})
29
+ res['Body']['KeywordHotelSearch']['hotel'].each do |v|
30
+ p v["hotelBasicInfo"]["hotelName"]
31
+ end
32
+
33
+ # Travel Chain List API (version:2009-05-12)
34
+ res = Rakuten::Api.get(Rakuten::Api::Travel::ChainList)
35
+ res["Body"]["GetHotelChainList"]["hotelChainList"][0]["hotelChain"].each do |v|
36
+ p v["hotelChainName"]
37
+ end
38
+
39
+ # Travel Ranking API (version:2009-06-25)
40
+ res = Rakuten::Api.get(Rakuten::Api::Travel::Ranking,{:genre => "all"})
41
+ res["Body"]["HotelRanking"]["ranking"][0]["hotelRankInfo"].each do |v|
42
+ p v["hotelName"]
43
+ end
@@ -0,0 +1,43 @@
1
+ require "net/http"
2
+ require "uri"
3
+ require "cgi"
4
+ require "json"
5
+ require "rakuten/api/version"
6
+ require "rakuten/api/response"
7
+ require "rakuten/api/request"
8
+ require "rakuten/api/auction"
9
+ require "rakuten/api/bookmark"
10
+ require "rakuten/api/books"
11
+ require "rakuten/api/etc"
12
+ require "rakuten/api/gora"
13
+ require "rakuten/api/ichiba"
14
+ require "rakuten/api/product"
15
+ require "rakuten/api/recipe"
16
+ require "rakuten/api/travel"
17
+
18
+ module Rakuten
19
+
20
+ class Api
21
+
22
+ @@options = {}
23
+
24
+ class << self
25
+
26
+ def options
27
+ @@options
28
+ end
29
+
30
+ def configure(&proc)
31
+ raise ArgumentError, "Block is required." unless block_given?
32
+ yield @@options
33
+ end
34
+
35
+ def get(method,opts={})
36
+ eval method+"(#{opts})"
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,40 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Auction
6
+
7
+ GenreSearch = "Rakuten::Api::Auction.genre_search"
8
+ GenreKeywordSearch = "Rakuten::Api::Auction.genre_keyword_search"
9
+ Search = "Rakuten::Api::Auction.search"
10
+ CodeSearch = "Rakuten::Api::Auction.code_search"
11
+
12
+ class << self
13
+
14
+ # Auction Genre Search API (version:2012-09-27)
15
+ def genre_search(opts={})
16
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/AuctionGenreId/Search/20120927", opts.merge(Rakuten::Api.options))
17
+ end
18
+
19
+ # Auction Genre Keyword Search API (version:2012-09-27)
20
+ def genre_keyword_search(opts={})
21
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/AuctionGenreKeyword/Search/20120927", opts.merge(Rakuten::Api.options))
22
+ end
23
+
24
+ # Auction Item Search API (version:2013-01-10)
25
+ def search(opts={})
26
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/AuctionItem/Search/20130110", opts.merge(Rakuten::Api.options))
27
+ end
28
+
29
+ # Auction Item Code Search API (version:2012-10-10)
30
+ def code_search(opts={})
31
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/AuctionItemCode/Search/20121010", opts.merge(Rakuten::Api.options))
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+
38
+ end
39
+
40
+ end
@@ -0,0 +1,34 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Bookmark
6
+
7
+ List = "Rakuten::Api::Bookmark.list"
8
+ Add = "Rakuten::Api::Bookmark.add"
9
+ Delete = "Rakuten::Api::Bookmark.delete"
10
+
11
+ class << self
12
+
13
+ # Favorite Bookmark List API (version:2012-06-27)
14
+ def list(opts={})
15
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/FavoriteBookmark/List/20120627", opts.merge(Rakuten::Api.options))
16
+ end
17
+
18
+ # Favorite Bookmark Add API (version:2012-06-27)
19
+ def add(opts={})
20
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/FavoriteBookmark/Add/20120627", opts.merge(Rakuten::Api.options))
21
+ end
22
+
23
+ # Favorite Bookmark Delete API (version:2012-06-27)
24
+ def delete(opts={})
25
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/FavoriteBookmark/Delete/20120627", opts.merge(Rakuten::Api.options))
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,70 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Books
6
+
7
+ TotalSearch = "Rakuten::Api::Books.total_search"
8
+ BookSearch = "Rakuten::Api::Books.book_search"
9
+ CdSearch = "Rakuten::Api::Books.cd_search"
10
+ DvdSearch = "Rakuten::Api::Books.dvd_search"
11
+ ForeignBookSearch = "Rakuten::Api::Books.foreign_book_search"
12
+ MagazineSearch = "Rakuten::Api::Books.magazine_search"
13
+ GameSearch = "Rakuten::Api::Books.game_search"
14
+ SoftwareSearch = "Rakuten::Api::Books.software_search"
15
+ GenreSearch = "Rakuten::Api::Books.genre_search"
16
+
17
+ class << self
18
+
19
+ # Books Total Search API (version:2013-05-22)
20
+ def total_search(opts={})
21
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksTotal/Search/20130522", opts.merge(Rakuten::Api.options))
22
+ end
23
+
24
+ # Books Book Search API (version:2013-05-22)
25
+ def book_search(opts={})
26
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksBook/Search/20130522", opts.merge(Rakuten::Api.options))
27
+ end
28
+
29
+ # Books CD Search API (version:2013-05-22)
30
+ def cd_search(opts={})
31
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksCD/Search/20130522", opts.merge(Rakuten::Api.options))
32
+ end
33
+
34
+ # Books DVD Search API (version:2013-05-22)
35
+ def dvd_search(opts={})
36
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksDVD/Search/20130522", opts.merge(Rakuten::Api.options))
37
+ end
38
+
39
+ # Books Foreign Book Search API (version:2013-05-22)
40
+ def foreign_book_search(opts={})
41
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksForeignBook/Search/20130522", opts.merge(Rakuten::Api.options))
42
+ end
43
+
44
+ # Books Magazine Search API (version:2013-05-22)
45
+ def magazine_search(opts={})
46
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksMagazine/Search/20130522", opts.merge(Rakuten::Api.options))
47
+ end
48
+
49
+ # Books Game Search API (version:2013-05-22)
50
+ def game_search(opts={})
51
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksGame/Search/20130522", opts.merge(Rakuten::Api.options))
52
+ end
53
+
54
+ # Books Software Search API (version:2013-05-22)
55
+ def software_search(opts={})
56
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksSoftware/Search/20130522", opts.merge(Rakuten::Api.options))
57
+ end
58
+
59
+ # Books Genre Search API (version:2012-11-28)
60
+ def genre_search(opts={})
61
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/BooksGenre/Search/20121128", opts.merge(Rakuten::Api.options))
62
+ end
63
+
64
+ end
65
+
66
+ end
67
+
68
+ end
69
+
70
+ end
@@ -0,0 +1,39 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Etc
6
+
7
+ DynamicAd = "Rakuten::Api::Etc.dynamic_ad"
8
+ DynamicAdTravel = "Rakuten::Api::Etc.dynamic_ad_travel"
9
+ HighCommissionShop = "Rakuten::Api::Etc.high_commission_shop"
10
+
11
+ class << self
12
+
13
+ # Dynamic Ad API
14
+ def dynamic_ad(opts={})
15
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
16
+ Rakuten::Request.get("http://dynamic.rakuten.co.jp/rcm/1.0/i/json", opts.merge(Rakuten::Api.options))
17
+ end
18
+
19
+ # Dynamic Ad Travel API
20
+ def dynamic_ad_travel(opts={})
21
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
22
+ Rakuten::Request.get("http://dynamic.rakuten.co.jp/rcm/1.0/t/json", opts.merge(Rakuten::Api.options))
23
+ end
24
+
25
+ # High Commission Shop API (version:2012-03-13)
26
+ def high_commission_shop(opts={})
27
+ opts[:version] = '2012-03-13' unless opts.key?(:version)
28
+ opts[:operation] = 'HighCommissionShop' unless opts.key?(:operation)
29
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
30
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+
37
+ end
38
+
39
+ end
@@ -0,0 +1,43 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Gora
6
+
7
+ Search = "Rakuten::Api::Gora.search"
8
+ DetailSearch = "Rakuten::Api::Gora.detail_search"
9
+ PlanSearch = "Rakuten::Api::Gora.plan_search"
10
+
11
+ class << self
12
+
13
+ # Gora Search API (version:2010-06-30)
14
+ def search(opts={})
15
+ opts[:version] = '2010-06-30' unless opts.key?(:version)
16
+ opts[:operation] = 'GoraGolfCourseSearch' unless opts.key?(:operation)
17
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
18
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
19
+ end
20
+
21
+ # Gora Detail Search API (version:2010-06-30)
22
+ def detail_search(opts={})
23
+ opts[:version] = '2010-06-30' unless opts.key?(:version)
24
+ opts[:operation] = 'GoraGolfCourseDetail' unless opts.key?(:operation)
25
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
26
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
27
+ end
28
+
29
+ # Gora Plan Search API (version:2012-12-10)
30
+ def plan_search(opts={})
31
+ opts[:version] = '2012-12-10' unless opts.key?(:version)
32
+ opts[:operation] = 'GoraPlanSearch' unless opts.key?(:operation)
33
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
34
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,34 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Ichiba
6
+
7
+ Search = "Rakuten::Api::Ichiba.search"
8
+ GenreSearch = "Rakuten::Api::Ichiba.genre_search"
9
+ Ranking = "Rakuten::Api::Ichiba.ranking"
10
+
11
+ class << self
12
+
13
+ # Ichiba Item Search API (version:2013-08-05)
14
+ def search(opts={})
15
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/IchibaItem/Search/20130805", opts.merge(Rakuten::Api.options))
16
+ end
17
+
18
+ # Ichiba Genre Search API (version:2012-07-23)
19
+ def genre_search(opts={})
20
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/IchibaGenre/Search/20120723", opts.merge(Rakuten::Api.options))
21
+ end
22
+
23
+ # Ichiba Item Ranking API (version:2012-09-27)
24
+ def ranking(opts={})
25
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/IchibaItem/Ranking/20120927", opts.merge(Rakuten::Api.options))
26
+ end
27
+
28
+ end
29
+
30
+ end
31
+
32
+ end
33
+
34
+ end
@@ -0,0 +1,43 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Product
6
+
7
+ Search = "Rakuten::Api::Product.search"
8
+ DetailSearch = "Rakuten::Api::Product.detail_search"
9
+ GenreSearch = "Rakuten::Api::Product.genre_search"
10
+
11
+ class << self
12
+
13
+ # Product Search API (version:2010-11-18)
14
+ def search(opts={})
15
+ opts[:version] = '2010-11-18' unless opts.key?(:version)
16
+ opts[:operation] = 'ProductSearch' unless opts.key?(:operation)
17
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
18
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
19
+ end
20
+
21
+ # Product Detail Search API (version:2011-07-14)
22
+ def detail_search(opts={})
23
+ opts[:version] = '2011-07-14' unless opts.key?(:version)
24
+ opts[:operation] = 'ProductDetail' unless opts.key?(:operation)
25
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
26
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
27
+ end
28
+
29
+ # Product Genre Search API (version:2010-11-18)
30
+ def genre_search(opts={})
31
+ opts[:version] = '2010-11-18' unless opts.key?(:version)
32
+ opts[:operation] = 'ProductGenreInfo' unless opts.key?(:operation)
33
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
34
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
35
+ end
36
+
37
+ end
38
+
39
+ end
40
+
41
+ end
42
+
43
+ end
@@ -0,0 +1,29 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Recipe
6
+
7
+ CategoryList = "Rakuten::Api::Recipe.category_list"
8
+ CategoryRanking = "Rakuten::Api::Recipe.category_ranking"
9
+
10
+ class << self
11
+
12
+ # Recipe Category List API (version:2012-11-21)
13
+ def category_list(opts={})
14
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/Recipe/CategoryList/20121121", opts.merge(Rakuten::Api.options))
15
+ end
16
+
17
+ # Recipe Category Ranking API (version:2012-11-21)
18
+ def category_ranking(opts={})
19
+ Rakuten::Request.get("https://app.rakuten.co.jp/services/api/Recipe/CategoryRanking/20121121", opts.merge(Rakuten::Api.options))
20
+
21
+ end
22
+
23
+ end
24
+
25
+ end
26
+
27
+ end
28
+
29
+ end
@@ -0,0 +1,12 @@
1
+ module Rakuten
2
+
3
+ class Request
4
+
5
+ def self.get(path,opts)
6
+ uri = URI.parse("#{path}?#{opts.map {|k,v|"#{k}=#{CGI.escape(v)}"}.join('&')}")
7
+ Rakuten::Response.new(Net::HTTP.get_response(uri))
8
+ end
9
+
10
+ end
11
+
12
+ end
@@ -0,0 +1,29 @@
1
+ module Rakuten
2
+
3
+ class Response
4
+
5
+ def initialize(response)
6
+ @response =response
7
+ @body = JSON.parse(@response.body)
8
+ end
9
+
10
+ def code
11
+ @response.code.to_i
12
+ end
13
+
14
+ def message
15
+ @response.message
16
+ end
17
+
18
+ def method_missing(name, *args, &block)
19
+ if @body.respond_to?(name)
20
+ @body.send(name, *args, &block)
21
+ else
22
+ super
23
+ end
24
+ end
25
+
26
+ end
27
+
28
+ end
29
+
@@ -0,0 +1,79 @@
1
+ module Rakuten
2
+
3
+ class Api
4
+
5
+ class Travel
6
+
7
+ Search = "Rakuten::Api::Travel.search"
8
+ DetailSearch = "Rakuten::Api::Travel.detail_search"
9
+ VacantSearch = "Rakuten::Api::Travel.vacant_search"
10
+ AreaCode = "Rakuten::Api::Travel.area_code"
11
+ KeywordSearch = "Rakuten::Api::Travel.keyword_search"
12
+ ChainList = "Rakuten::Api::Travel.chain_list"
13
+ Ranking = "Rakuten::Api::Travel.ranking"
14
+
15
+ class << self
16
+
17
+ # Travel Search API (version:2009-10-20)
18
+ def search(opts={})
19
+ opts[:version] = '2009-10-20' unless opts.key?(:version)
20
+ opts[:operation] = 'SimpleHotelSearch' unless opts.key?(:operation)
21
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
22
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
23
+ end
24
+
25
+ # Travel Detail Search API (version:2009-09-09)
26
+ def detail_search(opts={})
27
+ opts[:version] = '2009-09-09' unless opts.key?(:version)
28
+ opts[:operation] = 'HotelDetailSearch' unless opts.key?(:operation)
29
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
30
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
31
+ end
32
+
33
+ # Travel Vacant Search API (version:2009-10-20)
34
+ def vacant_search(opts={})
35
+ opts[:version] = '2009-10-20' unless opts.key?(:version)
36
+ opts[:operation] = 'VacantHotelSearch' unless opts.key?(:operation)
37
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
38
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
39
+ end
40
+
41
+ # Travel Area Code API (version:2009-03-26)
42
+ def area_code(opts={})
43
+ opts[:version] = '2009-03-26' unless opts.key?(:version)
44
+ opts[:operation] = 'GetAreaClass' unless opts.key?(:operation)
45
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
46
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
47
+ end
48
+
49
+ # Travel Keyword Search API (version:2009-10-20)
50
+ def keyword_search(opts={})
51
+ opts[:version] = '2009-10-20' unless opts.key?(:version)
52
+ opts[:operation] = 'KeywordHotelSearch' unless opts.key?(:operation)
53
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
54
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
55
+ end
56
+
57
+ # Travel Chain List API (version:2009-05-12)
58
+ def chain_list(opts={})
59
+ opts[:version] = '2009-05-12' unless opts.key?(:version)
60
+ opts[:operation] = 'GetHotelChainList' unless opts.key?(:operation)
61
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
62
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
63
+ end
64
+
65
+ # Travel Ranking API (version:2009-06-25)
66
+ def ranking(opts={})
67
+ opts[:version] = '2009-06-25' unless opts.key?(:version)
68
+ opts[:operation] = 'HotelRanking' unless opts.key?(:operation)
69
+ opts[:developerId] = Rakuten::Api.options[:applicationId] unless opts.key?(:developerId)
70
+ Rakuten::Request.get("http://api.rakuten.co.jp/rws/3.0/json", opts.merge(Rakuten::Api.options))
71
+ end
72
+
73
+ end
74
+
75
+ end
76
+
77
+ end
78
+
79
+ end
@@ -0,0 +1,5 @@
1
+ module Rakuten
2
+ class Api
3
+ VERSION = "0.1.0"
4
+ end
5
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'rakuten/api/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "rakuten-api"
8
+ spec.version = Rakuten::Api::VERSION
9
+ spec.authors = ["shoprev"]
10
+ spec.email = ["admin@shoprev.net"]
11
+ spec.description = %q{Ruby Rakuten Web API}
12
+ spec.summary = %q{Ruby Rakuten Web API}
13
+ spec.homepage = "https://github.com/shoprev/rakuten-api"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.3"
22
+ spec.add_development_dependency "rake"
23
+ spec.add_development_dependency "rspec"
24
+ spec.add_development_dependency "vcr"
25
+ spec.add_development_dependency "webmock", "1.11.0"
26
+ end
metadata ADDED
@@ -0,0 +1,143 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rakuten-api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - shoprev
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2013-09-26 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: '1.3'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '1.3'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :development
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: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - '>='
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
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: vcr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
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: webmock
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '='
74
+ - !ruby/object:Gem::Version
75
+ version: 1.11.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '='
81
+ - !ruby/object:Gem::Version
82
+ version: 1.11.0
83
+ description: Ruby Rakuten Web API
84
+ email:
85
+ - admin@shoprev.net
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - .gitignore
91
+ - Gemfile
92
+ - LICENSE.txt
93
+ - README.md
94
+ - Rakefile
95
+ - example/auction.rb
96
+ - example/bookmark.rb
97
+ - example/books.rb
98
+ - example/etc.rb
99
+ - example/gora.rb
100
+ - example/helper.rb
101
+ - example/ichiba.rb
102
+ - example/product.rb
103
+ - example/recipe.rb
104
+ - example/travel.rb
105
+ - lib/rakuten/api.rb
106
+ - lib/rakuten/api/auction.rb
107
+ - lib/rakuten/api/bookmark.rb
108
+ - lib/rakuten/api/books.rb
109
+ - lib/rakuten/api/etc.rb
110
+ - lib/rakuten/api/gora.rb
111
+ - lib/rakuten/api/ichiba.rb
112
+ - lib/rakuten/api/product.rb
113
+ - lib/rakuten/api/recipe.rb
114
+ - lib/rakuten/api/request.rb
115
+ - lib/rakuten/api/response.rb
116
+ - lib/rakuten/api/travel.rb
117
+ - lib/rakuten/api/version.rb
118
+ - rakuten-api.gemspec
119
+ homepage: https://github.com/shoprev/rakuten-api
120
+ licenses:
121
+ - MIT
122
+ metadata: {}
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ required_rubygems_version: !ruby/object:Gem::Requirement
133
+ requirements:
134
+ - - '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ requirements: []
138
+ rubyforge_project:
139
+ rubygems_version: 2.0.3
140
+ signing_key:
141
+ specification_version: 4
142
+ summary: Ruby Rakuten Web API
143
+ test_files: []