Ruby实现的Tumblr API

3

我是Ruby的新手,目前正在构建一个需要从Tumblr博客中获取数据的Rails应用程序。我已经阅读了这里的几个问题、在线教程和Tumblr的API文档,在两周之后,我陷入了困境。

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

我在控制器中使用Tumblr进行调用

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

然后返回这个(简短的片段)
{"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>", ...

在我看来,我有

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

我收到一个错误,显示标题和正文未定义。现在我通过API获取了返回的JSON数据,如何获取帖子的标题和正文?

1个回答

3
您的@post对象包含JSON数据。因此,您不需要遍历该对象,即不需要在该对象上使用.each
要从@post JSON对象中获取titlebody,您应该执行以下操作:
title = @post['blog']['title']
body = @post['blog']['body']

谢谢您的快速回复!我输入了上面的内容,但是出现了一个 TypeError no implicit conversion of String into Integer。我需要在之前解析 JSON 吗? - Nick Seferos
我认为@post已经是JSON格式了?如果不是,那么使用.to_json方法将其转换为json对象,然后尝试上面的建议。它应该可以工作。如果不行,请告诉我! - K M Rakibul Islam
应该根据API文档进行操作。我读到的一些其他问题说它是JSONP或某种形式的JSONP。 - Nick Seferos
您可以在程序中检查对象类型:puts @post.class。如果不是,可以通过以下方式将其转换为JSON格式:@post = @post.to_json。然后使用@post['blog']['title']等语句进行操作。 - K M Rakibul Islam
当我在irb中执行puts @post.class时,响应是Hash => nil - Nick Seferos
如果它是一个哈希表,你可以通过 @post.to_json 将其转换为 JSON。如果 JSON 的格式类似于你在问题中发布的那个,那么我的答案就有效。 - K M Rakibul Islam

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接