Incrustar contenido de otra web sin Iframe en Ruby on Rails

Muchas veces la mejor solución a la hora de desarrollar una parte de nuestra web pasa por integrar otra. En estos casos un IFrame es la solución más rápida. La desventaja de usar IFrames es que por restricciones de seguridad no podremos hacer cambios en la estructura del mismo, bien sea para cambiar el diseño o para cambiar parte de la funcionalidad.

Una solución elegante para casos en los que queremos traer información de otra web pasa por hacer un get desde el propio controlador y obtener en bruto la web a incrustar y tratarla antes de mostrarla en las vistas.

Por ejemplo si queremos traer la página de resultado de google para la consulta "Juegos de mesa" podríamos hacer la petición en nuestro controlador:
@http = Net::HTTP.new("www.google.es", 80)
@http.use_ssl = true
    
return = @http.get("/search?q=juegos+de+mesa").read_body
En return tenemos almacenado el grueso de la página que queremos mostrar, ahora nos queda parsearla en busca de lo que queremos.
@results = Nokogiri::HTML(return).xpath('//table').to_a.first.to_s
Ahora tenemos almacenada la parte de la página que queremos mostrar con un string que contiene el html. En la vista tendremos que mostrar la información haciendo un raw.
  <%= raw @results %>
Y si no nos queda más que meter en nuestros CSS las clases y etiquetas necesarias para que se muestre la información a nuestro gusto.

0 comentarios:

Publicar un comentario en la entrada