google_book 0.3.1.1 → 0.3.4
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.
- data/README.md +28 -4
- data/lib/google_book.rb +4 -1
- data/lib/google_book/base.rb +8 -14
- data/lib/google_book/book_item.rb +24 -5
- data/lib/google_book/book_shelf_item.rb +31 -0
- data/lib/google_book/book_shelves.rb +30 -0
- data/lib/google_book/uri.rb +15 -0
- data/spec/book_item_spec.rb +47 -0
- data/spec/book_shelves_spec.rb +35 -0
- metadata +7 -3
data/README.md
CHANGED
@@ -6,18 +6,18 @@
|
|
6
6
|
|
7
7
|
<div>
|
8
8
|
<a href = "https://codeclimate.com/repos/51fa3a5356b102601a00d3e1/feed"><img src="https://codeclimate.com/repos/51fa3a5356b102601a00d3e1/badges/8db2d24d585c3d2ac1f1/gpa.png" /></a>
|
9
|
-
<a href = "https://travis-ci.org/rajcybage/google_book"><img src= "https://travis-ci.org/rajcybage/google_book.png"/></a>
|
9
|
+
<a href = "https://travis-ci.org/rajcybage/google_book"><img src= "https://travis-ci.org/rajcybage/google_book.png?branch=master"/></a>
|
10
10
|
<img src = "https://badge.fury.io/rb/google_book.png"/>
|
11
11
|
</div>
|
12
12
|
|
13
|
-
<h1>Google Book Api Integration For Books and Magazines</h1><br/>
|
13
|
+
<h1>Google Book Api Integration For Books and Magazines and Book Shelves</h1><br/>
|
14
14
|
<p>You can use it in your web application as well as desktop application to fetch google books and magazines and also filter them.</p>
|
15
15
|
<div>
|
16
16
|
<h2>Installation</h2>
|
17
17
|
<p>In Gemfile<br/>
|
18
18
|
<code>gem 'google_book', git: 'git@github.com:rajcybage/google_book.git'</code><br/>
|
19
19
|
<span><b>OR</b></span><br/>
|
20
|
-
<code>gem 'google_book', '0.3.
|
20
|
+
<code>gem 'google_book', '0.3.4'</code>
|
21
21
|
</p>
|
22
22
|
</div>
|
23
23
|
<div>
|
@@ -53,7 +53,7 @@
|
|
53
53
|
<code>b.book_info.get_all_titles #to get the all titles of your search book</code> <br/>
|
54
54
|
<code>b.book_info.get_all_subtitles # to get all the subtitles of your search book</code>
|
55
55
|
<code>b.total_count #get the search results count</code><br/>
|
56
|
-
|
56
|
+
|
57
57
|
</p>
|
58
58
|
|
59
59
|
|
@@ -76,8 +76,13 @@
|
|
76
76
|
<code><b>b.books.first.version #get the version of the book</b></code><br/>
|
77
77
|
<code><b>b.books.first.preview_link #get the first book preview link</b></code><br/>
|
78
78
|
<code><b>b.books.first.info_link #get the first book information</b></code><br/>
|
79
|
+
<code><b>b.price #get the book price with currency</b></code><br/>
|
79
80
|
<code><b>b.books.first.thumbnail_image #get the first book thumbnail image</b></code><br/>
|
80
81
|
<code><b>b.books.first.small_thumbnail_link #get the first book thumbnail image</b></code><br/>
|
82
|
+
<h2>If you want to access google checkout for a particular book we can get the link for checkout</h2>
|
83
|
+
<code><b>b.books.first.google_checkout_link #get the first book direct google checkout</b></code><br/>
|
84
|
+
<h2>Want ISBN Information</h2><br/>
|
85
|
+
<code><b>b.books.first.ISBN_info #isbn info for first book it will return hash like {:ISBN_10 => "778545"}</b></code>
|
81
86
|
</div>
|
82
87
|
|
83
88
|
|
@@ -135,5 +140,24 @@
|
|
135
140
|
</p>
|
136
141
|
|
137
142
|
|
143
|
+
<div>
|
144
|
+
<h2>If You want to get the book shelves of a particular user</h2>
|
145
|
+
<div>
|
146
|
+
<b>
|
147
|
+
<code>bs=BookShelves.new("GOGLE_BOOKS_USER_ID")</code><br/>
|
148
|
+
<code>bs.bookshelves #all the book shelves of that user in a instance</code><br/>
|
149
|
+
<code>bs.bookshelves.first.title #the title of the books shelve first</code><br/>
|
150
|
+
<code>bs.bookshelves.first.self_link #the title of the books shelve first</code><br/>
|
151
|
+
</b>
|
152
|
+
</div>
|
153
|
+
<p>
|
154
|
+
<h2>If you want the books of a particular Book shelves</h2>
|
155
|
+
<b><code>bs.bookshelves.first.books#get all the books of that book shelves</code></b><br/>
|
156
|
+
<b><code>bs.bookshelves.first.books.first.get_title</code></b><br/>
|
157
|
+
<b>Now you can access all the methods of those books(ex:-get_title,preview_link....etc) </b>
|
158
|
+
|
159
|
+
</p>
|
160
|
+
</div>
|
161
|
+
|
138
162
|
</body>
|
139
163
|
</html>
|
data/lib/google_book.rb
CHANGED
data/lib/google_book/base.rb
CHANGED
@@ -2,11 +2,13 @@ require 'uri'
|
|
2
2
|
require 'net/http'
|
3
3
|
require 'openssl'
|
4
4
|
require 'json'
|
5
|
+
|
5
6
|
require_relative 'book_info.rb'
|
6
7
|
require_relative 'book_item.rb'
|
7
|
-
|
8
|
+
require_relative 'uri.rb'
|
8
9
|
module GoogleBook
|
9
10
|
class Book
|
11
|
+
include URI
|
10
12
|
attr_accessor :api_key, :total_count, :items, :books
|
11
13
|
|
12
14
|
def initialize(api_key)
|
@@ -53,11 +55,6 @@ module GoogleBook
|
|
53
55
|
return @books
|
54
56
|
end
|
55
57
|
|
56
|
-
#use for rails application
|
57
|
-
def api_key
|
58
|
-
@api_key = YAML.load_file("#{Rails.root}/config/api_key_google_book.yml")[Rails.env]
|
59
|
-
end
|
60
|
-
|
61
58
|
def checking_filter_type(type)
|
62
59
|
if type.nil?
|
63
60
|
puts "How you want to filter your search?(example:1)?"
|
@@ -144,11 +141,11 @@ module GoogleBook
|
|
144
141
|
|
145
142
|
def set_normal_url(api_key, type, search_param, main_url)
|
146
143
|
case type
|
147
|
-
|
144
|
+
when "download"
|
148
145
|
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&download=epub&key=#{api_key}"
|
149
|
-
|
146
|
+
when "magazine"
|
150
147
|
url = main_url+"?q=#{search_param.gsub(/\s+/, "+").strip}&printType=magazines&key=#{api_key}"
|
151
|
-
|
148
|
+
else
|
152
149
|
url = main_url+"?q=#{search_param.gsub(/\s+/, "").strip}+#{type}:keyes&key=#{api_key}"
|
153
150
|
end
|
154
151
|
return url
|
@@ -156,12 +153,9 @@ module GoogleBook
|
|
156
153
|
|
157
154
|
def connect_google(key = nil,type = nil,search_param = nil,filter = nil)
|
158
155
|
uri = url_formation(key,type,search_param,filter)
|
159
|
-
|
160
|
-
http.use_ssl = true
|
161
|
-
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
162
|
-
response = http.get(uri.request_uri)
|
156
|
+
uri=URI::Uri.new(uri)
|
163
157
|
# response = Net::HTTP.get_response(uri)
|
164
|
-
return response.body
|
158
|
+
return uri.response.body
|
165
159
|
end
|
166
160
|
end
|
167
161
|
end
|
@@ -8,7 +8,7 @@ class BookItem
|
|
8
8
|
@item = item
|
9
9
|
end
|
10
10
|
|
11
|
-
|
11
|
+
# get the title of the book
|
12
12
|
def get_title
|
13
13
|
@item[:item]["volumeInfo"]["title"]
|
14
14
|
end
|
@@ -28,6 +28,11 @@ class BookItem
|
|
28
28
|
@item[:item]["volumeInfo"]["publishedDate"]
|
29
29
|
end
|
30
30
|
|
31
|
+
#The categories of the book
|
32
|
+
def categories
|
33
|
+
@item[:item]["volumeInfo"]["categories"]
|
34
|
+
end
|
35
|
+
|
31
36
|
#The preview link
|
32
37
|
def preview_link
|
33
38
|
@item[:item]["volumeInfo"]["previewLink"]
|
@@ -63,9 +68,14 @@ class BookItem
|
|
63
68
|
@item[:item]["accessInfo"]["webReaderLink"]
|
64
69
|
end
|
65
70
|
|
66
|
-
|
71
|
+
#text snippet description
|
67
72
|
def text_snippet_description
|
68
|
-
|
73
|
+
@item[:item]["searchInfo"]["textSnippet"] unless @item[:item]["searchInfo"].nil?
|
74
|
+
end
|
75
|
+
|
76
|
+
#checkout link
|
77
|
+
def google_checkout_link
|
78
|
+
"https://play.google.com/store/books/details?id=#{@item[:item]["id"]}&rdid=book-#{@item[:item]["id"]}&rdot=1&source=gbs_atb"
|
69
79
|
end
|
70
80
|
|
71
81
|
#The rating of the book
|
@@ -75,7 +85,16 @@ class BookItem
|
|
75
85
|
|
76
86
|
#The version of the book
|
77
87
|
def version
|
78
|
-
|
88
|
+
@item[:item]["volumeInfo"]["contentVersion"]
|
89
|
+
end
|
90
|
+
|
91
|
+
#ISBN information for the book
|
92
|
+
def ISBN_info
|
93
|
+
isbn_info = @item[:item]["volumeInfo"]["industryIdentifiers"].inject({}) do |result, isbn|
|
94
|
+
result[isbn["type"]] = isbn["identifier"]
|
95
|
+
result
|
96
|
+
end
|
97
|
+
isbn_info
|
79
98
|
end
|
80
99
|
|
81
100
|
#the total count of the rating
|
@@ -90,7 +109,7 @@ class BookItem
|
|
90
109
|
|
91
110
|
|
92
111
|
#publish date
|
93
|
-
def publish_date
|
112
|
+
def publish_date
|
94
113
|
@item[:item]["volumeInfo"]["publishedDate"]
|
95
114
|
end
|
96
115
|
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require_relative 'book_info.rb'
|
2
|
+
require_relative 'base.rb'
|
3
|
+
require_relative 'uri.rb'
|
4
|
+
|
5
|
+
class BookShelfItem
|
6
|
+
attr_accessor :item
|
7
|
+
|
8
|
+
def initialize(item)
|
9
|
+
@item = item
|
10
|
+
end
|
11
|
+
|
12
|
+
|
13
|
+
def title
|
14
|
+
@item[:item]["title"]
|
15
|
+
end
|
16
|
+
|
17
|
+
def self_link
|
18
|
+
@item[:item]["selfLink"]
|
19
|
+
end
|
20
|
+
|
21
|
+
def books
|
22
|
+
uri = @item[:item]["selfLink"] + "/volumes"
|
23
|
+
response = URI::Uri.new(URI(uri)).response
|
24
|
+
@book_items = JSON(response.body)["items"]
|
25
|
+
@books = []
|
26
|
+
@book_items.each do |item|
|
27
|
+
@books << BookItem.new(item: item)
|
28
|
+
end
|
29
|
+
return @books
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require_relative 'book_info.rb'
|
2
|
+
require_relative 'base.rb'
|
3
|
+
require_relative 'uri.rb'
|
4
|
+
require_relative 'book_shelf_item.rb'
|
5
|
+
class BookShelves
|
6
|
+
include GoogleBook
|
7
|
+
include URI
|
8
|
+
attr_accessor :user_id, :uri, :items
|
9
|
+
|
10
|
+
def initialize(user_id, item = nil)
|
11
|
+
@user_id = user_id
|
12
|
+
@uri = "https://www.googleapis.com/books/v1/users/#{user_id}/bookshelves"
|
13
|
+
response = URI::Uri.new(URI(@uri)).response
|
14
|
+
unless response.body.nil? || JSON.parse(response.body)["items"].nil?
|
15
|
+
@items ||= JSON.parse(response.body)["items"].inject([]) do |result,item|
|
16
|
+
result << item
|
17
|
+
result
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def bookshelves
|
23
|
+
@book_shelf_items = []
|
24
|
+
@items.each do |item|
|
25
|
+
@book_shelf_items << BookShelfItem.new(item: item)
|
26
|
+
end
|
27
|
+
return @book_shelf_items
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
module URI
|
3
|
+
class Uri
|
4
|
+
attr_reader :uri
|
5
|
+
attr_accessor :response
|
6
|
+
|
7
|
+
def initialize(uri)
|
8
|
+
@uri = uri
|
9
|
+
http = Net::HTTP.new(@uri.host, @uri.port)
|
10
|
+
http.use_ssl = true
|
11
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
12
|
+
@response = http.get(@uri.request_uri)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
data/spec/book_item_spec.rb
CHANGED
@@ -29,4 +29,51 @@ describe "book_item" do
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
+
describe "authors" do
|
33
|
+
it "should return perfect authors name" do
|
34
|
+
@book_items.first.authors.should =~ ["Daniel Keyes"]
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "preview_link" do
|
39
|
+
it "should return perfect preview link" do
|
40
|
+
@book_items.first.preview_link.should == "http://books.google.com/books?id=_oG_iTxP1pIC&pg=PA283&dq=Flowers+inauthor:keyes&hl=&cd=1&source=gbs_api"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
describe "info_link" do
|
45
|
+
it "should return perfect info link" do
|
46
|
+
@book_items.first.info_link.should == "http://books.google.com/books?id=_oG_iTxP1pIC&dq=Flowers+inauthor:keyes&hl=&source=gbs_api"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
describe "version" do
|
51
|
+
it "should return perfect version" do
|
52
|
+
@book_items.first.version.should == "0.6.4.0.preview.3"
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe "google_checkout_link" do
|
57
|
+
it "should return perfect google checkout link" do
|
58
|
+
@book_items.first.google_checkout_link.should == "https://play.google.com/store/books/details?id=_oG_iTxP1pIC&rdid=book-_oG_iTxP1pIC&rdot=1&source=gbs_atb"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
describe "rating" do
|
63
|
+
it "should return the rating of the book" do
|
64
|
+
@book_items.first.rating.should == 4.0
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
describe "publisher" do
|
69
|
+
it "should return right publisher name" do
|
70
|
+
@book_items.first.publisher.should == "Houghton Mifflin Harcourt"
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
describe "publish_date" do
|
75
|
+
it "should return the perfect published date" do
|
76
|
+
@book_items.first.publish_date.should == "2007-12-01"
|
77
|
+
end
|
78
|
+
end
|
32
79
|
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require_relative "../lib/google_book/book_shelves.rb"
|
2
|
+
require_relative "spec_helper.rb"
|
3
|
+
|
4
|
+
describe "book_shelves" do
|
5
|
+
let(:user_id){"109681907061774445744"}
|
6
|
+
|
7
|
+
it "should create a book shelves instance with a user id of google" do
|
8
|
+
BookShelves.new(user_id).items.should_not be_nil
|
9
|
+
BookShelves.new(user_id).items.should be_a_kind_of(Array)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "should not create the book selves instance items if user id is wrong" do
|
13
|
+
BookShelves.new("10968190").items.should be_nil
|
14
|
+
end
|
15
|
+
|
16
|
+
it "should create a perfect url" do
|
17
|
+
BookShelves.new(user_id).uri.should == "https://www.googleapis.com/books/v1/users/109681907061774445744/bookshelves"
|
18
|
+
end
|
19
|
+
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
describe "bookshelves" do
|
25
|
+
let(:user_id){"109681907061774445744"}
|
26
|
+
before(:each) do
|
27
|
+
@boook_shelves = BookShelves.new(user_id)
|
28
|
+
end
|
29
|
+
|
30
|
+
it "should create book shelves items" do
|
31
|
+
@boook_shelves.bookshelves.should_not be_nil
|
32
|
+
@boook_shelves.bookshelves.should be_a_kind_of(Array)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: google_book
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.3.
|
4
|
+
version: 0.3.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-08-
|
12
|
+
date: 2013-08-07 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description:
|
15
15
|
email: rdasarminus@gmail.com
|
@@ -22,10 +22,14 @@ files:
|
|
22
22
|
- Rakefile
|
23
23
|
- spec/base_spec.rb
|
24
24
|
- spec/book_item_spec.rb
|
25
|
+
- spec/book_shelves_spec.rb
|
25
26
|
- lib/google_book.rb
|
26
27
|
- lib/google_book/base.rb
|
27
28
|
- lib/google_book/book_info.rb
|
28
29
|
- lib/google_book/book_item.rb
|
30
|
+
- lib/google_book/book_shelves.rb
|
31
|
+
- lib/google_book/uri.rb
|
32
|
+
- lib/google_book/book_shelf_item.rb
|
29
33
|
homepage: https://github.com/rajcybage/google_book
|
30
34
|
licenses:
|
31
35
|
- Copyright (c) Rajarshi Das. All rights reserved
|
@@ -50,6 +54,6 @@ rubyforge_project:
|
|
50
54
|
rubygems_version: 1.8.24
|
51
55
|
signing_key:
|
52
56
|
specification_version: 3
|
53
|
-
summary: Google Book API integration for fetching the information for google books and magazines also filter them. You can eaisly get most of the elements for a particular book and magazine from the google book search. like :-(title,sub title,preview link,authors,publisher,publish date,buylink,downloadlink,version,...many more
|
57
|
+
summary: Google Book API integration for fetching the information for google books and magazines and book shelves also filter them. You can eaisly get most of the elements for a particular book and magazine or the books of a book shelf from the google book search. like :-(title,sub title,preview link,authors,publisher,publish date,buylink,downloadlink,version,ISBN information,ratings,...many more..Also you can get the google checkout link for that book/magazine
|
54
58
|
test_files: []
|
55
59
|
has_rdoc:
|