2016-02-04 2 views
0

В моем приложении я хотел бы разрешить пользователю вводить URL-адрес instagram, а затем автоматически извлекать его код для встраивания.Instagram embed code from url (Rails)

Я нашел эту ссылку: https://www.instagram.com/developer/embedding/#oembed

Когда я пытаюсь данный пример (https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN) в моем браузере Chrome, я получаю JSON с кодом я искал.

Однако, если я пытаюсь это из консоли рельсов:

Net::HTTP.get_response(URI("https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN")) 

я получаю это:

#<Net::HTTPMovedPermanently 301 MOVED PERMANENTLY readbody=true> 

Я видел, что Instagram есть новый API, но я не хочу, чтобы аутентификация пользователя из instagram.

Есть ли способ сделать это?

+0

Так он перенаправляет? Ответ должен вернуть местоположение перенаправления, что вы получаете, вы следуете за перенаправлением? –

+0

В ответе нет URL-адреса перенаправления – guyaloni

ответ

1

Использование docs

def fetch(uri_str, limit = 10) 
    # You should choose a better exception. 
    raise ArgumentError, 'too many HTTP redirects' if limit == 0 

    response = Net::HTTP.get_response(URI(uri_str)) 

    case response 
    when Net::HTTPSuccess then 
    response 
    when Net::HTTPRedirection then 
    location = response['location'] 
    warn "redirected to #{location}" 
    fetch(location, limit - 1) 
    else 
    response.value 
    end 
end 

str = "https://api.instagram.com/oembed?url=http://instagr.am/p/fA9uwTtkSN" 
response = fetch(str) 
redirected to https://api.instagram.com/publicapi/oembed/?url=http://instagr.am/p/fA9uwTtkSN 
redirected to https://www.instagram.com/publicapi/oembed/?url=http://instagr.am/p/fA9uwTtkSN 
redirected to https://api.instagram.com/oembed/?url=http://instagr.am/p/fA9uwTtkSN 
=> #<Net::HTTPOK 200 OK readbody=true> 

response.body 
=> # JSON response 

Так просто переадресацию.

+1

Похоже, что они еще не закончили реализацию api, странно, что вы перенаправляетесь на исходный URL-адрес, который в конечном итоге дает вам ответ. –

+0

Это действительно странно, но спасибо !!! – guyaloni

+0

@guyaloni да, невероятно странно. –

2

Вы можете использовать oembed gem по soulim. красивый и чистый способ получить код для вставки

В случае Instagram он идет как

включает следующую строку в геме файл

gem 'oembed' 

следующего

bundle install 

создать вспомогательный класс

class InstaApi 
    include Oembed::Client 

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

Теперь вы можете использовать

instClient = InstaApi.new 
info = instClient.fetch('http://instagr.am/p/BUG/') 

получить ваш код для вставки

embed_code = info["html"]