¿Cómo tomo esta URL http://t.co/yjgxz5Y y obtengo la URL de destino que es http://nickstraffictricks.com/4856_how-to-rank-1-in-google/¿Cómo obtengo la URL de destino de una URL acortada usando Ruby?
Respuesta
Tendría que seguir la redirección. Creo que ayudaría:
http://shadow-file.blogspot.com/2009/03/handling-http-redirection-in-ruby.html
No es técnicamente correcto. No es necesario que "siga" el redireccionamiento, solo necesita leer el encabezado de la ubicación que se envió para causar el redireccionamiento, como en la respuesta de Mladen Jablanović. – jemminger
tiene razón, no dije eso correctamente :) – Spyros
Es posible redirigir una redirección. A menos que el código subyacente maneje eso automáticamente, que no usará Net :: HTTP, los redireccionamientos deben seguirse también hasta que decida que las redirecciones son demasiado profundas, o finalmente se resuelven en la URL final. La página particular vinculada a es más intrincada que el ejemplo en Net :: HTTP's docs. –
require 'net/http'
require 'uri'
Net::HTTP.get_response(URI.parse('http://t.co/yjgxz5Y'))['location']
# => "http://nickstraffictricks.com/4856_how-to-rank-1-in-google/"
De acuerdo con los documentos, Net :: HTTP no realiza redireccionamientos recursivos, lo cual es necesario si se redirecciona un redireccionamiento. Parece que solo manejaría el primero. –
Es cierto. Necesitarías un lazo alrededor de eso. Pero de todos modos, así es como seguirías una redirección en Ruby, y creo que eso responde la pregunta. –
He usado open-uri
para esto, porque es agradable y sencilla. Se recuperará la página, pero también seguirá múltiples redirecciones:
require 'open-uri'
final_uri = ''
open('http://t.co/yjgxz5Y') do |h|
final_uri = h.base_uri
end
final_uri # => #<URI::HTTP:0x00000100851050 URL:http://nickstraffictricks.com/4856_how-to-rank-1-in-google/>
Los documentos muestran un buen ejemplo para usar el menor nivel Net::HTTP para manejar las redirecciones.
require 'net/http'
require 'uri'
def fetch(uri_str, limit = 10)
# You should choose better exception.
raise ArgumentError, 'HTTP redirect too deep' if limit == 0
response = Net::HTTP.get_response(URI.parse(uri_str))
case response
when Net::HTTPSuccess then response
when Net::HTTPRedirection then fetch(response['location'], limit - 1)
else
response.error!
end
end
puts fetch('http://www.ruby-lang.org')
Por supuesto, todo esto se rompe si la página no utiliza una redirección HTTP. Muchos sitios usan meta-redirects, que debe manejar recuperando la URL de la metaetiqueta, pero esa es una pregunta diferente.
Gracias! muy útil ... haciendo h.base_uri.to_s renderizará url de destino. – KG2289
Creo que puede omitir el uso de bloque y simplemente llame a 'open (url) .base_uri' – lulalala
La versión' Net :: HTTP' debe ser la respuesta aceptada, ya que maneja SSL así como redirecciones recursivas (la mayoría de los ejemplos parecen solo manejar uno u otro). ¡Bien hecho! –
Para resolver redirecciones, debe usar una solicitud HEAD
para evitar descargar todo el cuerpo de la respuesta (imagine resolver una URL a un archivo de audio o video).
Ejemplo de trabajo utilizando la gema de Faraday:
require 'faraday'
require 'faraday_middleware'
def resolve_redirects(url)
response = fetch_response(url, method: :head)
if response
return response.to_hash[:url].to_s
else
return nil
end
end
def fetch_response(url, method: :get)
conn = Faraday.new do |b|
b.use FaradayMiddleware::FollowRedirects;
b.adapter :net_http
end
return conn.send method, url
rescue Faraday::Error, Faraday::Error::ConnectionFailed => e
return nil
end
puts resolve_redirects("http://cre.fm/feed/m4a") # http://feeds.feedburner.com/cre-podcast
- 1. Detectar el destino de la url acortada o "minúscula"
- 2. ¿Cómo obtengo la URL de una solicitud?
- 3. ¿Cómo puedo obtener la URL de destino usando cURL?
- 4. ¿Cómo obtengo la etiqueta URL al analizar URL de solicitud?
- 5. cómo obtengo el título de una URL
- 6. ¿Cómo obtengo la URL actual de mi script usando PHP?
- 7. cómo recuperar url base de la url dada usando java
- 8. Seguridad de primavera: cómo obtener la URL de destino inicial
- 9. ¿Cómo obtengo la identificación de video de la URL? (Vimeo)
- 10. Eliminar URL del texto usando ruby
- 11. ¿Cómo obtener una URL larga desde una URL corta?
- 12. ¿Cómo obtengo la identificación del video de la URL? (DailyMotion)
- 13. ¿Cómo puedo eliminar una URL?
- 14. Consigue redirigir de una URL en Ruby
- 15. ¿Cómo obtengo la Url actual desde dentro de un FilterAttribute?
- 16. url escapando en ruby
- 17. ¿Cómo saber si una URL es una url de intranet?
- 18. ¿Cómo codifico una URL?
- 19. ¿Cómo extraer los parámetros de URL de una URL con Ruby o Rails?
- 20. ¿Cómo obtener una img url usando jQuery?
- 21. ¿Cómo puedo acortar una URL usando Python?
- 22. ¿Cómo obtengo la url actual sin params en Yii?
- 23. Comprobar si existe una URL en Ruby
- 24. Obteniendo la URL actual usando Jquery
- 25. URL completa de destino/actual en el marco de juego?
- 26. Cómo conectarse a postgresql usando la url
- 27. Cómo cambiar la url usando django process_request.
- 28. ¿Cómo extraes una URL de una cadena usando Python?
- 29. En drupal, ¿cómo obtengo la URL de una imagen en la carpeta de mi módulo?
- 30. Obtener URL de la página usando javascript
tratar esta joya [final_redirect_url] (https://github.com/indyarocks/final_redirect_url). – Indyarocks
gem final_redirect_url es exactamente lo que quieres -> la URL real, sin problemas, sin complicaciones. +1 –