Remplacer les liens goo.gl

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

8 « J'aime »

Pourquoi exclure ceux-là ? Ces liens ne vont pas casser ?

Et merci pour ce script. J’ai retourné des posts qui contiennent ces liens raccourcis sur mes forums, et il y en a un tas qui devront être corrigés alors. :+1:

1 « J'aime »

Voici ce que Google Maps génère aujourd’hui : https://maps.app.goo.gl/Qz14oUZQv9aHCCfg6. J’ai décidé de deviner que ces domaines-là ont été conservés. :person_shrugging:

2 « J'aime »

Je vois également https://goo.gl/maps et https://goo.gl/photos/ et je m’attends à ce que ceux-ci ne soient pas affectés non plus.

2 « J'aime »

Je ne sais pas. S’ils fonctionnent maintenant sans avertissement, alors je dirais que vous avez raison.

Je suis à peu près sûr que le script essaie de les remplacer.

3 « J'aime »

La page liée dans le message initial indique :

Notez que les liens goo.gl générés via les applications Google (comme le partage de Maps) continueront de fonctionner.

donc vraisemblablement, oui, ils continueront de fonctionner. Surtout s’il n’y a pas d’interstitiels.

Avez-vous des liens spécifiques que vous pouvez poster ? Il est possible que https://goo.gl/maps/ID puisse être remplacé par https://maps.app.goo.gl/ID, bien que cela ne fonctionne pas dans l’autre sens.

Quoi qu’il en soit, il n’y a probablement aucun mal à les remplacer ?

2 « J'aime »

Difficile à dire. Probablement ?

J’essaie de ne pas passer 5 heures supplémentaires sur ce travail de 2 heures, mais en voici quelques-uns

https://goo.gl/maps/bFFQr8eL4F62

https://goo.gl/maps/BPCy1us5GkJQ2zMX8 devient

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

Il est donc probablement sûr de modifier

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

en quelque chose comme

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

Et peut-être aussi ajouter celui des images.

Et j’ai aussi appris que vous devez également ré-enregistrer les posts qui font un onebox des URL remplacées.

Je pense qu’une tâche rake appropriée avec quelques tests serait probablement nécessaire, mais j’ai déjà passé au moins 3 fois le nombre d’heures sur ce travail que je lui ai facturé.

Je me demandais juste si ceux-ci étaient équivalents :

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

mais ce n’est pas le cas.

Tout porte à croire que le premier continuera de fonctionner de toute façon :+1:

3 « J'aime »

En voici un :
https://goo.gl/photos/NBtTJoYjhrMqRdso9
Un test rapide suggère que Google ne crée plus de liens courts comme ceux-ci, utilisant plutôt les sous-domaines.

1 « J'aime »

Il n’est donc probablement pas mal que le script les raccourcisse.

1 « J'aime »

J’ai vu bypass_bump: true et j’ai exécuté cela en pensant que cela ne remplirait pas ma vue « Dernières » avec des centaines de modifications. Mais cela remplit définitivement la vue « Dernières ». Je suis prêt à payer ce prix pour lutter contre la dégradation des liens, mais j’ai pensé informer la personne suivante.

Il s’avère que « Réinitialiser la date de publication » les retire de la vue « Dernières ».

2 « J'aime »