sosedoff / goodreads

Goodreads API wrapper

Home Page:https://www.goodreads.com/api

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Getting "Undefined method `body' for nil:NilClass" error when trying to access shelf

ajwaxman opened this issue · comments

When trying to access a specific shelf I'm getting the following error:

Undefined method `body' for nil:NilClass

I just started getting it about a week ago. Below is the code I'm running that is leading to this:

client = Goodreads::Client.new(api_key: API_KEY, api_secret: API_SECRET)

books = client.shelf(GOODREADS_USER_ID, "read", sort: "date_read").books

My application is running on ruby 2.3.3 and rails 3.2.13. Any advice or ideas for how to debug this would be greatly appreciated! I'm a bit of a n00b when it comes to opening issues for open source projects so please let me know if there is anything I missed, if it'd be helpful to format differently, or if this is not an appropriate issue.

Thanks!

Hi, this issue should be easy to troubleshoot, just send your stack trace (its a bunch of lines following the original exception). The stack trace should show which line in the library caused the exception. Im suspecting you're trying to access shelves of the user that does not exist, or something like that.

Thanks for the quick response! Here's the stack trace:

goodreads (0.4.3) lib/goodreads/request.rb:64:in `parse'
goodreads (0.4.3) lib/goodreads/request.rb:40:in `request'
goodreads (0.4.3) lib/goodreads/client/shelves.rb:7:in `shelf'
app/helpers/homepage_helper.rb:12:in `books'
app/controllers/homepage_controller.rb:6:in `home'
actionpack (3.2.13) lib/action_controller/metal/implicit_render.rb:4:in `send_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:167:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rendering.rb:10:in `process_action'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:18:in `block in process_action'
activesupport (3.2.13) lib/active_support/callbacks.rb:414:in `_run__4358485572692838194__process_action__3640185479427384159__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_process_action_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/abstract_controller/callbacks.rb:17:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/rescue.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:30:in `block in process_action'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `block in instrument'
activesupport (3.2.13) lib/active_support/notifications/instrumenter.rb:20:in `instrument'
activesupport (3.2.13) lib/active_support/notifications.rb:123:in `instrument'
actionpack (3.2.13) lib/action_controller/metal/instrumentation.rb:29:in `process_action'
actionpack (3.2.13) lib/action_controller/metal/params_wrapper.rb:207:in `process_action'
activerecord (3.2.13) lib/active_record/railties/controller_runtime.rb:18:in `process_action'
actionpack (3.2.13) lib/abstract_controller/base.rb:121:in `process'
actionpack (3.2.13) lib/abstract_controller/rendering.rb:45:in `process'
actionpack (3.2.13) lib/action_controller/metal.rb:203:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal/rack_delegation.rb:14:in `dispatch'
actionpack (3.2.13) lib/action_controller/metal.rb:246:in `block in action'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:73:in `dispatch'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:36:in `call'
journey (1.0.4) lib/journey/router.rb:68:in `block in call'
journey (1.0.4) lib/journey/router.rb:56:in `each'
journey (1.0.4) lib/journey/router.rb:56:in `call'
actionpack (3.2.13) lib/action_dispatch/routing/route_set.rb:612:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/best_standards_support.rb:17:in `call'
rack (1.4.7) lib/rack/etag.rb:23:in `call'
rack (1.4.7) lib/rack/conditionalget.rb:25:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/head.rb:14:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/params_parser.rb:21:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/flash.rb:242:in `call'
rack (1.4.7) lib/rack/session/abstract/id.rb:210:in `context'
rack (1.4.7) lib/rack/session/abstract/id.rb:205:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/cookies.rb:341:in `call'
activerecord (3.2.13) lib/active_record/query_cache.rb:64:in `call'
activerecord (3.2.13) lib/active_record/connection_adapters/abstract/connection_pool.rb:479:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:28:in `block in call'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `_run__908964886975876029__call__2871913556804834982__callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:405:in `__run_callback'
activesupport (3.2.13) lib/active_support/callbacks.rb:385:in `_run_call_callbacks'
activesupport (3.2.13) lib/active_support/callbacks.rb:81:in `run_callbacks'
actionpack (3.2.13) lib/action_dispatch/middleware/callbacks.rb:27:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/reloader.rb:65:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/remote_ip.rb:31:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/debug_exceptions.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/show_exceptions.rb:56:in `call'
railties (3.2.13) lib/rails/rack/logger.rb:32:in `call_app'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `block in call'
activesupport (3.2.13) lib/active_support/tagged_logging.rb:22:in `tagged'
railties (3.2.13) lib/rails/rack/logger.rb:16:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/request_id.rb:22:in `call'
rack (1.4.7) lib/rack/methodoverride.rb:21:in `call'
rack (1.4.7) lib/rack/runtime.rb:17:in `call'
activesupport (3.2.13) lib/active_support/cache/strategy/local_cache.rb:72:in `call'
rack (1.4.7) lib/rack/lock.rb:15:in `call'
actionpack (3.2.13) lib/action_dispatch/middleware/static.rb:63:in `call'
railties (3.2.13) lib/rails/engine.rb:479:in `call'
railties (3.2.13) lib/rails/application.rb:223:in `call'
rack (1.4.7) lib/rack/content_length.rb:14:in `call'
railties (3.2.13) lib/rails/rack/log_tailer.rb:17:in `call'
rack (1.4.7) lib/rack/handler/webrick.rb:59:in `service'
/Users/awaxman/.rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/webrick/httpserver.rb:140:in `service'
/Users/awaxman/.rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/webrick/httpserver.rb:96:in `run'
/Users/awaxman/.rvm/rubies/ruby-2.3.3/lib/ruby/2.3.0/webrick/server.rb:296:in `block in start_thread'

Hm, i'm not sure why the request fails. Does any other request fail in the same way?
You can try to test the URL manually, make one like this:

https://www.goodreads.com/review/list/USER_ID_HERE.xml?key=YOUR_API_KEY&v=2

And see if it returns the data. I haven't used this library for a long time so i cant be sure what's causing the issue.

The client object is returned, but when I try to call a method on it it fails

The endpoint seems to work alright when I manually make a request using the URL you provided above 🤔

I ran the code in your example with a random user ID and it works fine. Maybe it has something to do with the actual user. Can you give me an ID so i can reproduce the error?

Sure thing, I'm trying to use it with my user ID, which is 30897710 - thanks for all the help, really appreciate it!

I see that you're using older gem version (0.4.x), try to update to 0.5.0. I ran the code with your user ID and it works on both MRI 2.3.5 and 2.4.x.

Sounds good 👌 . Will try updating the gem when I get home later this evening and let you know if that fixes it!

Updating to 0.5.0 fixed it, thanks!

Also, in case you're curious I'm using it to power a reading list on my personal website :) http://awaxman.com/