goo.gl sta chiudendo (vedi Google URL Shortener links will no longer be available [updated] - Google Developers Blog). Pertanto, i link sul tuo forum che includono link goo.gl saranno interrotti dopo il 25 agosto 2025.
Ho sviluppato questo script per un cliente. Ci è voluto molto, molto più tempo di quanto gli ho fatturato e più di quanto voglio ammettere.
Trova tutti i post che contengono goo.gl e poi (se non sono maps.app.goo.gl o maps.goo.gl) tenta di sostituirli con l’URL restituito da goo.gl. Utilizza il revisore di post, quindi puoi vedere che è stato aggiornato e perché e puoi annullarlo se lo desideri. Ho cercato di renderlo il più sicuro possibile, ma usalo a tuo rischio.
Se non sai come eseguire questo script, probabilmente non dovresti farlo da solo. Se hai bisogno di aiuto per farlo funzionare e hai un budget, contattami o chiedi in Marketplace.
Se lo usi e hai suggerimenti su come migliorarlo, rispondi e/o modificalo come ritieni opportuno.
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 # Restituisce l'originale se non c'è reindirizzamento
end
rescue
short_url # Restituisce l'originale in caso di errore
end
def resolve_url(short_url)
short_url.gsub!(/http:/,"https:")
# Controlla se l'URL è già nella cache
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)
# Risolve l'URL se è un reindirizzamento
resolved_url = if response.is_a?(Net::HTTPRedirection)
response['location']
else
short_url # Restituisce l'originale se non c'è reindirizzamento
end
sleep 1
# Memorizza l'URL risolto nella cache
URL_CACHE[short_url] = resolved_url
resolved_url
rescue
# Memorizza l'URL originale nella cache in caso di errore
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 "."
# per ragioni non chiare, tentare di aggiornare i post in questi topic ha bloccato rails
# next if [145478,64885,84408].include? post.topic_id
# trova i link goo.gl e l'URL per vedere a cosa reindirizza
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 # i post nei topic eliminati non hanno un topic e rompono 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