Module: Goodreads::Reviews
- Included in:
- Client
- Defined in:
- lib/goodreads/client/reviews.rb
Instance Method Summary collapse
-
#create_review(book_id, params = {}) ⇒ Object
Add review for a book.
-
#edit_review(review_id, params = {}) ⇒ Object
Edit review for a book.
-
#recent_reviews(params = {}) ⇒ Object
Recent reviews from all members.
-
#review(id) ⇒ Object
Get review details.
-
#reviews(params = {}) ⇒ Object
Get list of reviews.
-
#user_review(user_id, book_id, params = {}) ⇒ Object
Get a user’s review for a given book.
Instance Method Details
#create_review(book_id, params = {}) ⇒ Object
Add review for a book
Params can include :review, :rating, and :shelf
review: text of the review (optional) rating: rating (0-5) (optional, default is 0 (no rating)) shelf: Name of shelf to add book to (optional, must exist, see: shelves.list)
Note that Goodreads API documentation says that this endpoint accepts the read_at parameter but it does not appear to work as of 2018-06.
51 52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/goodreads/client/reviews.rb', line 51 def create_review(book_id, params = {}) params = params.merge(book_id: book_id, v: "2") params[:read_at] = params[:read_at].strftime('%Y-%m-%d') if params[:read_at].is_a?(Time) params[:'review[review]'] = params.delete(:review) if params[:review] params[:'review[rating]'] = params.delete(:rating) if params[:rating] params[:'review[read_at]'] = params.delete(:read_at) if params[:read_at] data = oauth_request_method(:post, '/review.xml', params) Hashie::Mash.new(data["review"]) end |
#edit_review(review_id, params = {}) ⇒ Object
Edit review for a book
Params can include :review, :rating, :read_at and :shelf, and :finished
review: text of the review (optional) rating: rating (0-5) (optional, default is 0 (no rating)) shelf: Name of shelf to add book to (optional, must exist, see: shelves.list) read_at: Time object or String in YYYY-MM-DD format (optional) finished: true to mark finished reading (optional) shelf: Name of shelf to add book to (optional, must exist, see: shelves.list)
75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/goodreads/client/reviews.rb', line 75 def edit_review(review_id, params = {}) params = params.merge(v: "2") params[:read_at] = params[:read_at].strftime('%Y-%m-%d') if params[:read_at].is_a?(Time) params[:'review[review]'] = params.delete(:review) if params[:review] params[:'review[rating]'] = params.delete(:rating) if params[:rating] params[:'review[read_at]'] = params.delete(:read_at) if params[:read_at] # Documentation says that you should use HTTP PUT, but API returns # 401 Unauthorized when PUT is used instead of POST data = oauth_request_method(:post, "/review/#{review_id}.xml", params) Hashie::Mash.new(data["review"]) end |
#recent_reviews(params = {}) ⇒ Object
Recent reviews from all members.
params - Select only non-cropped reviews
7 8 9 10 11 12 13 14 |
# File 'lib/goodreads/client/reviews.rb', line 7 def recent_reviews(params = {}) skip_cropped = params.delete(:skip_cropped) || false data = request("/review/recent_reviews", params) return unless data["reviews"] && data["reviews"].key?("review") reviews = data["reviews"]["review"].map { |r| Hashie::Mash.new(r) } reviews = reviews.select { |r| !r.body.include?(r.url) } if skip_cropped reviews end |
#review(id) ⇒ Object
Get review details
18 19 20 21 |
# File 'lib/goodreads/client/reviews.rb', line 18 def review(id) data = request("/review/show", id: id) Hashie::Mash.new(data["review"]) end |
#reviews(params = {}) ⇒ Object
Get list of reviews
25 26 27 28 29 30 31 32 33 |
# File 'lib/goodreads/client/reviews.rb', line 25 def reviews(params = {}) data = request("/review/list", params.merge(v: "2")) reviews = data["reviews"]["review"] if reviews.present? reviews.map { |review| Hashie::Mash.new(review) } else [] end end |
#user_review(user_id, book_id, params = {}) ⇒ Object
Get a user’s review for a given book
36 37 38 39 |
# File 'lib/goodreads/client/reviews.rb', line 36 def user_review(user_id, book_id, params = {}) data = request('/review/show_by_user_and_book.xml', params.merge(v: "2", user_id: user_id, book_id: book_id)) Hashie::Mash.new(data["review"]) end |