Sostituzione dei link goo.gl

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

8 Mi Piace

Perché escluderli? Questi link non si interromperanno?

E grazie per questo script. Ho restituito i post che contengono questi link abbreviati sui miei forum, e ce ne sono un bel po’ che dovranno essere corretti allora. :+1:

1 Mi Piace

Ecco cosa sta generando oggi Google Maps: https://maps.app.goo.gl/Qz14oUZQv9aHCCfg6. Ho deciso di ipotizzare che quei domini abbiano deciso di mantenerli. :person_shrugging:

2 Mi Piace

Vedo anche https://goo.gl/maps e https://goo.gl/photos/ e mi aspetto che anche questi non vengano interessati.

2 Mi Piace

Non lo so. Se ora funzionano senza avviso, allora direi che hai ragione.

Sono abbastanza sicuro che lo script cerchi di sostituirli.

3 Mi Piace

La pagina collegata nell’OP dice:

Si noti che i link goo.gl generati tramite app Google (come la condivisione di Maps) continueranno a funzionare.

quindi presumibilmente, sì, continueranno a funzionare. Soprattutto se non compaiono interruzioni.

Hai link specifici che puoi pubblicare? Forse https://goo.gl/maps/ID può essere sostituito con https://maps.app.goo.gl/ID, anche se non funziona nella direzione opposta.

Indipendentemente da ciò, probabilmente non c’è danno nel sostituirli?

2 Mi Piace

Difficile da dire. Probabilmente?

Sto cercando di non passare altre 5 ore per questo lavoro di 2 ore, ma eccone un paio

https://goo.gl/maps/bFFQr8eL4F62

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

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

Quindi è probabilmente sicuro modificare

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

in qualcosa come

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

E forse aggiungere anche quello delle immagini.

E ho anche appena scoperto che devi anche rifare i post che fanno il onebox degli URL sostituiti.

Penso che un task rake appropriato con alcune specifiche sia probabilmente in ordine, ma ho già almeno 3 volte le ore in questo lavoro rispetto a quelle che ho fatturato.

Mi stavo solo chiedendo se questi fossero equivalenti:

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

ma non è così.

Tutto fa pensare che il primo continuerà comunque a funzionare :+1:

3 Mi Piace

Eccone uno
https://goo.gl/photos/NBtTJoYjhrMqRdso9
Un rapido test suggerisce che Google non crea più collegamenti brevi come questi, utilizzando invece i sottodomini.

1 Mi Piace

Quindi probabilmente non è un male che lo script li “de-accorci”.

1 Mi Piace

Ho visto bypass_bump: true e l’ho eseguito pensando che non avrebbe riempito la mia vista “Latest” con centinaia di modifiche. Ma sta decisamente riempiendo la vista “Latest”. Sono felice di pagare quel prezzo per combattere il link rot, ma ho pensato di avvisare la persona successiva.

Si scopre che “Reset bump date” li rimuove dalla vista “Latest”.

2 Mi Piace