Как вызвать API (например, Flickr API) в Ruby on Rails? Вопрос новичка - PullRequest
5 голосов
/ 22 января 2010

Я собираю свое первое приложение в рельсах, и я хотел бы вызвать API Flickr

Я знаю, что могу использовать 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..."

Как я могу это сделать? Пожалуйста, наберитесь терпения (извините за вопрос нуба)

Ответы [ 2 ]

12 голосов
/ 27 января 2010
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 голос
/ 22 января 2010

Для начала вам понадобится какой-то анализатор XML для обработки полученных вами данных. Nokogiri - это очень часто используемый парсер, но он может быть слишком много. В этом случае найдите более простой.

Этого должно быть достаточно.

Но если вы действительно хотите, чтобы вас представляли так, как вы предлагаете в своем примере, вам нужно (рекурсивно) перебрать ваш XML-документ и поместить его в некоторую структуру. Взгляните на Ruby access magic , чтобы увидеть, как вы можете динамически строить такую ​​структуру. Другая возможность - создать классы для всех групп деталей (как это делает flickr-fu ), что гораздо более эффективно, поскольку данные известны заранее.

PS Вы можете немного обмануть, взглянув на другие решения, таким образом, вы все равно научитесь делать это самостоятельно, но вам не нужно заново изобретать колесо. Фактически объедините идею нескольких реализаций, и вы можете придумать что-то еще лучше!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...