如何在Ruby on Rails中调用API(例如Flickr API)?新手问题

时间:2010-01-21 22:56:41

标签: ruby-on-rails api

我在rails中构建我的第一个应用程序,我想调用Flickr的API

我知道我可以使用flickr-fu,rflickr或其他宝石但我想从头开始学习

比如说,我想调用flickr.photos.comments.getList来返回照片的评论。参数是api_key和photo_id。我有两个。

我会将响应作为xml

<comments photo_id="109722179">
<comment id="6065-109722179-72057594077818641" author="35468159852@N01" authorname="Rev Dan Catt" datecreate="1141841470" permalink="http://www.flickr.com/photos/straup/109722179/#comment72057594077818641">
Umm, I'm not sure, can I get back to you on that one?</comment>
</comments>`

我想通过调用该方法将收到的数据存储到变量comments中,我可以使用,例如,

来访问数据
comments.all.first.author_name = "Rev Dan Catt"

comments.all.first.content = "Umm, I'm not sure, can I get back to..."

我该怎么办?请耐心等待(对于noob问题抱歉)

2 个答案:

答案 0 :(得分:12)

include 'rubygems'
include 'httparty'

class Flickr
  include HTTParty

  base_uri 'api.flickr.com'

  def self.getPhotos(uid)
    return get('/services/rest/', :query => {
      :method => 'flickr.people.getPublicPhotos',
      :api_key => 'api key goes here',
      :user_id => uid})
  end
end

然后致电

Flickr.getPhotos('12345678')

答案 1 :(得分:1)

首先,您需要某种XML解析器来处理您获得的数据。 Nokogiri是一个使用得很多的解析器,但它可能有点过多。在那种情况下找一个更简单的。

这应该足够了。

但是如果你真的希望按照你在你的例子中的建议来表示,你需要(递归地)迭代你的XML文档并将它放在某种结构中。看一下Ruby access magic,了解如何动态构建这样的结构。另一种可能性是为所有细节组创建类(如flickr-fu所做的那样),由于数据事先已知,因此效率更高。

PS 你可以通过寻找其他解决方案来作弊,这样你仍然可以自己学习,但你不需要完全重新发明轮子。实际上结合了几个实现的想法,你可能会想出更好的东西!