gogoodreads 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --color
data/Gemfile ADDED
@@ -0,0 +1,11 @@
1
+ source :rubygems
2
+
3
+ group :development do
4
+ gem 'rspec', '~> 2.3.0'
5
+ gem 'yard', '~> 0.6.0'
6
+ gem 'bundler', '~> 1.0.0'
7
+ gem 'jeweler', '~> 1.5.2'
8
+ gem 'vcr'
9
+ gem 'webmock'
10
+ gem 'rcov', '>= 0'
11
+ end
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Tim Medina
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.
data/README.rdoc ADDED
@@ -0,0 +1,29 @@
1
+ = GoGoodreads
2
+
3
+ Goodreads API Ruby Interface
4
+
5
+ == Basics (So Far)
6
+
7
+ require 'gogoodreads'
8
+
9
+ GoGoodreads.configure do |config|
10
+ config.api_key = "somesecretapi"
11
+ end
12
+
13
+ GoGoodreads::Book.show_by_isbn('isbnhere')
14
+
15
+ == Contributing to gogoodreads
16
+
17
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
18
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
19
+ * Fork the project
20
+ * Start a feature/bugfix branch
21
+ * Commit and push until you are happy with your contribution
22
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
23
+ * 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.
24
+
25
+ == Copyright
26
+
27
+ Copyright (c) 2011 Tim Medina. See LICENSE.txt for
28
+ further details.
29
+
data/Rakefile ADDED
@@ -0,0 +1,42 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+ begin
4
+ Bundler.setup(:default, :development)
5
+ rescue Bundler::BundlerError => e
6
+ $stderr.puts e.message
7
+ $stderr.puts "Run `bundle install` to install missing gems"
8
+ exit e.status_code
9
+ end
10
+ require 'rake'
11
+
12
+ require 'jeweler'
13
+ Jeweler::Tasks.new do |gem|
14
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
15
+ gem.name = "gogoodreads"
16
+ gem.homepage = "http://github.com/iamteem/gogoodreads"
17
+ gem.license = "MIT"
18
+ gem.summary = %Q{Goodreads API Ruby Interface}
19
+ gem.description = %Q{Allows you to progammatically pull book reviews from Goodreads using its API.}
20
+ gem.email = "iamteem@gmail.com"
21
+ gem.authors = ["Tim Medina"]
22
+ # Include your dependencies below. Runtime dependencies are required when using your gem,
23
+ # and development dependencies are only needed for development (ie running rake tasks, tests, etc)
24
+ gem.add_runtime_dependency 'nokogiri'
25
+ end
26
+ Jeweler::RubygemsDotOrgTasks.new
27
+
28
+ require 'rspec/core'
29
+ require 'rspec/core/rake_task'
30
+ RSpec::Core::RakeTask.new(:spec) do |spec|
31
+ spec.pattern = FileList['spec/**/*_spec.rb']
32
+ end
33
+
34
+ RSpec::Core::RakeTask.new(:rcov) do |spec|
35
+ spec.pattern = 'spec/**/*_spec.rb'
36
+ spec.rcov = true
37
+ end
38
+
39
+ task :default => :spec
40
+
41
+ require 'yard'
42
+ YARD::Rake::YardocTask.new
data/TODO ADDED
@@ -0,0 +1,6 @@
1
+ - Book
2
+ - Book Reviews
3
+ - Invalid API Key Exception
4
+
5
+ Future (right...):
6
+ - Support OAuth authenticated methods.
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.3
@@ -0,0 +1,98 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{gogoodreads}
8
+ s.version = "0.0.3"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Tim Medina"]
12
+ s.date = %q{2011-03-24}
13
+ s.description = %q{Allows you to progammatically pull book reviews from Goodreads using its API.}
14
+ s.email = %q{iamteem@gmail.com}
15
+ s.extra_rdoc_files = [
16
+ "LICENSE.txt",
17
+ "README.rdoc",
18
+ "TODO"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ ".rspec",
23
+ "Gemfile",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "TODO",
28
+ "VERSION",
29
+ "gogoodreads.gemspec",
30
+ "lib/go_goodreads.rb",
31
+ "lib/go_goodreads/attributes.rb",
32
+ "lib/go_goodreads/author.rb",
33
+ "lib/go_goodreads/book.rb",
34
+ "lib/go_goodreads/comment.rb",
35
+ "lib/go_goodreads/config.rb",
36
+ "lib/go_goodreads/event.rb",
37
+ "lib/go_goodreads/list.rb",
38
+ "lib/go_goodreads/owned_book.rb",
39
+ "lib/go_goodreads/quote.rb",
40
+ "lib/go_goodreads/request.rb",
41
+ "lib/go_goodreads/resource.rb",
42
+ "lib/go_goodreads/review.rb",
43
+ "lib/go_goodreads/shelf.rb",
44
+ "lib/go_goodreads/user.rb",
45
+ "lib/go_goodreads/user_status.rb",
46
+ "lib/gogoodreads.rb",
47
+ "spec/attribute_spec.rb",
48
+ "spec/book_spec.rb",
49
+ "spec/config_spec.rb",
50
+ "spec/fixtures/vcr_cassettes/book_by_isbn.yml",
51
+ "spec/spec_helper.rb"
52
+ ]
53
+ s.homepage = %q{http://github.com/iamteem/gogoodreads}
54
+ s.licenses = ["MIT"]
55
+ s.require_paths = ["lib"]
56
+ s.rubygems_version = %q{1.6.2}
57
+ s.summary = %q{Goodreads API Ruby Interface}
58
+ s.test_files = [
59
+ "spec/attribute_spec.rb",
60
+ "spec/book_spec.rb",
61
+ "spec/config_spec.rb",
62
+ "spec/spec_helper.rb"
63
+ ]
64
+
65
+ if s.respond_to? :specification_version then
66
+ s.specification_version = 3
67
+
68
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
69
+ s.add_development_dependency(%q<rspec>, ["~> 2.3.0"])
70
+ s.add_development_dependency(%q<yard>, ["~> 0.6.0"])
71
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
72
+ s.add_development_dependency(%q<jeweler>, ["~> 1.5.2"])
73
+ s.add_development_dependency(%q<vcr>, [">= 0"])
74
+ s.add_development_dependency(%q<webmock>, [">= 0"])
75
+ s.add_development_dependency(%q<rcov>, [">= 0"])
76
+ s.add_runtime_dependency(%q<nokogiri>, [">= 0"])
77
+ else
78
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
79
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
80
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
81
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
82
+ s.add_dependency(%q<vcr>, [">= 0"])
83
+ s.add_dependency(%q<webmock>, [">= 0"])
84
+ s.add_dependency(%q<rcov>, [">= 0"])
85
+ s.add_dependency(%q<nokogiri>, [">= 0"])
86
+ end
87
+ else
88
+ s.add_dependency(%q<rspec>, ["~> 2.3.0"])
89
+ s.add_dependency(%q<yard>, ["~> 0.6.0"])
90
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
91
+ s.add_dependency(%q<jeweler>, ["~> 1.5.2"])
92
+ s.add_dependency(%q<vcr>, [">= 0"])
93
+ s.add_dependency(%q<webmock>, [">= 0"])
94
+ s.add_dependency(%q<rcov>, [">= 0"])
95
+ s.add_dependency(%q<nokogiri>, [">= 0"])
96
+ end
97
+ end
98
+
@@ -0,0 +1,61 @@
1
+ module GoGoodreads
2
+ module Attributes
3
+ def self.included(base)
4
+ base.extend ClassMethods
5
+ end
6
+
7
+ module ClassMethods
8
+
9
+ # @param [Symbol] name the name of the attribute
10
+ # @param [Hash] options the options to configure the attribute
11
+ # @option option [Class] type the class of the parsed value of the attribute
12
+ # @option option [Proc] using a proc object to be used when finding the value in an xml node
13
+ # @option option [Symbol] map_from a symbol where the value is placed when calling to_attributes!
14
+ def attribute(name, options = {})
15
+ default_options = { :type => String, :map_from => name }
16
+ opts = default_options.merge(options)
17
+ opts[:using] ||= lambda {|xml, from| xml.at(from).text }
18
+ @attributes ||= {}
19
+ @attributes[name] = opts
20
+ attr name
21
+ end
22
+
23
+ # @param [Nokogiri::Node] xml the xml to be used in getting the attributes
24
+ # @param [Hash] options settings for overriding default attribute configuration (key is the name of the attribute, value is the options hash)
25
+ def to_attributes!(xml, options = {})
26
+ attrs = {}
27
+
28
+ @attributes.each do |attr, config|
29
+ opts = config.merge(options[attr] || {})
30
+ map_from = opts[:map_from]
31
+ callable = opts[:using]
32
+ val = callable.call(xml, map_from)
33
+ attrs[attr] = _convert(val, opts[:type]) rescue val
34
+ end
35
+
36
+ attrs
37
+ end
38
+
39
+ def Boolean(val)
40
+ {"true" => true, "false" => false}[val]
41
+ end
42
+
43
+ def _convert(val, type)
44
+ if type == ::GoGoodreads::Attributes::Boolean
45
+ Boolean(val)
46
+ elsif type == Time
47
+ Time.parse(val)
48
+ elsif type == Integer
49
+ Integer(val)
50
+ elsif type == Float
51
+ Float(val)
52
+ else
53
+ val
54
+ end
55
+ end
56
+ end
57
+
58
+ class Boolean; end
59
+
60
+ end
61
+ end
@@ -0,0 +1,18 @@
1
+ module GoGoodreads
2
+ class Author
3
+ include GoGoodreads::Resource
4
+
5
+ attribute :author_id, :map_from => 'id'
6
+ attribute :name
7
+ attribute :image_url
8
+ attribute :small_image_url
9
+ attribute :link
10
+ attribute :average_rating, :type => Float
11
+ attribute :ratings_count, :type => Integer
12
+ attribute :text_reviews_count, :type => Integer
13
+
14
+ def self.initialize_with_node(xml)
15
+ new(to_attributes!(xml))
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,50 @@
1
+ module GoGoodreads
2
+ class Book
3
+ include GoGoodreads::Resource
4
+ extend GoGoodreads::Request
5
+
6
+ attribute :title
7
+ attribute :isbn
8
+ attribute :isbn13
9
+ attribute :image_url
10
+ attribute :small_image_url
11
+ attribute :description
12
+ attribute :asin
13
+ attribute :url
14
+ attribute :link
15
+ attribute :num_pages, :type => Integer
16
+ attr :authors, :reviews
17
+
18
+ attr_accessor :current_page
19
+
20
+ def self.show_by_isbn(isbn, options = {})
21
+ params = { :isbn => isbn }
22
+ params.merge!(options)
23
+
24
+ request('/book/isbn', params) do |xml|
25
+ book = initialize_with_node(xml)
26
+ book.current_page = params[:page] || 1
27
+ book
28
+ end
29
+ end
30
+
31
+
32
+ def self.initialize_with_node(xml)
33
+ attrs = to_attributes!(xml)
34
+ attrs.delete_if { |k,v| v.respond_to?(:empty?) && v.empty? }
35
+
36
+ book = new(attrs)
37
+ book.initialize_authors_with_nodeset(xml.search('authors > author'))
38
+ book.initialize_reviews_with_nodeset(xml.search('reviews > review'))
39
+ book
40
+ end
41
+
42
+ def initialize_authors_with_nodeset(xml)
43
+ @authors = xml.map {|n| GoGoodreads::Author.initialize_with_node(n) }
44
+ end
45
+
46
+ def initialize_reviews_with_nodeset(xml)
47
+ @reviews = xml.map {|n| GoGoodreads::Review.initialize_with_node(n) }
48
+ end
49
+ end
50
+ end
File without changes
@@ -0,0 +1,8 @@
1
+ module GoGoodreads
2
+ class Config
3
+ class << self
4
+ attr_accessor :api_key
5
+ attr_accessor :secret
6
+ end
7
+ end
8
+ end
File without changes
File without changes
File without changes
File without changes
@@ -0,0 +1,26 @@
1
+ require 'open-uri'
2
+ require 'cgi'
3
+ require 'nokogiri'
4
+
5
+ module GoGoodreads
6
+ module Request
7
+ BASE_URL = "http://www.goodreads.com"
8
+
9
+ def request(path, params = {})
10
+ params.merge!(:key => GoGoodreads::Config.api_key)
11
+
12
+ uri = build_uri(path, to_querystring(params))
13
+ yield Nokogiri::XML(open(uri))
14
+ end
15
+
16
+ def to_querystring(params)
17
+ params.map do |k, v|
18
+ "#{ k }=#{ CGI.escape(v) }"
19
+ end.join('&')
20
+ end
21
+
22
+ def build_uri(path, params)
23
+ [BASE_URL, path, '?', params].join
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,11 @@
1
+ module GoGoodreads
2
+ module Resource
3
+ def self.included(base)
4
+ base.__send__(:include, Attributes)
5
+ end
6
+
7
+ def initialize(attrs = {})
8
+ attrs.each {|k, v| instance_variable_set("@#{ k }", v) }
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,36 @@
1
+ module GoGoodreads
2
+ class Review
3
+ include GoGoodreads::Resource
4
+
5
+ attribute :review_id, :map_from => 'id'
6
+ attribute :votes, :type => Integer
7
+ attribute :spoiler_flag, :type => Boolean
8
+ attribute :date_added, :type => Time
9
+ attribute :date_updated, :type => Time
10
+ attribute :body
11
+ attribute :read_count, :type => Integer
12
+ attribute :comments_count, :type => Integer
13
+ attribute :url
14
+ attribute :link
15
+
16
+ attr :user, :shelves
17
+
18
+ def self.initialize_with_node(xml)
19
+ attrs = to_attributes!(xml)
20
+ review = new(attrs)
21
+ review.initialize_user_with_node(xml.at('user'))
22
+ review.initialize_shelves_with_nodes(xml.search('shelves > shelf'))
23
+ review
24
+ end
25
+
26
+ def initialize_user_with_node(xml)
27
+ @user = GoGoodreads::User.initialize_with_node(xml)
28
+ end
29
+
30
+ def initialize_shelves_with_nodes(shelves_xml)
31
+ @shelves = shelves_xml.map do |xml|
32
+ GoGoodreads::Shelf.initialize_with_node(xml)
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,12 @@
1
+ module GoGoodreads
2
+ class Shelf
3
+ include GoGoodreads::Resource
4
+ attribute :name
5
+
6
+ def self.initialize_with_node(xml)
7
+ attrs = to_attributes!(xml, :name => {:using => lambda {|n, from| xml[from] }})
8
+ new(attrs)
9
+ end
10
+ end
11
+ end
12
+
@@ -0,0 +1,16 @@
1
+ module GoGoodreads
2
+ class User
3
+ include GoGoodreads::Resource
4
+
5
+ attribute :user_id, :map_from => 'id'
6
+ attribute :name
7
+ attribute :location
8
+ attribute :link
9
+ attribute :image_url
10
+ attribute :small_image_url
11
+
12
+ def self.initialize_with_node(xml)
13
+ new(to_attributes!(xml))
14
+ end
15
+ end
16
+ end
File without changes
@@ -0,0 +1,15 @@
1
+ module GoGoodreads
2
+ autoload :Config, 'go_goodreads/config'
3
+ autoload :Request, 'go_goodreads/request'
4
+ autoload :Resource, 'go_goodreads/resource'
5
+ autoload :Book, 'go_goodreads/book'
6
+ autoload :Author, 'go_goodreads/author'
7
+ autoload :Shelf, 'go_goodreads/shelf'
8
+ autoload :Review, 'go_goodreads/review'
9
+ autoload :User, 'go_goodreads/user'
10
+ autoload :Attributes, 'go_goodreads/attributes'
11
+
12
+ def self.configure(&block)
13
+ yield GoGoodreads::Config
14
+ end
15
+ end
@@ -0,0 +1 @@
1
+ require 'go_goodreads'
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoGoodreads::Attributes do
4
+ before(:all) do
5
+ class Thing
6
+ include GoGoodreads::Resource
7
+
8
+ attribute :klazz_id, :map_from => 'id'
9
+ attribute :page_count, :type => Integer
10
+ attribute :simple
11
+ attribute :date_added, :type => Time
12
+
13
+ def self.initialize_with_node(xml)
14
+ new(to_attributes!(xml))
15
+ end
16
+ end
17
+
18
+ end
19
+
20
+ before(:each) do
21
+ xml = "<xmlrootResponse><things><thing><id>123</id><page_count>523</page_count><simple><![CDATA[Hello, World!]]></simple><date_added>Fri Jun 01 19:11:54 -0700 2007</date_added></thing></things></xmlrootResponse>"
22
+ node = Nokogiri::XML(xml)
23
+ @thing = Thing.initialize_with_node(node.search('things > thing').first)
24
+ end
25
+
26
+ it "parses the attributes from the xml node correctly" do
27
+ @thing.klazz_id.should == "123"
28
+ @thing.page_count.should == 523
29
+ @thing.simple.should == "Hello, World!"
30
+ @thing.date_added.should == Time.parse("Fri Jun 01 19:11:54 -0700 2007")
31
+ end
32
+ end
data/spec/book_spec.rb ADDED
@@ -0,0 +1,30 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoGoodreads::Book do
4
+ use_vcr_cassette 'book_by_isbn'
5
+
6
+ before(:each) do
7
+ GoGoodreads.configure do |config|
8
+ config.api_key = "1IlntIwcUm5CpTbQhu7Zg"
9
+ end
10
+ end
11
+
12
+ describe ".show_by_isbn" do
13
+ context "isbn is 0441172717" do
14
+ subject { GoGoodreads::Book.show_by_isbn("0441172717") }
15
+
16
+ its(:title) { should == "Dune (Dune Chronicles, #1)" }
17
+ its(:isbn) { should == "0441172717" }
18
+ its(:isbn13) { should == "9780441172719" }
19
+ its(:asin) { should be_nil }
20
+ its(:image_url) { should == "http://photo.goodreads.com/books/1170430859m/53732.jpg" }
21
+ its(:small_image_url) { should == "http://photo.goodreads.com/books/1170430859s/53732.jpg" }
22
+ its(:description) { should == %(This Hugo and Nebula Award winner tells the sweeping tale of a desert planet called Arrakis, the focus of an intricate power struggle in a byzantine interstellar empire. Arrakis is the sole source of Melange, the &quot;spice of spices.&quot; Melange is necessary for interstellar travel and grants psychic powers and longevity, so whoever controls it wields great influence. The troubles begin when stewardship of Arrakis is transferred by the Emperor from the Harkonnen Noble House to House Atreides. The Harkonnens don't want to give up their privilege, though, and through sabotage and treachery they cast young Duke Paul Atreides out into the planet's harsh environment to die. There he falls in with the Fremen, a tribe of desert dwellers who become the basis of the army with which he will reclaim what's rightfully his. Paul Atreides, though, is far more than just a usurped duke. He might be the end product of a very long-term genetic experiment designed to breed a super human; he might be a messiah. His struggle is at the center of a nexus of powerful people and events, and the repercussions will be felt throughout the Imperium. Dune is one of the most famous science fiction novels ever written, and deservedly so. The setting is elaborate and ornate, the plot labyrinthine, the adventures exciting. Five sequels follow. --Brooks Peck) }
23
+ its(:num_pages) { should == 535 }
24
+ its(:authors) { should have(1).items }
25
+ its(:url) { should == "http://www.goodreads.com/book/show/53732.Dune" }
26
+ its(:link) { should == "http://www.goodreads.com/book/show/53732.Dune" }
27
+ its(:reviews) { should have(28).items }
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+
3
+ describe GoGoodreads, '.configure' do
4
+ it "should set up the api_key and the secret_key" do
5
+ GoGoodreads.configure do |config|
6
+ config.api_key = "someapikey"
7
+ config.secret = "secret"
8
+ end
9
+
10
+ GoGoodreads::Config.api_key.should == "someapikey"
11
+ GoGoodreads::Config.secret.should == "secret"
12
+ end
13
+ end
@@ -0,0 +1,109 @@
1
+ ---
2
+ - !ruby/struct:VCR::HTTPInteraction
3
+ request: !ruby/struct:VCR::Request
4
+ method: :get
5
+ uri: http://www.goodreads.com:80/book/isbn?isbn=0441172717&key=1IlntIwcUm5CpTbQhu7Zg
6
+ body:
7
+ headers:
8
+ response: !ruby/struct:VCR::Response
9
+ status: !ruby/struct:VCR::ResponseStatus
10
+ code: 200
11
+ message: OK
12
+ headers:
13
+ content-type:
14
+ - application/xml; charset=utf-8
15
+ status:
16
+ - "200"
17
+ x-powered-by:
18
+ - Phusion Passenger (mod_rails/mod_rack) 3.0.0
19
+ etag:
20
+ - "\"38c8128410a791eda136304e542392ca\""
21
+ x-runtime:
22
+ - "245"
23
+ content-length:
24
+ - "52001"
25
+ set-cookie:
26
+ - _session_id=88e01ae88a5d8e352ae198cab36cdee0; domain=.goodreads.com; path=/; HttpOnly
27
+ cache-control:
28
+ - private, max-age=0, must-revalidate
29
+ server:
30
+ - nginx/0.8.52 + Phusion Passenger 3.0.0 (mod_rails/mod_rack)
31
+ body: "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\
32
+ <GoodreadsResponse>\n\
33
+ \t<Request>\n\
34
+ \t\t<authentication>true</authentication>\n\
35
+ \t\t\t\t<key><![CDATA[1IlntIwcUm5CpTbQhu7Zg]]></key>\n\
36
+ \t\t <method><![CDATA[book_isbn]]></method>\n\
37
+ \t</Request>\n\
38
+ \t<book>\n <id>53732</id>\n <title><![CDATA[Dune (Dune Chronicles, #1)]]></title>\n <isbn><![CDATA[0441172717]]></isbn>\n <isbn13><![CDATA[9780441172719]]></isbn13>\n <asin><![CDATA[]]></asin>\n <image_url>http://photo.goodreads.com/books/1170430859m/53732.jpg</image_url>\n <small_image_url>http://photo.goodreads.com/books/1170430859s/53732.jpg</small_image_url>\n <publication_year></publication_year>\n <publication_month></publication_month>\n <publication_day></publication_day>\n <publisher></publisher>\n <language_code>eng</language_code>\n <description><![CDATA[This Hugo and Nebula Award winner tells the sweeping tale of a desert planet called Arrakis, the focus of an intricate power struggle in a byzantine interstellar empire. Arrakis is the sole source of Melange, the &quot;spice of spices.&quot; Melange is necessary for interstellar travel and grants psychic powers and longevity, so whoever controls it wields great influence. The troubles begin when stewardship of Arrakis is transferred by the Emperor from the Harkonnen Noble House to House Atreides. The Harkonnens don't want to give up their privilege, though, and through sabotage and treachery they cast young Duke Paul Atreides out into the planet's harsh environment to die. There he falls in with the Fremen, a tribe of desert dwellers who become the basis of the army with which he will reclaim what's rightfully his. Paul Atreides, though, is far more than just a usurped duke. He might be the end product of a very long-term genetic experiment designed to breed a super human; he might be a messiah. His struggle is at the center of a nexus of powerful people and events, and the repercussions will be felt throughout the Imperium. Dune is one of the most famous science fiction novels ever written, and deservedly so. The setting is elaborate and ornate, the plot labyrinthine, the adventures exciting. Five sequels follow. --Brooks Peck]]></description>\n <work>\n <best_book_id type=\"integer\">234225</best_book_id>\n <books_count type=\"integer\">109</books_count>\n <desc_user_id type=\"integer\">-30</desc_user_id>\n <id type=\"integer\">3634639</id>\n <media_type>book</media_type>\n <original_language_id nil=\"true\" type=\"integer\"></original_language_id>\n <original_publication_day nil=\"true\" type=\"integer\"></original_publication_day>\n <original_publication_month nil=\"true\" type=\"integer\"></original_publication_month>\n <original_publication_year type=\"integer\">1965</original_publication_year>\n <original_title>Dune</original_title>\n <rating_dist>5:47023|4:31053|3:20374|2:7790|1:6405|total:112645</rating_dist>\n <ratings_count type=\"integer\">113248</ratings_count>\n <ratings_sum type=\"integer\">444715</ratings_sum>\n <reviews_count type=\"integer\">151388</reviews_count>\n <text_reviews_count type=\"integer\">3348</text_reviews_count>\n\
39
+ </work>\n\n <average_rating><![CDATA[3.93]]></average_rating>\n <num_pages><![CDATA[535]]></num_pages>\n <ratings_count><![CDATA[3474]]></ratings_count>\n <text_reviews_count><![CDATA[345]]></text_reviews_count>\n \n <url><![CDATA[http://www.goodreads.com/book/show/53732.Dune]]></url>\n <link><![CDATA[http://www.goodreads.com/book/show/53732.Dune]]></link>\n <authors>\n <author>\n <id>58</id>\n <name><![CDATA[Frank Herbert]]></name>\n <image_url><![CDATA[http://photo.goodreads.com/authors/1168661521p5/58.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/authors/1168661521p2/58.jpg]]></small_image_url>\n <link><![CDATA[http://www.goodreads.com/author/show/58.Frank_Herbert]]></link>\n <average_rating>3.83</average_rating>\n <ratings_count>179357</ratings_count>\n <text_reviews_count>5350</text_reviews_count>\n </author>\n </authors>\n <reviews start=\"1\" end=\"28\" total=\"151269\">\n \n <review>\n <id>38209515</id>\n <user>\n <id>1713956</id>\n <name><![CDATA[Manny]]></name>\n <location><![CDATA[Cambridge, C3, The United Kingdom]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1713956-manny]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1227275844p3/1713956.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1227275844p2/1713956.jpg]]></small_image_url>\n\
40
+ </user>\n <rating>4</rating>\n <votes>109</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Thu Jan 01 00:00:00 -0800 1970</read_at>\n <date_added>Thu Nov 20 06:09:14 -0800 2008</date_added>\n <date_updated>Fri Mar 20 07:16:04 -0700 2009</date_updated>\n <read_count>5</read_count>\n <body>\n <![CDATA[There's a characteristically witty essay by Borges about a man who rewrites <em>Don Quixote</em>, many centuries after Cervantes. He publishes a novel with the same title, containing the same words in the same order. But, as Borges shows you, the different cultural context means it's a completely new book! W...\n <a href=\"http://www.goodreads.com/review/show/38209515\">more...</a>\n ]]>\n </body>\n <comments_count>17</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/38209515]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/38209515]]></link>\n\
41
+ </review>\n\n \n <review>\n <id>140124821</id>\n <user>\n <id>2863914</id>\n <name><![CDATA[Joel]]></name>\n <location><![CDATA[Oak Park, IL]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/2863914-joel]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1288885128p3/2863914.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1288885128p2/2863914.jpg]]></small_image_url>\n\
42
+ </user>\n <rating>4</rating>\n <votes>15</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"2011\" />\n <shelf name=\"book-club\" />\n <shelf name=\"classics\" />\n <shelf name=\"sci-fi-fantasy\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at>Fri Jan 28 00:00:00 -0800 2011</started_at>\n <read_at>Fri Mar 11 00:00:00 -0800 2011</read_at>\n <date_added>Tue Jan 11 20:52:44 -0800 2011</date_added>\n <date_updated>Sun Mar 13 12:46:18 -0700 2011</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[DBR to follow, at Ceridwen's request. She must have used one of her Bene Gesserit tricks on me.\r<br/>\r<br/>***\r<br/>Dune. Dune is a fascinating book. A classic of science-fiction, it plays equally as fantasy and allegory. It is deeply textured, richly layered. And if you want to read a sensible revi...\n <a href=\"http://www.goodreads.com/review/show/140124821\">more...</a>\n ]]>\n </body>\n <comments_count>25</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/140124821]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/140124821]]></link>\n\
43
+ </review>\n\n \n <review>\n <id>23505468</id>\n <user>\n <id>1205220</id>\n <name><![CDATA[Matt]]></name>\n <location><![CDATA[Columbus, OH]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1205220-matt]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1216068593p3/1205220.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1216068593p2/1205220.jpg]]></small_image_url>\n\
44
+ </user>\n <rating>5</rating>\n <votes>33</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"fantasy\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sun Jul 01 00:00:00 -0700 1984</read_at>\n <date_added>Mon Jun 02 06:54:06 -0700 2008</date_added>\n <date_updated>Thu Sep 04 09:13:08 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Like most of my five star books, I\xE2\x80\x99ve read Dune multiple times. In fact, I\xE2\x80\x99d say that what makes a book more than just enjoyable and instead truly amazing is that you want to read it more than once and are rewarded for doing so. I\xE2\x80\x99ve probably read Dune six times, and I\xE2\x80\x99ve never gotten tired of it ...\n <a href=\"http://www.goodreads.com/review/show/23505468\">more...</a>\n ]]>\n </body>\n <comments_count>6</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/23505468]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/23505468]]></link>\n\
45
+ </review>\n\n \n <review>\n <id>2348449</id>\n <user>\n <id>147818</id>\n <name><![CDATA[John]]></name>\n <location><![CDATA[The United States]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/147818-john]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1276202553p3/147818.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1276202553p2/147818.jpg]]></small_image_url>\n\
46
+ </user>\n <rating>2</rating>\n <votes>23</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[Science fiction readers, fantasy readers, speculative fiction readers]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Fri Dec 01 00:00:00 -0800 2006</read_at>\n <date_added>Sun Jun 24 23:28:28 -0700 2007</date_added>\n <date_updated>Wed Dec 16 22:36:40 -0800 2009</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[No one should argue the importance <em>Dune</em>. It laid the foundations for a great deal of the themes and constructs in modern science fiction. Frank Herbert was as important to the genre as Isaac Asimov and Arthur Clarke. Unfortunately, just like them, he's quite dated, and his books can be a labor to re...\n <a href=\"http://www.goodreads.com/review/show/2348449\">more...</a>\n ]]>\n </body>\n <comments_count>4</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/2348449]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/2348449]]></link>\n\
47
+ </review>\n\n \n <review>\n <id>1598115</id>\n <user>\n <id>84023</id>\n <name><![CDATA[Keely]]></name>\n <location><![CDATA[Belleville, NJ]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/84023-keely]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1274333636p3/84023.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1274333636p2/84023.jpg]]></small_image_url>\n\
48
+ </user>\n <rating>4</rating>\n <votes>12</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"american\" />\n <shelf name=\"childhood\" />\n <shelf name=\"novel\" />\n <shelf name=\"reviewed\" />\n <shelf name=\"sci-fi\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Fri Jun 01 19:11:54 -0700 2007</date_added>\n <date_updated>Thu Dec 09 21:18:29 -0800 2010</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[People often forget that this series is what innovated our modern concept of science fiction (up until Neuromancer and The Martix, at least). Dune took the Space Opera and asked if it might be more than spandex, dildo-shaped rockets, and scantily-clad green women. Herbert created a vast and complex ...\n <a href=\"http://www.goodreads.com/review/show/1598115\">more...</a>\n ]]>\n </body>\n <comments_count>2</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/1598115]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/1598115]]></link>\n\
49
+ </review>\n\n \n <review>\n <id>20320</id>\n <user>\n <id>1994</id>\n <name><![CDATA[Banzai]]></name>\n <location><![CDATA[Villa Park, IL]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1994-banzai]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1219416776p3/1994.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1219416776p2/1994.jpg]]></small_image_url>\n\
50
+ </user>\n <rating>5</rating>\n <votes>16</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sat Jan 01 00:00:00 -0800 2000</read_at>\n <date_added>Mon Feb 05 09:38:13 -0800 2007</date_added>\n <date_updated>Wed Dec 16 15:55:53 -0800 2009</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I guess I'm one of the few that bridge the gap between the Pride and Prejudice camp and the Dune camp. I loved both.\r<br/>\r<br/>Dune isn't a light, enjoyable read. At times it reads more like excerpts from geology, ecology, zoology, sociology, pscyhology, and political textbooks. The characters are ...\n <a href=\"http://www.goodreads.com/review/show/20320\">more...</a>\n ]]>\n </body>\n <comments_count>4</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/20320]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/20320]]></link>\n\
51
+ </review>\n\n \n <review>\n <id>6974116</id>\n <user>\n <id>368858</id>\n <name><![CDATA[Adam]]></name>\n <location><![CDATA[Ashland, OH]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/368858-adam]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1189456780p3/368858.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1189456780p2/368858.jpg]]></small_image_url>\n\
52
+ </user>\n <rating>5</rating>\n <votes>8</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sat Apr 01 00:00:00 -0800 2000</read_at>\n <date_added>Fri Sep 28 20:08:34 -0700 2007</date_added>\n <date_updated>Sun Sep 14 09:22:12 -0700 2008</date_updated>\n <read_count>5-6</read_count>\n <body>\n <![CDATA[I've read and reread this novel across the years, and I'll continue to do so.\r<br/>\r<br/>Dune was Frank Herbert's imagination breathed into the pages of a single book. He wrote numerous others to follow it, all of which continue to explore and flesh out the world he introduced us to in this, the fi...\n <a href=\"http://www.goodreads.com/review/show/6974116\">more...</a>\n ]]>\n </body>\n <comments_count>3</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/6974116]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/6974116]]></link>\n\
53
+ </review>\n\n \n <review>\n <id>93981680</id>\n <user>\n <id>1376766</id>\n <name><![CDATA[Becky]]></name>\n <location><![CDATA[Wilkes Barre, PA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1376766-becky]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1284393199p3/1376766.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1284393199p2/1376766.jpg]]></small_image_url>\n\
54
+ </user>\n <rating>4</rating>\n <votes>7</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"--2010--\" />\n <shelf name=\"blog_reviews\" />\n <shelf name=\"classics\" />\n <shelf name=\"highly-recommended\" />\n <shelf name=\"owned\" />\n <shelf name=\"political\" />\n <shelf name=\"religion-related\" />\n <shelf name=\"reviewed\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at>Sat Apr 24 00:00:00 -0700 2010</started_at>\n <read_at>Sat May 01 00:00:00 -0700 2010</read_at>\n <date_added>Sat Mar 13 21:11:43 -0800 2010</date_added>\n <date_updated>Thu Aug 05 10:05:25 -0700 2010</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[This is one of those books that I've always thought that I should read, but never actually wanted to read, simply because I thought that it would have to be tedious and dry and, I hate to say it, boring. Which goes to show what a poor book-cover judge I am, because this book was anything but tedious...\n <a href=\"http://www.goodreads.com/review/show/93981680\">more...</a>\n ]]>\n </body>\n <comments_count>16</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/93981680]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/93981680]]></link>\n\
55
+ </review>\n\n \n <review>\n <id>23171867</id>\n <user>\n <id>1188122</id>\n <name><![CDATA[Ben]]></name>\n <location><![CDATA[Thunder Bay, ON, Canada]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1188122-ben-babcock]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1211839871p3/1188122.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1211839871p2/1188122.jpg]]></small_image_url>\n\
56
+ </user>\n <rating>5</rating>\n <votes>6</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"2011-read\" />\n <shelf name=\"favourites\" />\n <shelf name=\"own\" />\n <shelf name=\"posthuman\" />\n <shelf name=\"religion-fiction\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at>Sat Feb 05 00:00:00 -0800 2011</started_at>\n <read_at>Sat Feb 12 00:00:00 -0800 2011</read_at>\n <date_added>Wed May 28 18:06:16 -0700 2008</date_added>\n <date_updated>Sat Feb 12 22:32:12 -0800 2011</date_updated>\n <read_count>3</read_count>\n <body>\n <![CDATA[<strong>Second review (Reviewed on February 12, 2011).</strong>\r<br/>\r<br/><em>Dune</em> is a classic because it tells a classic story well. It combines two plots that I love: a vast political intrigue with an intimate family conflict. The Atreides and Harkonnens are related by blood; their feud is a blood feud going back ge...\n <a href=\"http://www.goodreads.com/review/show/23171867\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/23171867]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/23171867]]></link>\n\
57
+ </review>\n\n \n <review>\n <id>8240703</id>\n <user>\n <id>441385</id>\n <name><![CDATA[Donovan]]></name>\n <location><![CDATA[Chicago, IL]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/441385-donovan]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1298491418p3/441385.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1298491418p2/441385.jpg]]></small_image_url>\n\
58
+ </user>\n <rating>5</rating>\n <votes>9</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[anyone who thinks they love StarWars]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Thu Mar 01 00:00:00 -0800 2007</read_at>\n <date_added>Thu Oct 25 13:04:51 -0700 2007</date_added>\n <date_updated>Thu Oct 25 13:04:51 -0700 2007</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I had never read <u>Dune</u>. I can\xE2\x80\x99t put my finger on exactly why I hadn\xE2\x80\x99t read it; although, I do have a nebulous memory of picking it up and not being able to get in to it. I know for a fact that I\xE2\x80\x99d read the closing line previously, which is something I never do prior to reading a book; so that is real...\n <a href=\"http://www.goodreads.com/review/show/8240703\">more...</a>\n ]]>\n </body>\n <comments_count>1</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/8240703]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/8240703]]></link>\n\
59
+ </review>\n\n \n <review>\n <id>20670476</id>\n <user>\n <id>667084</id>\n <name><![CDATA[Cassidy]]></name>\n <location><![CDATA[The United States]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/667084-cassidy]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1197253437p3/667084.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1197253437p2/667084.jpg]]></small_image_url>\n\
60
+ </user>\n <rating>5</rating>\n <votes>6</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[People with flexibly discerning taste, and who don't mind a lot of glossary checks..]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Fri May 02 00:00:00 -0700 2008</read_at>\n <date_added>Mon Apr 21 14:43:47 -0700 2008</date_added>\n <date_updated>Mon May 05 18:19:57 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Frank Herbert\r<br/>Dune\r<br/>Philadelphia: Chilton Book Company, 1965\r<br/>pp. 483 (without appendices and glossary), 539 (with app. and glos.), unpriced\r<br/>ISBN: N/A\r<br/>\r<br/> Commonly billed as the best-selling science fiction novel of all time, Dune, an expansive tale of intrigue, religio...\n <a href=\"http://www.goodreads.com/review/show/20670476\">more...</a>\n ]]>\n </body>\n <comments_count>1</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/20670476]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/20670476]]></link>\n\
61
+ </review>\n\n \n <review>\n <id>15306545</id>\n <user>\n <id>891651</id>\n <name><![CDATA[Karen]]></name>\n <location><![CDATA[San Diego, CA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/891651-karen]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1208720825p3/891651.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1208720825p2/891651.jpg]]></small_image_url>\n\
62
+ </user>\n <rating>2</rating>\n <votes>4</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Thu Feb 28 00:00:00 -0800 2008</read_at>\n <date_added>Tue Feb 12 22:41:55 -0800 2008</date_added>\n <date_updated>Fri Feb 29 00:00:34 -0800 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I've read this before and liked it; several portions stick vividly in my mind but I never read the rest of the series. I still don't expect to read the rest of the series, but my friend just read it and has brought it up a few times in conversation so when they had it on the &quot;Librarians' Picks&quot;...\n <a href=\"http://www.goodreads.com/review/show/15306545\">more...</a>\n ]]>\n </body>\n <comments_count>1</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/15306545]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/15306545]]></link>\n\
63
+ </review>\n\n \n <review>\n <id>14597388</id>\n <user>\n <id>82278</id>\n <name><![CDATA[Jacob]]></name>\n <location><![CDATA[Hanoi, Viet Nam]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/82278-jacob]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1285757074p3/82278.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1285757074p2/82278.jpg]]></small_image_url>\n\
64
+ </user>\n <rating>0</rating>\n <votes>5</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Tue Feb 05 00:21:07 -0800 2008</date_added>\n <date_updated>Sun Feb 10 18:14:25 -0800 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[If this isn't a formative text, then I don't know what is. I figure evangelicals have the bible, and usually a regressive translation at that, while my family had weird science fiction novels. One that all ten of my brothers and sisters read was Dune. It's true. I grew up in a large family. A sprawl...\n <a href=\"http://www.goodreads.com/review/show/14597388\">more...</a>\n ]]>\n </body>\n <comments_count>3</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/14597388]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/14597388]]></link>\n\
65
+ </review>\n\n \n <review>\n <id>5005651</id>\n <user>\n <id>304412</id>\n <name><![CDATA[Matt]]></name>\n <location><![CDATA[Seattle, WA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/304412-matt]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1192132393p3/304412.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1192132393p2/304412.jpg]]></small_image_url>\n\
66
+ </user>\n <rating>5</rating>\n <votes>6</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[Everybody]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sun Jan 01 00:00:00 -0800 1984</read_at>\n <date_added>Thu Aug 23 09:56:11 -0700 2007</date_added>\n <date_updated>Thu Oct 11 12:09:44 -0700 2007</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[This is the best book ever written. Cerebrally stimulating for anyone. When we attempt to understand why entertainment of this caliber (Lord of the Rings, Star Wars) and mass appeal (Harry Potter) resonates so strongly with us, many are quick to utilize Jungian archetypes to support such effects. \r<br/>...\n <a href=\"http://www.goodreads.com/review/show/5005651\">more...</a>\n ]]>\n </body>\n <comments_count>2</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/5005651]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/5005651]]></link>\n\
67
+ </review>\n\n \n <review>\n <id>14145629</id>\n <user>\n <id>858949</id>\n <name><![CDATA[Chris]]></name>\n <location><![CDATA[Osaka, Japan]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/858949-chris]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1208350750p3/858949.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1208350750p2/858949.jpg]]></small_image_url>\n\
68
+ </user>\n <rating>4</rating>\n <votes>4</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Tue Jan 29 00:00:00 -0800 2008</read_at>\n <date_added>Thu Jan 31 06:36:48 -0800 2008</date_added>\n <date_updated>Thu Jan 31 06:47:15 -0800 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[When I was a kid, I tried about a dozen times to get through this book. My mom loved it, so I figured I'd give it a try, but this book definitely has a high learning curve and I had low patience.\r<br/>\r<br/>Years later, of course, when I knew something more about politics, religion, science and life...\n <a href=\"http://www.goodreads.com/review/show/14145629\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/14145629]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/14145629]]></link>\n\
69
+ </review>\n\n \n <review>\n <id>6591463</id>\n <user>\n <id>126262</id>\n <name><![CDATA[Brooke]]></name>\n <location><![CDATA[Hilliard, OH]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/126262-brooke]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1181591671p3/126262.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1181591671p2/126262.jpg]]></small_image_url>\n\
70
+ </user>\n <rating>4</rating>\n <votes>7</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"2008\" />\n <shelf name=\"science-fiction\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sat Sep 13 00:00:00 -0700 2008</read_at>\n <date_added>Sat Sep 22 00:08:50 -0700 2007</date_added>\n <date_updated>Sat Sep 13 17:55:17 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I've never given a book 5 stars instantly upon finishing it. My 5-star favorites became favorites after they had time to stick around in my mind for a year or so while my devotion to them grew. It's entirely possible Dune will join them in the future, but right now it's hard to tell. If I could, I w...\n <a href=\"http://www.goodreads.com/review/show/6591463\">more...</a>\n ]]>\n </body>\n <comments_count>3</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/6591463]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/6591463]]></link>\n\
71
+ </review>\n\n \n <review>\n <id>48120743</id>\n <user>\n <id>1748656</id>\n <name><![CDATA[Beth]]></name>\n <location><![CDATA[The United States]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1748656-beth]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1231095279p3/1748656.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1231095279p2/1748656.jpg]]></small_image_url>\n\
72
+ </user>\n <rating>4</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[people with interests in vermiculture, genetic engineering, and people facing water rationing]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Tue Mar 03 11:15:04 -0800 2009</date_added>\n <date_updated>Tue Mar 03 11:50:09 -0800 2009</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Sitting here on the desert planet -- uh State, Arakkis -- I mean California, I'm staring in amazement as water actually falls from the sky. \r<br/>\r<br/>This grand sprawling book has a lot to offer: genetic engineer witches, religion as premeditated social engineering, amazing heroic islamists -- I m...\n <a href=\"http://www.goodreads.com/review/show/48120743\">more...</a>\n ]]>\n </body>\n <comments_count>7</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/48120743]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/48120743]]></link>\n\
73
+ </review>\n\n \n <review>\n <id>47266993</id>\n <user>\n <id>1019174</id>\n <name><![CDATA[Terence]]></name>\n <location><![CDATA[Covina, CA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/1019174-terence]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1282879833p3/1019174.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1282879833p2/1019174.jpg]]></small_image_url>\n\
74
+ </user>\n <rating>3</rating>\n <votes>4</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"audio-books\" />\n <shelf name=\"sf-fantasy\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Mon Mar 09 09:12:31 -0700 2009</read_at>\n <date_added>Mon Feb 23 10:49:08 -0800 2009</date_added>\n <date_updated>Mon Mar 09 09:12:31 -0700 2009</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Don't mistake me, <em>Dune</em>, the novel, retains its 4+ stars in my heavens. This audio version gets the lesser rating because of deficiencies in presentation.\r<br/>\r<br/>The good side of the CD is that, as happened while <em>listening</em> to Tolkien's <a href=\"http://www.goodreads.com/book/show/18512.The_Return_of_the_King_The_Lord_of_the_Rings_Part_3_\" title=\"The Return of the King (The Lord of the Rings, Part 3) by J.R.R. Tolkien\">The Silmarillion</a>, I heard a lot of things I had missed or glo...\n <a href=\"http://www.goodreads.com/review/show/47266993\">more...</a>\n ]]>\n </body>\n <comments_count>2</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/47266993]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/47266993]]></link>\n\
75
+ </review>\n\n \n <review>\n <id>91837233</id>\n <user>\n <id>2250020</id>\n <name><![CDATA[Tatiana]]></name>\n <location><![CDATA[Greensboro, NC]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/2250020-tatiana]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1249783659p3/2250020.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1249783659p2/2250020.jpg]]></small_image_url>\n\
76
+ </user>\n <rating>4</rating>\n <votes>6</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"2010\" />\n <shelf name=\"nebula\" />\n <shelf name=\"sci-fi\" />\n </shelves>\n <recommended_for><![CDATA[fans of sophisticated science fiction]]></recommended_for>\n <recommended_by><![CDATA[Ryan]]></recommended_by>\n <started_at>Mon Apr 05 00:00:00 -0700 2010</started_at>\n <read_at>Tue Apr 13 00:00:00 -0700 2010</read_at>\n <date_added>Sun Feb 28 13:28:32 -0800 2010</date_added>\n <date_updated>Thu Apr 15 13:36:39 -0700 2010</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I like books for different reasons - characters, writing style, exciting plot. I will remember &quot;Dune&quot; for its remarkable world-building.\r<br/>\r<br/>Dune (or Arrakis) is a desert planet. It is barren, almost waterless, and it is the only source of melange - a spice with unique geriatric qua...\n <a href=\"http://www.goodreads.com/review/show/91837233\">more...</a>\n ]]>\n </body>\n <comments_count>9</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/91837233]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/91837233]]></link>\n\
77
+ </review>\n\n \n <review>\n <id>82035975</id>\n <user>\n <id>3074140</id>\n <name><![CDATA[David]]></name>\n <location><![CDATA[Cambridge, England., UT, The United Kingdom]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/3074140-david-menzies]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1261794078p3/3074140.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1261794078p2/3074140.jpg]]></small_image_url>\n\
78
+ </user>\n <rating>5</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Fri Dec 25 18:14:39 -0800 2009</date_added>\n <date_updated>Fri Mar 11 11:00:09 -0800 2011</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Dune, by Frank Herbert, is by far one of the most thought provoking books that I have ever read. It has been described by critics as a \xE2\x80\x9Ctriumph of the imagination\xE2\x80\x9D, and is often cited as the best-selling science fiction novel ever to be written. It is set thousands of years in the future, in which m...\n <a href=\"http://www.goodreads.com/review/show/82035975\">more...</a>\n ]]>\n </body>\n <comments_count>2</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/82035975]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/82035975]]></link>\n\
79
+ </review>\n\n \n <review>\n <id>72081089</id>\n <user>\n <id>2763302</id>\n <name><![CDATA[Pavel]]></name>\n <location><![CDATA[Moscow, 48, Russian Federation]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/2763302-pavel]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1253598397p3/2763302.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1253598397p2/2763302.jpg]]></small_image_url>\n\
80
+ </user>\n <rating>4</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at>Fri Jun 04 00:00:00 -0700 2010</started_at>\n <read_at>Fri Jun 11 00:00:00 -0700 2010</read_at>\n <date_added>Mon Sep 21 22:19:05 -0700 2009</date_added>\n <date_updated>Sun Jun 13 03:48:37 -0700 2010</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Since majority of my goodreads friends have read this book, I see no reason to re-tell its plot etc. All I have to say is that it is incredibly fun read and probably second fantasy book I really ever liked after Lord of the Rings. Evil is rarely that vivid and hateable, Freemens are totally cool. I ...\n <a href=\"http://www.goodreads.com/review/show/72081089\">more...</a>\n ]]>\n </body>\n <comments_count>6</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/72081089]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/72081089]]></link>\n\
81
+ </review>\n\n \n <review>\n <id>27313922</id>\n <user>\n <id>931383</id>\n <name><![CDATA[TeraD]]></name>\n <location><![CDATA[Tacoma, WA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/931383-terad]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1233789447p3/931383.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1233789447p2/931383.jpg]]></small_image_url>\n\
82
+ </user>\n <rating>5</rating>\n <votes>3</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"all-time-favorites\" />\n <shelf name=\"fantasy\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Fri Jul 18 00:00:00 -0700 2008</read_at>\n <date_added>Tue Jul 15 09:35:09 -0700 2008</date_added>\n <date_updated>Tue Jul 22 12:20:21 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Dune is a fantastic book. The confusion of the first few pages as you enter a new world quickly dissipates as you feel yourself drawn in and understanding begin to seep from the pages of the story. The imagery is amazing, the attention to detail enthralling and the characters deep and well-developed...\n <a href=\"http://www.goodreads.com/review/show/27313922\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/27313922]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/27313922]]></link>\n\
83
+ </review>\n\n \n <review>\n <id>2866668</id>\n <user>\n <id>147289</id>\n <name><![CDATA[Jason]]></name>\n <location><![CDATA[Chicago, IL]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/147289-jason-pettus]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1283695594p3/147289.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1283695594p2/147289.jpg]]></small_image_url>\n\
84
+ </user>\n <rating>4</rating>\n <votes>3</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Mon Jul 09 11:30:25 -0700 2007</date_added>\n <date_updated>Mon Jul 09 11:38:36 -0700 2007</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[Like many, my relationship with this science-fiction classic has changed as my life has progressed: too dense for me when first attempted as a young teen, by the time I was an undergraduate it was one of my all-time favorite novels; but then while reading it again near the age of 40, found a lot mor...\n <a href=\"http://www.goodreads.com/review/show/2866668\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/2866668]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/2866668]]></link>\n\
85
+ </review>\n\n \n <review>\n <id>2616095</id>\n <user>\n <id>165364</id>\n <name><![CDATA[Beggs]]></name>\n <location><![CDATA[Singapore]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/165364-beggs]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1183368190p3/165364.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1183368190p2/165364.jpg]]></small_image_url>\n\
86
+ </user>\n <rating>5</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Sun Jul 01 00:00:00 -0700 2007</read_at>\n <date_added>Mon Jul 02 00:32:03 -0700 2007</date_added>\n <date_updated>Tue Sep 07 18:16:38 -0700 2010</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I first read <a href=\"http://www.goodreads.com/book/show/19501.Eat_Pray_Love\" title=\"Eat, Pray, Love by Elizabeth Gilbert\">Dune</a> one summer sitting in an old arm chair in the basement of my grandparents house in rural Minnesota. I found a copy of Dune on the book shelf next to <a href=\"http://www.goodreads.com/author/show/858.Louis_L_Amour\" title=\"Louis L'Amour\">Louis Lamour</a> western and Readers Digest Condensed Books when I was 14 or so. A battered musty original print run version that had bel...\n <a href=\"http://www.goodreads.com/review/show/2616095\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/2616095]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/2616095]]></link>\n\
87
+ </review>\n\n \n <review>\n <id>646557</id>\n <user>\n <id>51289</id>\n <name><![CDATA[Katie]]></name>\n <location><![CDATA[Waterbury, VT]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/51289-katie]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1176685035p3/51289.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1176685035p2/51289.jpg]]></small_image_url>\n\
88
+ </user>\n <rating>2</rating>\n <votes>7</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Fri Dec 01 00:00:00 -0800 2006</read_at>\n <date_added>Mon Apr 09 10:01:43 -0700 2007</date_added>\n <date_updated>Mon Apr 09 10:13:38 -0700 2007</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I've loved science fiction my whole life, but I was finally told that I couldn't call myself a SF fan if I hadn't read Dune. So I read it. I know Dune is worshipped as a paragon of groundbreaking SF, I can witness and acknowledge Herbert's genius, and I can understand that when it was written it w...\n <a href=\"http://www.goodreads.com/review/show/646557\">more...</a>\n ]]>\n </body>\n <comments_count>7</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/646557]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/646557]]></link>\n\
89
+ </review>\n\n \n <review>\n <id>5774950</id>\n <user>\n <id>354744</id>\n <name><![CDATA[Exparrot]]></name>\n <location><![CDATA[The United States]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/354744-exparrot]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1192152370p3/354744.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1192152370p2/354744.jpg]]></small_image_url>\n\
90
+ </user>\n <rating>4</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[anyone who enjoys a good intense Scifi novel]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at>Wed Jan 01 00:00:00 -0800 2003</read_at>\n <date_added>Thu Sep 06 09:49:10 -0700 2007</date_added>\n <date_updated>Thu Sep 06 10:14:38 -0700 2007</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[To be honest, I only decided to read the series when I, by chance, saw the 1984 Dune movie on TV. Mayhap I was curious to see people riding on gigantic worms, so I went straight away to my local Borders to check out the book. It took me a few days to finish the first book, but I was defintely hooked...\n <a href=\"http://www.goodreads.com/review/show/5774950\">more...</a>\n ]]>\n </body>\n <comments_count>0</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/5774950]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/5774950]]></link>\n\
91
+ </review>\n\n \n <review>\n <id>22819854</id>\n <user>\n <id>811687</id>\n <name><![CDATA[Sandi]]></name>\n <location><![CDATA[Fountain Valley, CA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/811687-sandi]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1211125085p3/811687.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1211125085p2/811687.jpg]]></small_image_url>\n\
92
+ </user>\n <rating>5</rating>\n <votes>2</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n <shelf name=\"sci-fi\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[September Book of the Month for Science Fiction/Fantasy Group]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Fri May 23 10:55:49 -0700 2008</date_added>\n <date_updated>Wed Aug 20 06:32:05 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[I'm officially giving myself permission to not finish this book. I'm only a few chapters in, but I've read it two or three times already, albeit more than ten years ago. I just can't do it one more time.\r<br/>\r<br/>I'm not saying &quot;Dune&quot; is bad. I think it's an excellent choice for the S...\n <a href=\"http://www.goodreads.com/review/show/22819854\">more...</a>\n ]]>\n </body>\n <comments_count>5</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/22819854]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/22819854]]></link>\n\
93
+ </review>\n\n \n <review>\n <id>7609615</id>\n <user>\n <id>190396</id>\n <name><![CDATA[Vanessa]]></name>\n <location><![CDATA[Petaluma, CA]]></location>\n <link><![CDATA[http://www.goodreads.com/user/show/190396-vanessa]]></link>\n <image_url><![CDATA[http://photo.goodreads.com/users/1209310514p3/190396.jpg]]></image_url>\n <small_image_url><![CDATA[http://photo.goodreads.com/users/1209310514p2/190396.jpg]]></small_image_url>\n\
94
+ </user>\n <rating>3</rating>\n <votes>3</votes>\n\n \n <spoiler_flag>false</spoiler_flag>\n <shelves>\n <shelf name=\"read\" />\n </shelves>\n <recommended_for><![CDATA[]]></recommended_for>\n <recommended_by><![CDATA[]]></recommended_by>\n <started_at></started_at>\n <read_at></read_at>\n <date_added>Thu Oct 11 21:40:29 -0700 2007</date_added>\n <date_updated>Tue Jun 03 07:03:35 -0700 2008</date_updated>\n <read_count></read_count>\n <body>\n <![CDATA[This was (looks furtively over shoulder in case a hardcore Sci-Fi aficianado is lurking nearby with a baseball bat) just okay. Certainly, Herbert has created a richly detailed universe that has delighted legions of fans, but while I admired his construction I was not pulled in by it. The book was...\n <a href=\"http://www.goodreads.com/review/show/7609615\">more...</a>\n ]]>\n </body>\n <comments_count>1</comments_count>\n \n <url><![CDATA[http://www.goodreads.com/review/show/7609615]]></url>\n <link><![CDATA[http://www.goodreads.com/review/show/7609615]]></link>\n\
95
+ </review>\n\n </reviews>\n <popular_shelves>\n <shelf name=\"to-read\" count=\"32809\"/>\n <shelf name=\"sci-fi\" count=\"1675\"/>\n <shelf name=\"science-fiction\" count=\"1627\"/>\n <shelf name=\"currently-reading\" count=\"1002\"/>\n <shelf name=\"fiction\" count=\"910\"/>\n <shelf name=\"favorites\" count=\"434\"/>\n <shelf name=\"fantasy\" count=\"428\"/>\n <shelf name=\"scifi\" count=\"342\"/>\n <shelf name=\"sci-fi-fantasy\" count=\"253\"/>\n </popular_shelves>\n <book_links>\n <book_link>\n <id>1</id>\n <name><![CDATA[Amazon]]></name>\n <link>http://www.goodreads.com/book_link/follow/1?book_id=53732</link>\n\
96
+ </book_link><book_link>\n <id>3</id>\n <name><![CDATA[Barnes & Noble]]></name>\n <link>http://www.goodreads.com/book_link/follow/3?book_id=53732</link>\n\
97
+ </book_link><book_link>\n <id>8</id>\n <name><![CDATA[WorldCat]]></name>\n <link>http://www.goodreads.com/book_link/follow/8?book_id=53732</link>\n\
98
+ </book_link><book_link>\n <id>2</id>\n <name><![CDATA[Half.com]]></name>\n <link>http://www.goodreads.com/book_link/follow/2?book_id=53732</link>\n\
99
+ </book_link><book_link>\n <id>4</id>\n <name><![CDATA[Abebooks]]></name>\n <link>http://www.goodreads.com/book_link/follow/4?book_id=53732</link>\n\
100
+ </book_link><book_link>\n <id>5</id>\n <name><![CDATA[Alibris]]></name>\n <link>http://www.goodreads.com/book_link/follow/5?book_id=53732</link>\n\
101
+ </book_link><book_link>\n <id>6</id>\n <name><![CDATA[Powells]]></name>\n <link>http://www.goodreads.com/book_link/follow/6?book_id=53732</link>\n\
102
+ </book_link><book_link>\n <id>7</id>\n <name><![CDATA[IndieBound]]></name>\n <link>http://www.goodreads.com/book_link/follow/7?book_id=53732</link>\n\
103
+ </book_link><book_link>\n <id>9</id>\n <name><![CDATA[Indigo.ca]]></name>\n <link>http://www.goodreads.com/book_link/follow/9?book_id=53732</link>\n\
104
+ </book_link><book_link>\n <id>10</id>\n <name><![CDATA[Audible]]></name>\n <link>http://www.goodreads.com/book_link/follow/10?book_id=53732</link>\n\
105
+ </book_link><book_link>\n <id>1602</id>\n <name><![CDATA[Google eBooks]]></name>\n <link>http://www.goodreads.com/book_link/follow/1602?book_id=53732</link>\n\
106
+ </book_link>\n </book_links>\n \n \n \n\
107
+ </book>\n\n\
108
+ </GoodreadsResponse>"
109
+ http_version: "1.1"
@@ -0,0 +1,21 @@
1
+ $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
+ $LOAD_PATH.unshift(File.dirname(__FILE__))
3
+ require 'rspec'
4
+ require 'go_goodreads'
5
+ require 'vcr'
6
+ require 'webmock'
7
+
8
+ VCR.config do |c|
9
+ c.cassette_library_dir = 'spec/fixtures/vcr_cassettes'
10
+ c.stub_with :webmock
11
+ # c.default_cassette_options = { :record => :new_episodes }
12
+ end
13
+
14
+ # Requires supporting files with custom matchers and macros, etc,
15
+ # in ./support/ and its subdirectories.
16
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
17
+
18
+ RSpec.configure do |config|
19
+ config.extend VCR::RSpec::Macros
20
+ end
21
+
metadata ADDED
@@ -0,0 +1,181 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: gogoodreads
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.0.3
6
+ platform: ruby
7
+ authors:
8
+ - Tim Medina
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-03-24 00:00:00 +08:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: rspec
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 2.3.0
24
+ type: :development
25
+ prerelease: false
26
+ version_requirements: *id001
27
+ - !ruby/object:Gem::Dependency
28
+ name: yard
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 0.6.0
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: *id002
38
+ - !ruby/object:Gem::Dependency
39
+ name: bundler
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.0.0
46
+ type: :development
47
+ prerelease: false
48
+ version_requirements: *id003
49
+ - !ruby/object:Gem::Dependency
50
+ name: jeweler
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ~>
55
+ - !ruby/object:Gem::Version
56
+ version: 1.5.2
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: *id004
60
+ - !ruby/object:Gem::Dependency
61
+ name: vcr
62
+ requirement: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "0"
68
+ type: :development
69
+ prerelease: false
70
+ version_requirements: *id005
71
+ - !ruby/object:Gem::Dependency
72
+ name: webmock
73
+ requirement: &id006 !ruby/object:Gem::Requirement
74
+ none: false
75
+ requirements:
76
+ - - ">="
77
+ - !ruby/object:Gem::Version
78
+ version: "0"
79
+ type: :development
80
+ prerelease: false
81
+ version_requirements: *id006
82
+ - !ruby/object:Gem::Dependency
83
+ name: rcov
84
+ requirement: &id007 !ruby/object:Gem::Requirement
85
+ none: false
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: "0"
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: *id007
93
+ - !ruby/object:Gem::Dependency
94
+ name: nokogiri
95
+ requirement: &id008 !ruby/object:Gem::Requirement
96
+ none: false
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: "0"
101
+ type: :runtime
102
+ prerelease: false
103
+ version_requirements: *id008
104
+ description: Allows you to progammatically pull book reviews from Goodreads using its API.
105
+ email: iamteem@gmail.com
106
+ executables: []
107
+
108
+ extensions: []
109
+
110
+ extra_rdoc_files:
111
+ - LICENSE.txt
112
+ - README.rdoc
113
+ - TODO
114
+ files:
115
+ - .document
116
+ - .rspec
117
+ - Gemfile
118
+ - LICENSE.txt
119
+ - README.rdoc
120
+ - Rakefile
121
+ - TODO
122
+ - VERSION
123
+ - gogoodreads.gemspec
124
+ - lib/go_goodreads.rb
125
+ - lib/go_goodreads/attributes.rb
126
+ - lib/go_goodreads/author.rb
127
+ - lib/go_goodreads/book.rb
128
+ - lib/go_goodreads/comment.rb
129
+ - lib/go_goodreads/config.rb
130
+ - lib/go_goodreads/event.rb
131
+ - lib/go_goodreads/list.rb
132
+ - lib/go_goodreads/owned_book.rb
133
+ - lib/go_goodreads/quote.rb
134
+ - lib/go_goodreads/request.rb
135
+ - lib/go_goodreads/resource.rb
136
+ - lib/go_goodreads/review.rb
137
+ - lib/go_goodreads/shelf.rb
138
+ - lib/go_goodreads/user.rb
139
+ - lib/go_goodreads/user_status.rb
140
+ - lib/gogoodreads.rb
141
+ - spec/attribute_spec.rb
142
+ - spec/book_spec.rb
143
+ - spec/config_spec.rb
144
+ - spec/fixtures/vcr_cassettes/book_by_isbn.yml
145
+ - spec/spec_helper.rb
146
+ has_rdoc: true
147
+ homepage: http://github.com/iamteem/gogoodreads
148
+ licenses:
149
+ - MIT
150
+ post_install_message:
151
+ rdoc_options: []
152
+
153
+ require_paths:
154
+ - lib
155
+ required_ruby_version: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ">="
159
+ - !ruby/object:Gem::Version
160
+ hash: -184150397033762058
161
+ segments:
162
+ - 0
163
+ version: "0"
164
+ required_rubygems_version: !ruby/object:Gem::Requirement
165
+ none: false
166
+ requirements:
167
+ - - ">="
168
+ - !ruby/object:Gem::Version
169
+ version: "0"
170
+ requirements: []
171
+
172
+ rubyforge_project:
173
+ rubygems_version: 1.6.2
174
+ signing_key:
175
+ specification_version: 3
176
+ summary: Goodreads API Ruby Interface
177
+ test_files:
178
+ - spec/attribute_spec.rb
179
+ - spec/book_spec.rb
180
+ - spec/config_spec.rb
181
+ - spec/spec_helper.rb