oEmbed gemAlex Soulim

Введение

oEmbed - это специальный формат данных о ресурсе. Поясню на примере.

Допустим у меня есть сайт, где пользователи могут оставлять комментарии. В комментариях могут быть ссылки на фотографии из Instagram. Было бы здорово, чтобы вместо этих ссылок были сами фотографии (точнее их превью).

Самый простой способ решить задачу - использовать oEmbed. Если отправить GET-запрос по адресу http://api.instagram.com/oembed с параметром url, который содержит ссылку на страницу с фотографией, то в ответ можно получить JSON-объект с параметрами этой фотографии.

Пример запроса из документации:

curl 'http://api.instagram.com/oembed?url=http://instagr.am/p/BUG/'

В ответ получим:

{
  "provider_url":"http://instagram.com/",
  "media_id":"5382_72",
  "title":"Rays",
  "url":"http://distillery.s3.amazonaws.com/media/2010/10/02/7e4051fdcf1d45ab9bc1fba2582c0c6b_7.jpg",
  "author_name":"danrubin",
  "height":612,
  "width":612,
  "version":"1.0",
  "author_url":"http://instagram.com/",
  "author_id":72,
  "type":"photo",
  "provider_name":"Instagram"
}

Теперь у нас есть вся необходимая информация о фотографии, но при этом мы не использовали никаких API-ключей и прочего.

Нужно отметить, что oEmbed поддерживается многими сервисами: YouTube, Facebook, Flickr, Speaker Deck и тд. Больше подробностей смотрите на официальном сайте - http://oembed.com/.

oembed gem

Это библиотека, которая позволяет добавить поведение oEmbed-клиента к любому объекту.

Для примера с Instagram, который был выше, код выглядит вот так:

require 'oembed'

class Instagram
  include Oembed::Client

  def endpoint_uri
    'http://api.instagram.com/oembed'
  end
end

client = Instagram.new
client.fetch('http://instagr.am/p/BUG/')

В результате метод #fetch вернет хэш:

{
  "provider_url"=>"http://instagram.com/",
  "media_id"=>"5382_72",
  "title"=>"Rays",
  "url"=>"http://distillery.s3.amazonaws.com/media/2010/10/02/7e4051fdcf1d45ab9bc1fba2582c0c6b_6.jpg",
  "author_name"=>"danrubin",
  "height"=>306,
  "width"=>306,
  "version"=>"1.0",
  "author_url"=>"http://instagram.com/",
  "author_id"=>72,
  "type"=>"photo",
  "provider_name"=>"Instagram"
}

oembed gem не имеет зависимостей от внешних библиотек. Используется только то, что идет вместе с Ruby.

Больше подробностей и примеров можно найти на официальной странице или в репозитории на GitHub.

Комментарии
Пожалуйста авторизуйтесь, чтобы добавить комментарий. Вход