Reemplazando enlaces goo.gl

goo.gl se cerrará (ver Google URL Shortener links will no longer be available [updated] - Google Developers Blog). Por lo tanto, los enlaces en tu foro que incluyan enlaces goo.gl se romperán después del 25 de agosto de 2025.

Desarrollé este script para un cliente. Me tomó mucho, mucho más tiempo del que le facturé y más tiempo del que me atrevo a admitir.

Encuentra todas las publicaciones que contienen goo.gl y luego (si no son maps.app.goo.gl o maps.goo.gl) intenta reemplazarlas con la URL que devuelve goo.gl. Utiliza el revisor de publicaciones, por lo que puedes ver que se actualizó y por qué, y puedes revertirlo si lo deseas. He intentado que sea lo más seguro posible, pero úsalo bajo tu propio riesgo.

Si no sabes cómo ejecutar este script, probablemente no deberías hacerlo tú mismo. Si necesitas ayuda para que funcione y tienes presupuesto, contáctame o pregunta en Marketplace.

Si lo usas y tienes sugerencias sobre cómo mejorarlo, por favor responde y/o edítalo como consideres conveniente.

URL_CACHE ||= {}

def resolve_url_simple(short_url)
  uri = URI.parse(short_url)
  response = Net::HTTP.get_response(uri)
  if response.is_a?(Net::HTTPRedirection)
    response['location']
  else
    short_url # Devuelve el original si no hay redirección
  end
rescue
  short_url # Devuelve el original si hubo un error
end

def resolve_url(short_url)
  short_url.gsub!(/http:/,"https:")
  # Comprueba si la URL ya está en la caché
  return URL_CACHE[short_url] if URL_CACHE.key?(short_url)

  begin
    uri = URI.parse(short_url + "?si=1")
    response = Net::HTTP.get_response(uri)

    # Resuelve la URL si es una redirección
    resolved_url = if response.is_a?(Net::HTTPRedirection)
                     response['location']
                   else
                     short_url # Devuelve el original si no hay redirección
                   end
    sleep 1
    # Almacena la URL resuelta en la caché
    URL_CACHE[short_url] = resolved_url

    resolved_url
  rescue
    # Almacena la URL original en la caché en caso de error
    URL_CACHE[short_url] = short_url
    short_url
  end
end

