2010-01-21 9 views
5

edificio Im mi primera aplicación en los carriles y me gustaría llamar a la API de Flickr¿Cómo puedo llamar a una API (por ejemplo, la API de Flickr) en Ruby on Rails? pregunta novato

Sé que puedo utilizar flickr-fu, rflickr u otro tesoro, pero quiero hacerlo yo mismo desde cero para aprender

Digamos, por ejemplo, que quiero llamar al flickr.photos.comments.getList que devuelve los comentarios de una foto. Los argumentos son api_key y photo_id. Tengo ambos.

voy a tener la respuesta como un 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>` 

Quiero guardar los datos recibidos llamando a ese método en una variable comments que pueda acceder a los datos, utilizando, por ejemplo,

comments.all.first.author_name = "Rev Dan Catt" 

o

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

¿Cómo puede ¿Hago esto? Sea paciente (lo siento por la pregunta del novato)

Respuesta

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 

y luego llamar

Flickr.getPhotos('12345678') 
1

Primero necesita algún tipo de analizador XML para manejar los datos que obtuvo. Nokogiri es un analizador muy usado, pero podría ser demasiado. En ese caso, encuentre uno más simple.

Esto debería ser suficiente.

Pero si realmente desea que se represente como sugeriría en su ejemplo, necesita iterar (recursivamente) a través de su documento XML y ponerlo en alguna estructura. Eche un vistazo al Ruby access magic para ver cómo puede construir dinámicamente dicha estructura. Otra posibilidad es crear clases para todos los grupos de detalles (como flickr-fu), que es mucho más eficiente ya que los datos se conocen de antemano.

PS Puede hacer trampa un poco mirando a otras soluciones, de esta manera usted todavía aprenderá a hacerlo usted mismo, pero no necesita reinventar la rueda por completo. ¡De hecho, combina la idea de varias implementaciones y podrías encontrar algo aún mejor!

Cuestiones relacionadas