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