goo.gl ferme (voir Google URL Shortener links will no longer be available [updated] - Google Developers Blog). Les liens sur votre forum qui incluent des liens goo.gl seront donc brisés après le 25 août 2025.
J’ai développé ce script pour un client. Il m’a fallu beaucoup, beaucoup plus de temps que ce que je lui ai facturé et plus que je ne veux l’admettre.
Il trouve tous les messages qui contiennent goo.gl et ensuite (s’ils ne sont pas maps.app.goo.gl ou maps.goo.gl) tente de les remplacer par l’URL que goo.gl retourne. Il utilise le réviseur de messages, vous pouvez donc voir qu’il a été mis à jour et pourquoi, et vous pouvez l’annuler si vous le souhaitez. J’ai essayé de le rendre aussi sûr que possible, mais utilisez-le à vos propres risques.
Si vous ne savez pas comment exécuter ce script, vous ne devriez probablement pas le faire vous-même. Si vous avez besoin d’aide pour le faire fonctionner et que vous avez un budget, contactez-moi ou demandez dans Marketplace.
Si vous l’utilisez et avez des suggestions pour l’améliorer, veuillez répondre et/ou le modifier comme bon vous semble.
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 # Retourne l'original s'il n'y a pas de redirection
end
rescue
short_url # Retourne l'original en cas d'erreur
end
def resolve_url(short_url)
short_url.gsub!(/http:/,"https:")
# Vérifie si l'URL est déjà dans le 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)
# Résout l'URL s'il s'agit d'une redirection
resolved_url = if response.is_a?(Net::HTTPRedirection)
response['location']
else
short_url # Retourne l'original s'il n'y a pas de redirection
end
sleep 1
# Stocke l'URL résolue dans le cache
URL_CACHE[short_url] = resolved_url
resolved_url
rescue
# Stocke l'URL originale dans le cache en cas d'erreur
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 "."
# pour des raisons obscures, essayer de mettre à jour les messages dans ces sujets a fait planter rails
# next if [145478,64885,84408].include? post.topic_id
# trouve les liens goo.gl et l'URL pour voir à quoi elle 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 # les messages dans les sujets supprimés n'ont pas de sujet et cassent 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