aladin-books 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'activesupport'
4
+
5
+ group :development do
6
+ gem "bundler"
7
+ gem 'rspec'
8
+ gem "jeweler", "~> 1.8.3"
9
+ gem "simplecov"
10
+ gem 'webmock'
11
+ gem 'ZenTest'
12
+ gem 'autotest-fsevent'
13
+ gem 'autotest-growl'
14
+ end
@@ -0,0 +1,57 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ ZenTest (4.8.1)
5
+ activesupport (3.2.6)
6
+ i18n (~> 0.6)
7
+ multi_json (~> 1.0)
8
+ addressable (2.2.8)
9
+ autotest-fsevent (0.2.8)
10
+ sys-uname
11
+ autotest-growl (0.2.16)
12
+ crack (0.3.1)
13
+ diff-lcs (1.1.3)
14
+ ffi (1.0.11)
15
+ git (1.2.5)
16
+ i18n (0.6.0)
17
+ jeweler (1.8.4)
18
+ bundler (~> 1.0)
19
+ git (>= 1.2.5)
20
+ rake
21
+ rdoc
22
+ json (1.7.3)
23
+ multi_json (1.3.6)
24
+ rake (0.9.2.2)
25
+ rdoc (3.12)
26
+ json (~> 1.4)
27
+ rspec (2.10.0)
28
+ rspec-core (~> 2.10.0)
29
+ rspec-expectations (~> 2.10.0)
30
+ rspec-mocks (~> 2.10.0)
31
+ rspec-core (2.10.1)
32
+ rspec-expectations (2.10.0)
33
+ diff-lcs (~> 1.1.3)
34
+ rspec-mocks (2.10.1)
35
+ simplecov (0.6.4)
36
+ multi_json (~> 1.0)
37
+ simplecov-html (~> 0.5.3)
38
+ simplecov-html (0.5.3)
39
+ sys-uname (0.9.0)
40
+ ffi (>= 1.0.0)
41
+ webmock (1.8.7)
42
+ addressable (>= 2.2.7)
43
+ crack (>= 0.1.7)
44
+
45
+ PLATFORMS
46
+ ruby
47
+
48
+ DEPENDENCIES
49
+ ZenTest
50
+ activesupport
51
+ autotest-fsevent
52
+ autotest-growl
53
+ bundler
54
+ jeweler (~> 1.8.3)
55
+ rspec
56
+ simplecov
57
+ webmock
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2012 aproxacs
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,45 @@
1
+ ## aladin-books
2
+
3
+ aladin-books is the ruby wrapper of Aladin Search API.(More information about Aladin Search API is from http://blog.aladin.co.kr/ttb/category/16526940?communitytype=MyPaper.)
4
+
5
+ ### Installation
6
+
7
+ You can install aladin-books by using rubygems.
8
+
9
+ gem install aladin-books
10
+
11
+ ### How to use
12
+
13
+ You need a ttb_key to use aladin api. You can get this key from http://www.aladin.co.kr/ttb/wblog_manage.aspx.
14
+ Maybe, you need to register TTB(Thanks to Blogger) service first.(http://www.aladin.co.kr/ttb/wjoinus.aspx)
15
+
16
+ After receiving ttb_key, you are ready to use aladin-books gem.
17
+ Here is a sample example.
18
+
19
+ Aladin::Books.configure do |config|
20
+ config.ttb_key = "aaa"
21
+ config.per_page = 10
22
+ end
23
+ books = Aladin::Books.search "hello"
24
+
25
+ books.first
26
+ books.to_a
27
+ books[1]
28
+ books.each {|b| p b.title }
29
+ books.map {|b| b.title}
30
+
31
+ ## Contributing to aladin-books
32
+
33
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
34
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
35
+ * Fork the project
36
+ * Start a feature/bugfix branch
37
+ * Commit and push until you are happy with your contribution
38
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
39
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
40
+
41
+ ## Copyright
42
+
43
+ Copyright (c) 2012 aproxacs. See LICENSE.txt for
44
+ further details.
45
+
@@ -0,0 +1,38 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "aladin-books"
18
+ gem.homepage = "http://github.com/aproxacs/aladin-books"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{aladin-books is the ruby wrapper of Aladin Search API.}
21
+ gem.description = %Q{aladin-books is the ruby wrapper of Aladin Search API.}
22
+ gem.email = "aproxacs.gmail.com"
23
+ gem.authors = ["aproxacs"]
24
+ # dependencies defined in Gemfile
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ task :default => :test
29
+
30
+ require 'rdoc/task'
31
+ Rake::RDocTask.new do |rdoc|
32
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
33
+
34
+ rdoc.rdoc_dir = 'rdoc'
35
+ rdoc.title = "aladin-books #{version}"
36
+ rdoc.rdoc_files.include('README*')
37
+ rdoc.rdoc_files.include('lib/**/*.rb')
38
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.1.0
@@ -0,0 +1,2 @@
1
+ module Aladin
2
+ end
@@ -0,0 +1,10 @@
1
+ module Aladin
2
+ class Book < OpenStruct
3
+ def initialize(hash = {})
4
+ super(nil)
5
+ hash.each do |key, value|
6
+ send("#{key.to_s.underscore}=", value)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,77 @@
1
+ module Aladin
2
+ class Books < Array
3
+
4
+ class << self
5
+ attr_accessor :ttb_key, :per_page
6
+ def configure
7
+ yield self
8
+ end
9
+
10
+ def search(query, options={})
11
+ set_query(query, options)
12
+ res = Net::HTTP.get_response(uri)
13
+ if res.is_a?(Net::HTTPSuccess)
14
+ body = res.body.gsub(/;?/, "")
15
+ hash = JSON.parse(body) rescue JSON.parse(body.gsub("'", '"'))
16
+
17
+ Books.new(hash)
18
+ end
19
+ end
20
+
21
+ private
22
+ def uri
23
+ @uri ||= URI.parse('http://www.aladin.co.kr/ttb/api/ItemSearch.aspx')
24
+ end
25
+
26
+ def default_params
27
+ {
28
+ :ttbkey => ttb_key,
29
+ :QueryType => "Title",
30
+ :SearchTarget => "Book",
31
+ :output => "js"
32
+ }
33
+ end
34
+
35
+ def set_query(query, options = {})
36
+ options[:page] ||= 1
37
+ options[:per_page] ||= per_page
38
+ params = default_params.update(
39
+ :Query => query,
40
+ :start => 1 + (options[:page]-1)*options[:per_page],
41
+ :MaxResults => options[:per_page]
42
+ )
43
+
44
+ uri.query = URI.encode_www_form(params)
45
+ end
46
+ end
47
+
48
+ attr_accessor :total, :page, :per_page, :error_code, :error_msg
49
+
50
+ def initialize(hash)
51
+ if hash["errorCode"]
52
+ set_error(hash)
53
+ else
54
+ set_page_info(hash)
55
+
56
+ super hash["item"].map {|i| Book.new(i)}
57
+ end
58
+ end
59
+
60
+ def error?
61
+ @error_code.present?
62
+ end
63
+
64
+ private
65
+ def set_error(hash)
66
+ @error_code = hash["errorCode"]
67
+ @error_msg = hash["errorMessage"]
68
+ end
69
+
70
+ def set_page_info(hash)
71
+ @total = hash["totalResults"]
72
+ @page = 1 + (hash["startIndex"]/hash["itemsPerPage"])
73
+ @per_page = hash["itemsPerPage"]
74
+ end
75
+
76
+ end
77
+ end
@@ -0,0 +1,8 @@
1
+ require "net/http"
2
+ require "json"
3
+ require "active_support"
4
+ require "active_support/core_ext"
5
+ require "ostruct"
6
+ require "aladin"
7
+ require "aladin/book"
8
+ require "aladin/books"
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ module Aladin
4
+ describe Book do
5
+ describe "#initialize" do
6
+ it "receives hash as paramenter and assigns attributes with hash" do
7
+ book = Book.new title: "ruby rules"
8
+ book.title.should == "ruby rules"
9
+ end
10
+
11
+ it "key is underscored if key is camelstring" do
12
+ book = Book.new :categoryId => 439
13
+ book.category_id.should == 439
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,149 @@
1
+ require 'spec_helper'
2
+
3
+ module Aladin
4
+ describe Books do
5
+ let(:ttb_key) { "TTB_Key" }
6
+
7
+ describe ".configure" do
8
+ it "sets ttb_key" do
9
+ Books.configure do |config|
10
+ config.ttb_key = ttb_key
11
+ end
12
+
13
+ Books.ttb_key.should == ttb_key
14
+ end
15
+
16
+ it "sets per_page" do
17
+ Books.configure do |config|
18
+ config.per_page = 20
19
+ end
20
+
21
+ Books.per_page.should == 20
22
+ end
23
+ end
24
+
25
+ describe ".search" do
26
+ let(:query) { "hello" }
27
+ let(:per_page) { 10 }
28
+ let(:body) { File.read(File.join(File.dirname(__FILE__), "../data/hello_result.txt")) }
29
+
30
+ before(:each) do
31
+ Books.configure {|c| c.ttb_key = ttb_key; c.per_page = per_page}
32
+
33
+ stub_request(:get, "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx")
34
+ .with(:query => hash_including(:Query => query))
35
+ .to_return(:body => body)
36
+ end
37
+
38
+ it "returns books" do
39
+ books = Books.search query
40
+
41
+ books.should be_a(Books)
42
+ end
43
+
44
+ it "sends request to aladin" do
45
+ Books.search query
46
+
47
+ query_params = {
48
+ :ttbkey => ttb_key,
49
+ :Query => query,
50
+ :start => "1",
51
+ :MaxResults => per_page.to_s,
52
+ :SearchTarget => "Book",
53
+ :output => "js"
54
+ }
55
+ a_request(:get, "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx")
56
+ .with(:query => hash_including(query_params)).should have_been_made
57
+ end
58
+
59
+ it "creates books object with respond body" do
60
+ # Response from aladin ends with ';'
61
+ # so we need to remove this last characator in order to parse json string smoothly
62
+ hash = JSON.parse(body.gsub(/;?/, ""))
63
+
64
+ Books.should_receive(:new).with(hash)
65
+ Books.search query
66
+ end
67
+
68
+ # it "real connection test" do
69
+ # WebMock.allow_net_connect!
70
+ # Books.ttb_key = ""
71
+ # Books.search "ruby"
72
+ # end
73
+
74
+ context "when error was responded" do
75
+ let(:body) { File.read(File.join(File.dirname(__FILE__), "../data/error.txt")) }
76
+
77
+ it "returned books has error_code and error_msg" do
78
+ books = Books.search query
79
+
80
+ books.should be_error
81
+ books.error_code.should == 1
82
+ books.error_msg.should be_present
83
+ end
84
+ end
85
+
86
+ context "when page option is specified" do
87
+ let(:page) { 2 }
88
+ let(:per_page) { 20 }
89
+ it "sends request including page info" do
90
+ books = Books.search query, page: page
91
+
92
+ query_params = {
93
+ :Query => query,
94
+ :start => "21",
95
+ :MaxResults => per_page.to_s
96
+ }
97
+ a_request(:get, "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx")
98
+ .with(:query => hash_including(query_params)).should have_been_made
99
+ end
100
+ end
101
+
102
+ context "when per_page options is specified" do
103
+ it "sends request including page info" do
104
+ books = Books.search query, page: 2, per_page: 5
105
+
106
+ query_params = {
107
+ :Query => query,
108
+ :start => "6",
109
+ :MaxResults => "5"
110
+ }
111
+ a_request(:get, "http://www.aladin.co.kr/ttb/api/ItemSearch.aspx")
112
+ .with(:query => hash_including(query_params)).should have_been_made
113
+ end
114
+ end
115
+ end
116
+
117
+
118
+ describe "#initialize" do
119
+ let(:body) { File.read(File.join(File.dirname(__FILE__), "../data/ruby_result.txt")) }
120
+ let(:hash) { JSON.parse(body.gsub(/;?/, "")) }
121
+ let(:books) { Books.new(hash) }
122
+
123
+ it "assigns a total attribute" do
124
+ books.total.should == 1753
125
+ end
126
+
127
+ it "assigns a page attribute" do
128
+ books.page.should == 1
129
+ end
130
+
131
+ it "assigns a per_page attribute" do
132
+ books.per_page.should == 10
133
+ end
134
+
135
+ it "creates 10 books" do
136
+ Book.should_receive(:new).exactly(10)
137
+ books
138
+ end
139
+
140
+ it "assigns books array" do
141
+ books.length.should == 10
142
+ books.should be_a(Array)
143
+ books.first.should be_a(Book)
144
+ end
145
+
146
+ end
147
+
148
+ end
149
+ end
@@ -0,0 +1 @@
1
+ { 'errorCode':1, 'errorMessage':'키를 입력해 주세요' }
@@ -0,0 +1 @@
1
+ { "version" : "20070901", "title" : "알라딘 검색결과 - hello", "link" : "http:\/\/www.aladin.co.kr\/search\/wsearchresult.aspx?KeyTitle=hello&SearchTarget=book", "pubDate" : "Mon, 25 Jun 2012 07:56:42 GMT", "imageUrl" : "http:\/\/www.aladin.co.kr\/ucl_editor\/img_secur\/header\/2010\/logo.jpg", "totalResults" : 515, "startIndex" : 1, "itemsPerPage" : 10, "query" : "hello", "searchCategoryId" : 0, "searchCategoryName" : "전체", "item" : [ { "title" : "헬로키티 종이접기 스티커 놀이짱", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8965791049&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "은하수미디어 편집부 지음", "pubDate" : "2012-06-09", "description" : "사랑스러운 헬로키티 종이접기 편지지가 가득 들어 있다. 편지지를 낱장으로 뜯어 쓸 수 있고, 편지지에 종이접기 점선이 표시되어 있어 편지 봉투 없이도 예쁜 모양으로 접어서 보낼 수 있다. 헬로키티를 입체 카드, 미니 카드, 종이 인형 등 아기자기한 소품으로 만들고 흥미로운 심리테스트와 스티커 인형 놀이도 할 수 있다.", "creator" : "aladin", "isbn" : "8965791049", "isbn13" : "9788965791041", "itemId" : 17526787, "priceSales" : 7920, "priceStandard" : 8800, "stockStatus" : "", "mileage" : 800, "cover":"http:\/\/image.aladin.co.kr\/product\/1752\/67\/coversum\/8965791049_1.jpg", "categoryId" : 35114, "categoryName" : "국내도서>유아>놀이책>색칠공부/스티커북", "publisher":"은하수미디어", "customerReviewRank":0 } , { "title" : "Hello 식스시그마, Hi MBB : 기", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=899023929X&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "김규식 지음", "pubDate" : "2012-05-31", "description" : "", "creator" : "aladin", "isbn" : "899023929X", "isbn13" : "9788990239297", "itemId" : 17519053, "priceSales" : 20000, "priceStandard" : 20000, "stockStatus" : "", "mileage" : 600, "cover":"http:\/\/image.aladin.co.kr\/product\/1751\/90\/coversum\/899023929x_1.jpg", "categoryId" : 2173, "categoryName" : "국내도서>경제경영>기업 경영>경영전략/혁신", "publisher":"이레테크", "customerReviewRank":0 } , { "title" : "헬로키티 한글퍼즐 (104조각)", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=9255211374&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "은하수미디어 편집부 엮음", "pubDate" : "2012-04-29", "description" : "퍼즐 놀이를 하며 한글을 익힐 수 있도록 구성한 104조각 퍼즐이다. 사랑스러운 헬로키티 캐릭터를 통해 아이들의 호기심을 유발하고 집중력 향상을 돕는다. 또 캐릭터의 알록달록한 색감으로 아이들의 색 감각을 키우고, 퍼즐 조각을 돌리며 맞추는 과정을 통해 손과 눈의 협응력, 고도의 두뇌활동인 공간지각능력 발달에 도움을 준다.", "creator" : "aladin", "isbn" : "9255211374", "isbn13" : "8809255211375", "itemId" : 17602082, "priceSales" : 6300, "priceStandard" : 7000, "stockStatus" : "", "mileage" : 630, "cover":"http:\/\/image.aladin.co.kr\/product\/1760\/20\/coversum\/9255211374_1.jpg", "categoryId" : 35117, "categoryName" : "국내도서>유아>놀이책>퍼즐/퀴즈/게임", "publisher":"은하수미디어", "customerReviewRank":0 } , { "title" : "헬로키티 숫자퍼즐 (88조각)", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=9255211382&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "은하수미디어 편집부 엮음", "pubDate" : "2012-04-29", "description" : "퍼즐 놀이를 하며 수의 개념을 익힐 수 있도록 구성한 88조각 퍼즐이다. 사랑스러운 헬로키티 캐릭터를 통해 아이들의 호기심을 유발하고 집중력 향상을 돕는다. 또 캐릭터의 알록달록한 색감으로 아이들의 색 감각을 키우고, 퍼즐 조각을 돌리며 맞추는 과정을 통해 손과 눈의 협응력, 고도의 두뇌활동인 공간지각능력 발달에 도움을 준다.", "creator" : "aladin", "isbn" : "9255211382", "isbn13" : "8809255211382", "itemId" : 17601903, "priceSales" : 6300, "priceStandard" : 7000, "stockStatus" : "", "mileage" : 630, "cover":"http:\/\/image.aladin.co.kr\/product\/1760\/19\/coversum\/9255211382_1.jpg", "categoryId" : 35117, "categoryName" : "국내도서>유아>놀이책>퍼즐/퀴즈/게임", "publisher":"은하수미디어", "customerReviewRank":0 } , { "title" : "내 방은 커다란 도형", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8997162187&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "조앤 라클린 외 지음, 크리스티나 옹 그림, 어린이를 위한 수학교육연구회 옮김", "pubDate" : "2012-04-24", "description" : "", "creator" : "aladin", "isbn" : "8997162187", "isbn13" : "9788997162185", "itemId" : 16591489, "priceSales" : 8550, "priceStandard" : 9500, "stockStatus" : "", "mileage" : 860, "cover":"http:\/\/image.aladin.co.kr\/product\/1659\/14\/coversum\/8997162187_1.jpg", "categoryId" : 48871, "categoryName" : "국내도서>어린이>과학/수학>초등 수학", "publisher":"청어람미디어", "customerReviewRank":10 } , { "title" : "고양이 탐의 맛있는 나눗셈", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8997162179&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "조앤 라클린 지음, 로완 바네스-머피 그림, 메릴린 번스 수학 지도법, 어린이를 위한 수학", "pubDate" : "2012-03-27", "description" : "", "creator" : "aladin", "isbn" : "8997162179", "isbn13" : "9788997162178", "itemId" : 16091075, "priceSales" : 8550, "priceStandard" : 9500, "stockStatus" : "", "mileage" : 860, "cover":"http:\/\/image.aladin.co.kr\/product\/1609\/10\/coversum\/8997162179_1.jpg", "categoryId" : 48871, "categoryName" : "국내도서>어린이>과학/수학>초등 수학", "publisher":"청어람미디어", "customerReviewRank":10 } , { "title" : "헬로키티 키재기", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=9255210920&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "은하수미디어 편집부 지음", "pubDate" : "2012-03-09", "description" : "탄탄한 플라스틱 재질과 알록달록한 색감의 키재기 제품으로 오랫동안 사용해도 색이 바래거나 구겨지지 않는다. 자라나는 아이의 키를 즐겁게 재고, 간단한 영어 단어를 익히고, 헬로키티만의 사랑스럽고 선명한 색감은 방 벽면도 예쁘게 장식할 수 있어 실용적이다.", "creator" : "aladin", "isbn" : "9255210920", "isbn13" : "8809255210927", "itemId" : 15646989, "priceSales" : 3750, "priceStandard" : 5000, "stockStatus" : "", "mileage" : 40, "cover":"http:\/\/image.aladin.co.kr\/product\/1564\/69\/coversum\/9255210920_1.jpg", "categoryId" : 49525, "categoryName" : "국내도서>유아>놀이책>기타", "publisher":"은하수미디어", "customerReviewRank":0 } , { "title" : "미니 스티커북 6종 세트", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8965790700&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "은하수미디어 편집부 엮음", "pubDate" : "2011-12-19", "description" : "리락쿠마, 쥬얼펫, 헬로키티, 마이멜로디 등 캐릭터 친구들이 가득한 스티커북이다. 아이들이 손에 쥐기 쉽고 갖고 다니기에 좋은 스티커북으로, 낱장으로 떼어 쓰면 더욱 편리하다. 귀여운 캐릭터 스티커와 여러 가지 용도의 스티커를 활용해서 학용품, 달력, 시간표, 다이어리 등을 꾸밀 수 있다.", "creator" : "aladin", "isbn" : "8965790700", "isbn13" : "9788965790709", "itemId" : 14362712, "priceSales" : 21450, "priceStandard" : 33000, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1436\/27\/coversum\/8965790700_1.jpg", "categoryId" : 35100, "categoryName" : "국내도서>유아>4~7세>유아놀이", "publisher":"은하수미디어", "customerReviewRank":0 } , { "title" : "작은 돼지코 박쥐야, 안녕", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8949152258&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "다린 룬데 지음, 이강환 옮김, 퍼트리셔 윈 그림", "pubDate" : "2011-12-05", "description" : "과학 그림동화 시리즈 35권. 멸종 위기에 처한 박쥐를 소재로 생물 다양성의 소중함을 알려 주는 과학 그림책이다. 2008년 닥터수스 명예상 수상작인 이 책은 세상에서 가장 작은 포유동물 중 하나인 작은 돼지코 박쥐의 생태를 통해 아이들에게 다양한 생물종의 중요성을 알리고 멸종 위기 종에 대한 관심을 불러일으킨다.", "creator" : "aladin", "isbn" : "8949152258", "isbn13" : "9788949152257", "itemId" : 14273044, "priceSales" : 7650, "priceStandard" : 8500, "stockStatus" : "", "mileage" : 770, "cover":"http:\/\/image.aladin.co.kr\/product\/1427\/30\/coversum\/8949152258_1.jpg", "categoryId" : 35108, "categoryName" : "국내도서>유아>그림책>학습그림책", "publisher":"비룡소", "customerReviewRank":10 } , { "title" : "New Hello Grammar 3 - 제7차 개정 교과서 문법 완전 정리", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=892691917X&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "천재교육 편집부 엮음", "pubDate" : "2011-11-30", "description" : "", "creator" : "aladin", "isbn" : "892691917X", "isbn13" : "9788926919170", "itemId" : 7868213, "priceSales" : 7200, "priceStandard" : 8000, "stockStatus" : "", "mileage" : 360, "cover":"http:\/\/image.aladin.co.kr\/product\/786\/82\/coversum\/892691917x_1.jpg", "categoryId" : 35031, "categoryName" : "국내도서>중고등참고서>중학교>영어전문교재", "publisher":"천재교육", "customerReviewRank":0 } ] };
@@ -0,0 +1 @@
1
+ { "version" : "20070901", "title" : "알라딘 검색결과 - ruby", "link" : "http:\/\/www.aladin.co.kr\/search\/wsearchresult.aspx?KeyTitle=ruby&SearchTarget=book", "pubDate" : "Mon, 25 Jun 2012 08:06:19 GMT", "imageUrl" : "http:\/\/www.aladin.co.kr\/ucl_editor\/img_secur\/header\/2010\/logo.jpg", "totalResults" : 1753, "startIndex" : 1, "itemsPerPage" : 10, "query" : "ruby", "searchCategoryId" : 0, "searchCategoryName" : "전체", "item" : [ { "title" : "진지하게 1 - 뉴 루비코믹스 1250", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006283&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "카노 시우코 글.그림", "pubDate" : "2012-07-19", "description" : "", "creator" : "aladin", "isbn" : "8927006283", "isbn13" : "9788927006282", "itemId" : 17711976, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1771\/19\/coversum\/8927006283_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "우산 아래 두 사람 - 뉴 루비코믹스 1249", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006305&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "준코 글.그림", "pubDate" : "2012-07-19", "description" : "", "creator" : "aladin", "isbn" : "8927006305", "isbn13" : "9788927006305", "itemId" : 17711943, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1771\/19\/coversum\/8927006305_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "파파\'s 어쌔신 - 류노스케는 날아간다, 뉴 루비코믹스 1248", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006399&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "쇼오와 글.그림", "pubDate" : "2012-07-19", "description" : "", "creator" : "aladin", "isbn" : "8927006399", "isbn13" : "9788927006398", "itemId" : 17711808, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1771\/18\/coversum\/8927006399_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "잔혹하게 사랑을 속삭여줘 - 뉴 루비코믹스 1247", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006313&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "나루사카 린 지음", "pubDate" : "2012-07-09", "description" : "뉴 루비코믹스 시리즈 제1247권. 메밀국수집에서 일하는 타쿠마가 그만 물을 뿌려버린 상대... 그것은 야쿠자인 사하시였다! 어떤 보복을 당할지 불안한 타쿠마였으나 예상을 뒤엎고 허물없이 대해 오는 사하시. \n야쿠자라는 걸 느낄 수 없게 하는 그의 다정함에 타쿠마는 차츰 끌리게 되는데...", "creator" : "aladin", "isbn" : "8927006313", "isbn13" : "9788927006312", "itemId" : 17564514, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1756\/45\/coversum\/8927006313_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "사랑의 달콤한 부분 - 뉴 루비코믹스 1246", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=892700633X&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "코이케 마루미 지음", "pubDate" : "2012-07-09", "description" : "뉴 루비코믹스 시리즈 제1246권. 회사를 그만두고 자포자기한 키도는 우연히 길에서 만난 미야모토회의 간부를 따르게 된다. 자신이 가장 힘들 때 도와준 은혜를 갚고자 미야모토를 위해 열심히 일하던 키도의 마음은 어느새 사랑으로 변하는데...", "creator" : "aladin", "isbn" : "892700633X", "isbn13" : "9788927006336", "itemId" : 17564498, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1756\/44\/coversum\/892700633x_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "첫사랑의 전후 - 뉴 루비코믹스 1245", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006372&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "히다카 쇼코 지음", "pubDate" : "2012-07-09", "description" : "뉴 루비코믹스 시리즈 제1245권. 니시나가 회의를 하기 위해 들른 카페는 학생 시절 친구인 미야마가 오너로 일하는 곳이었다. 10년만의 재회를 반가워하는 니시나와는 대조적으로, 미야마는 그를 기억하지 못하는 듯 무뚝뚝하다. 분명히 존재했던 “우정 이상”의 관계. 애절한 ‘첫사랑’을 했던 그 시절로 다시는 돌아갈 수 없는 걸까?", "creator" : "aladin", "isbn" : "8927006372", "isbn13" : "9788927006374", "itemId" : 17564471, "priceSales" : 4950, "priceStandard" : 5500, "stockStatus" : "", "mileage" : 500, "cover":"http:\/\/image.aladin.co.kr\/product\/1756\/44\/coversum\/8927006372_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "설탕처럼 달콤하게 - 뉴 루비코믹스 1244", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006232&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "미츠키 나오 지음", "pubDate" : "2012-06-29", "description" : "뉴 루비코믹스 시리즈 제1244권. 카페 점장 이스미가 다니는 치과의 의사인 유키우에는 미인이긴 하지만 완전 S! 치료를 할 때마다 괴롭힘을 당하는 이스미였지만, 신작 케이크 만드는 걸 도와줄 때의 그는 너무나도 달콤한데...", "creator" : "aladin", "isbn" : "8927006232", "isbn13" : "9788927006237", "itemId" : 17425865, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1742\/58\/coversum\/8927006232_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "사랑 마음 - 뉴 루비코믹스 1243", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006224&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "칸다 네코 지음", "pubDate" : "2012-06-29", "description" : "뉴 루비코믹스 시리즈 제1243권. 연하의 연인 쥰에게 푹 빠진 사키. 쥰이 여름방학 동안 집에서 계속 같이 있을 줄 알았는데 갑자기 쥰의 삼촌 소우가 찾아왔다! 게다가 한동안 쥰과 같이 살겠다고 하는데...", "creator" : "aladin", "isbn" : "8927006224", "isbn13" : "9788927006220", "itemId" : 17425829, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1742\/58\/coversum\/8927006224_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "류스케의 오만한 만찬 - 뉴 루비코믹스 1242", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006216&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "요우키 후카이 지음", "pubDate" : "2012-06-29", "description" : "뉴 루비코믹스 시리즈 제1242권. \'그렇게 양지에서 살라고 했는데 그 녀석은 이 세계로 돌아와 버렸다.\'\n치쿠쿄회의 간부 보좌 난미 류스케는 화가 났다. 지난날 동생처럼 귀여워했지만 본인의 미래를 생각해 조폭 세계를 떠나게 했던 쿠니키 리오가 변호사가 되어 조직의 젊은 법률 고문으로 돌아온 것이다. 그 배신이나 다름없는 인생의 선택에 실망해 리오를 차갑게만 대하는 류스케. 그러나 리오의 가슴에는 누가 뭐라던 그럴 수밖에 없는 한결같고 뜨겁고 비밀스러운 마음이 타오르고 있었다.", "creator" : "aladin", "isbn" : "8927006216", "isbn13" : "9788927006213", "itemId" : 17425745, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1742\/57\/coversum\/8927006216_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } , { "title" : "열정 허니 - 뉴 루비코믹스 1241", "link" : "http:\/\/www.aladin.co.kr\/shop\/wproduct.aspx?ISBN=8927006291&copyPaper=1&ttbkey=ttbaproxacs1110001", "author" : "키리시마 타마키 지음", "pubDate" : "2012-06-29", "description" : "뉴 루비코믹스 시리즈 제1241권. 대기업 청소년지의 편집자인 미야모토는 전부터 동경해왔던 인기 디자이너 토도와 같이 일을 하게 되었다. 그런데 토도는 엄청난 S인 게이로,“천국을 보여주지”라며 미야모토에게 올라타는데?!", "creator" : "aladin", "isbn" : "8927006291", "isbn13" : "9788927006299", "itemId" : 17425673, "priceSales" : 4320, "priceStandard" : 4800, "stockStatus" : "", "mileage" : 220, "cover":"http:\/\/image.aladin.co.kr\/product\/1742\/56\/coversum\/8927006291_1.jpg", "categoryId" : 6130, "categoryName" : "국내도서>만화>순정만화>그 남자들의 사랑", "publisher":"현대지능개발사", "customerReviewRank":0 } ] };
@@ -0,0 +1,23 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ begin
5
+ Bundler.setup(:default, :test)
6
+ rescue Bundler::BundlerError => e
7
+ $stderr.puts e.message
8
+ $stderr.puts "Run `bundle install` to install missing gems"
9
+ exit e.status_code
10
+ end
11
+
12
+ require 'rspec'
13
+ require 'webmock/rspec'
14
+
15
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
16
+ require 'aladin_books'
17
+
18
+ RSpec.configure do |config|
19
+ config.treat_symbols_as_metadata_keys_with_true_values = true
20
+ config.run_all_when_everything_filtered = true
21
+ config.filter_run :focus
22
+ end
23
+
metadata ADDED
@@ -0,0 +1,212 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: aladin-books
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - aproxacs
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-06-26 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activesupport
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: bundler
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ - !ruby/object:Gem::Dependency
47
+ name: rspec
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: jeweler
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ~>
68
+ - !ruby/object:Gem::Version
69
+ version: 1.8.3
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ~>
76
+ - !ruby/object:Gem::Version
77
+ version: 1.8.3
78
+ - !ruby/object:Gem::Dependency
79
+ name: simplecov
80
+ requirement: !ruby/object:Gem::Requirement
81
+ none: false
82
+ requirements:
83
+ - - ! '>='
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ type: :development
87
+ prerelease: false
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ - !ruby/object:Gem::Dependency
95
+ name: webmock
96
+ requirement: !ruby/object:Gem::Requirement
97
+ none: false
98
+ requirements:
99
+ - - ! '>='
100
+ - !ruby/object:Gem::Version
101
+ version: '0'
102
+ type: :development
103
+ prerelease: false
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ - !ruby/object:Gem::Dependency
111
+ name: ZenTest
112
+ requirement: !ruby/object:Gem::Requirement
113
+ none: false
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
+ none: false
122
+ requirements:
123
+ - - ! '>='
124
+ - !ruby/object:Gem::Version
125
+ version: '0'
126
+ - !ruby/object:Gem::Dependency
127
+ name: autotest-fsevent
128
+ requirement: !ruby/object:Gem::Requirement
129
+ none: false
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
134
+ type: :development
135
+ prerelease: false
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ - !ruby/object:Gem::Dependency
143
+ name: autotest-growl
144
+ requirement: !ruby/object:Gem::Requirement
145
+ none: false
146
+ requirements:
147
+ - - ! '>='
148
+ - !ruby/object:Gem::Version
149
+ version: '0'
150
+ type: :development
151
+ prerelease: false
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - ! '>='
156
+ - !ruby/object:Gem::Version
157
+ version: '0'
158
+ description: aladin-books is the ruby wrapper of Aladin Search API.
159
+ email: aproxacs.gmail.com
160
+ executables: []
161
+ extensions: []
162
+ extra_rdoc_files:
163
+ - LICENSE.txt
164
+ - README.md
165
+ files:
166
+ - .document
167
+ - .rspec
168
+ - Gemfile
169
+ - Gemfile.lock
170
+ - LICENSE.txt
171
+ - README.md
172
+ - Rakefile
173
+ - VERSION
174
+ - lib/aladin.rb
175
+ - lib/aladin/book.rb
176
+ - lib/aladin/books.rb
177
+ - lib/aladin_books.rb
178
+ - spec/aladin/book_spec.rb
179
+ - spec/aladin/books_spec.rb
180
+ - spec/data/error.txt
181
+ - spec/data/hello_result.txt
182
+ - spec/data/ruby_result.txt
183
+ - spec/spec_helper.rb
184
+ homepage: http://github.com/aproxacs/aladin-books
185
+ licenses:
186
+ - MIT
187
+ post_install_message:
188
+ rdoc_options: []
189
+ require_paths:
190
+ - lib
191
+ required_ruby_version: !ruby/object:Gem::Requirement
192
+ none: false
193
+ requirements:
194
+ - - ! '>='
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ segments:
198
+ - 0
199
+ hash: 3673326757016641519
200
+ required_rubygems_version: !ruby/object:Gem::Requirement
201
+ none: false
202
+ requirements:
203
+ - - ! '>='
204
+ - !ruby/object:Gem::Version
205
+ version: '0'
206
+ requirements: []
207
+ rubyforge_project:
208
+ rubygems_version: 1.8.23
209
+ signing_key:
210
+ specification_version: 3
211
+ summary: aladin-books is the ruby wrapper of Aladin Search API.
212
+ test_files: []