Search code examples
ruby-on-railsrubyapitumblr

Tumblr API with Ruby


I'm brand new to ruby and am currently building a rails application that needs to pull from a Tumblr blog. I have read through several questions here, online tutorials and Tumblr's API docs and after two weeks, I'm stuck.

https://www.tumblr.com/docs/en/api/v2

I make the call using Tumblr in my controller

require 'json'
require 'tumblr_client'
client = Tumblr::Client.new :consumer_key => 'consumerkey'
@post = client.posts 'crossfitinterchange.tumblr.com', :type => 'text', :limit => 1, :filter => 'html'

Then this is returned (short snippet)

{"blog"=>{"title"=>"Today's Workout", "name"=>"crossfitinterchange", "posts"=>118, "url"=>"http://crossfitinterchange.tumblr.com/", "updated"=>1444971275, "description"=>"", "is_nsfw"=>false, "ask"=>false, "ask_page_title"=>"Ask me anything", "ask_anon"=>false, "share_likes"=>true, "likes"=>0}, "posts"=>[{"blog_name"=>"crossfitinterchange", "id"=>131266609424, "post_url"=>"http://crossfitinterchange.tumblr.com/post/131266609424/friday-oct-16th-wod", "slug"=>"friday-oct-16th-wod", "type"=>"text", "date"=>"2015-10-16 04:54:35 GMT", "timestamp"=>1444971275, "state"=>"published", "format"=>"html", "reblog_key"=>"OWmgAbMO", "tags"=>[], "short_url"=>"http://tmblr.co/ZE0_uk1wG6O4G", "recommended_source"=>nil, "recommended_color"=>nil, "highlighted"=>[], "note_count"=>0, "title"=>"Friday Oct 16th WOD", "body"=>"<p>[STRENGTH]</p>\n\n<p>5 x 3 Push Press to find 3RM</p>\n\n<p>* complete 5 ring rows after each set</p>\n\n<p><br/>\n[CONDITIONING]</p>\n\n<p>7 mins EMOM:</p>\n\n<p>5 sit ups<br/>\nME Thrusters (115/80#) for duration of round</p>\n\n<p><br/>\n- REST 2 mins -</p>\n\n<p><br/>\n2 mins AMRAP Box Jump Overs (24/20&quot;)</p>\n\n<p><br/>\nScore is total Thrusters + Box Jump Overs</p>", ...

In my view I have

<% @post.each do |p| %>
<%= p.title %>
<%= p.body %>
<% end %>

I get an error that title and body are undefined. I'm getting the JSON returned via the API, now how do I grab the title and body of the post?


Solution

  • Your @post object contains JSON data. So, you don't need to loop through that i.e. no need to use .each on that object.

    To grab the title and the body from the @post JSON object, you should do:

    title = @post['blog']['title']
    body = @post['blog']['body']