2010-01-21 59 views
5

林建设我在轨第一个应用程序,我想打电话给Flickr的API如何在Ruby on Rails中调用API(例如Flickr API)?新手问题

我知道我可以使用Flickr的福,rflickr或其他宝石,但我想从头开始做我自己学习

举例来说,我想打电话flickr.photos.comments.getList,返回照片的评论。参数是api_key和photo_id。我都有。

我会得到一个响应作为XML

<comments photo_id="109722179"> 
<comment id="6065-109722179-72057594077818641" author="[email protected]" 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问题)

回答

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

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

这应该够了。

但是如果你真的想在你的例子中被表示,你需要(递归地)遍历你的XML文档并把它放在一些结构中。看看Ruby access magic,看看你如何动态构建这样的结构。另一种可能性是为所有细节组创建类(如flickr-fu所做的那样),由于数据事先已知,因此效率更高。

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