def replace_goo_gl_links(text)
  goo_gl_regex = %r{(?<=\A|[\\[\\]\\(\\)\\s])(https?://)?goo\\.gl(/[a-zA-Z0-9]+)+}
  text.gsub(goo_gl_regex) do |match|
    if match.include?('maps.app.goo.gl')
      match
    else
      full_url = match.start_with?('http') ? match : "https://#{match}"
      print "FIXING!!: #{match} -----> "
      fixed = resolve_url(full_url)
      puts fixed
      fixed
    end
  end
end

def replace_all_goo_gl_links
  system_user= User.find(-1)
  goo_go = Post.where("raw LIKE '%goo.gl%'")
  total_posts = goo_go.count
  puts "Found #{total_posts} posts to check"
  count = 0
  goo_go.find_each do |post|
    count += 1
    # puts "Processing #{count}. #{Discourse.base_url}/t/#{post.topic_id}/#{post.post_number}"
    print "."
    # por razones poco claras, intentar actualizar publicaciones en estos temas bloqueó rails
    # next if [145478,64885,84408].include? post.topic_id
    # encuentra enlaces goo.gl y la URL para ver a qué redirige
    new_raw = replace_goo_gl_links(post.raw)
    if new_raw != post.raw
      revision_options = {
        edit_reason: "Fix goo.gl links",
        bypass_bump: true
      }
      begin
        puts "Revising (#{count}/#{total_posts}) #{Discourse.base_url}/t/#{post.topic_id}/#{post.post_number}"
        if !post.topic # las publicaciones en temas eliminados no tienen tema y rompen PostRevisor
           post.topic = Topic.with_deleted.find_by(id: post.topic_id)
           next if !post.topic
        end
        PostRevisor.new(post).revise!(system_user, raw: new_raw, **revision_options)
      rescue => e
        puts "cannot revise (number: #{count} #{Discourse.base_url}/t/#{post.topic_id}/#{post.post_number}): #{e}"
      end
      sleep 15
    end
  end
end

8 Me gusta

¿Por qué excluir esos? ¿Estos enlaces no se romperán?

Y gracias por este script. Devolví publicaciones que contienen estos enlaces acortados en mis foros, y hay muchos que deberán arreglarse entonces. :+1:

1 me gusta

Aquí está lo que Google Maps está generando hoy: https://maps.app.goo.gl/Qz14oUZQv9aHCCfg6. Decidí adivinar que esos dominios que han decidido mantener. :person_shrugging:

2 Me gusta

También veo https://goo.gl/maps y https://goo.gl/photos/ y espero que tampoco se vean afectados.

2 Me gusta

No lo sé. Si ahora funcionan sin advertencia, entonces diría que tienes razón.

Estoy bastante seguro de que el script intenta reemplazarlos.

3 Me gusta

La página enlazada en el OP dice:

Tenga en cuenta que los enlaces goo.gl generados a través de aplicaciones de Google (como compartir mapas) seguirán funcionando.

Así que, presumiblemente, sí, seguirán funcionando. Especialmente si no aparecen anuncios intersticiales.

¿Tienes alguno específico que puedas publicar? Posiblemente https://goo.gl/maps/ID se pueda reemplazar con https://maps.app.goo.gl/ID, aunque no funciona en la dirección opuesta.

En cualquier caso, ¿probablemente no hay daño en reemplazarlos?

2 Me gusta

Difícil de decir. ¿Probablemente?

Estoy tratando de no pasar otras 5 horas en este trabajo de 2 horas, pero aquí hay un par

https://goo.gl/maps/bFFQr8eL4F62

https://goo.gl/maps/BPCy1us5GkJQ2zMX8 se convierte en

https://www.google.com/maps/place/SUZUKI%E9%91%AB%E6%BD%A4%E8%BB%8A%E6%A5%AD-%E9%B4%BB%E5%AF%B6%E5%8F%B0%E5%8C%97%E6%97%97%E8%89%A6%E5%BA%97/@25.0488943,121.5803302,16.17z/data=!4m5!3m4!1s0x3442ab9666e0cf09:0x7be03675872f9c63!8m2!3d25.051748!4d121.5809526?shorturl=1

Así que probablemente sea seguro modificar

    if match.include?('maps.app.goo.gl')

a algo como

    if match.include?('maps.app.goo.gl') || match.include?('goo.gl/maps')

Y quizás también añadir la de las imágenes.

Y también acabo de enterarme de que también necesitas volver a hornear las publicaciones que hacen onebox de las URL reemplazadas.

Creo que probablemente esté en orden una tarea de rastrillo adecuada con algunas especificaciones, pero ya he invertido al menos 3 veces las horas en este trabajo de las que facturé por él.

Solo me preguntaba si estos eran equivalentes:

https://goo.gl/maps/bFFQr8eL4F62
https://maps.app.goo.gl/bFFQr8eL4F62

pero este no es el caso.

Todo indica que el primero seguirá funcionando de todos modos :+1:

3 Me gusta

Aquí tienes uno
https://goo.gl/photos/NBtTJoYjhrMqRdso9
Una prueba rápida sugiere que Google ya no crea enlaces cortos como estos, sino que utiliza subdominios.

1 me gusta

Así que probablemente no sea malo que el script los desenlace.

1 me gusta

Vi el bypass_bump: true y ejecuté esto pensando que no llenaría mi vista “Más reciente” con cientos de ediciones. Pero definitivamente está llenando la vista “Más reciente”. Estaré feliz de pagar ese precio para combatir la pérdida de enlaces, pero pensé en avisar a la próxima persona.

Resulta que “Restablecer fecha de aumento” los saca de la vista “Más reciente”.

2 Me gusta