Substituindo links goo.gl

goo.gl está sendo desativado (veja Google URL Shortener links will no longer be available [updated] - Google Developers Blog). Portanto, os links em seu fórum que incluem links goo.gl quebrarão após 25 de agosto de 2025.

Desenvolvi este script para um cliente. Levou muito, muito mais tempo do que eu cobrei dele e mais tempo do que gostaria de admitir.

Ele encontra todas as postagens que contêm goo.gl e, em seguida, (se não forem maps.app.goo.gl ou maps.goo.gl) tenta substituí-las pelo URL que goo.gl retorna. Ele usa o revisor de postagens, para que você possa ver que foi atualizado e por quê, e você pode revertê-lo se quiser. Tentei torná-lo o mais à prova de falhas possível, mas use por sua conta e risco.

Se você não sabe como executar este script, provavelmente não deveria fazê-lo sozinho. Se precisar de ajuda para fazê-lo funcionar e tiver um orçamento, entre em contato comigo ou pergunte em Marketplace.

Se você o usar e tiver sugestões de como melhorá-lo, por favor, responda e/ou edite-o como achar melhor.

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 # Retorna o original se não houver redirecionamento
  end
rescue
  short_url # Retorna o original se houve um erro
end

def resolve_url(short_url)
  short_url.gsub!(/http:/,"https:")
  # Verifica se o URL já está no 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)

    # Resolve o URL se for um redirecionamento
    resolved_url = if response.is_a?(Net::HTTPRedirection)
                     response['location']
                   else
                     short_url # Retorna o original se não houver redirecionamento
                   end
    sleep 1
    # Armazena o URL resolvido no cache
    URL_CACHE[short_url] = resolved_url

    resolved_url
  rescue
    # Armazena o URL original no cache em caso de erro
    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 razões não claras, tentar atualizar postagens nesses tópicos travou o rails
    # next if [145478,64885,84408].include? post.topic_id
    # encontra links goo.gl e o URL para ver para onde ele redireciona
    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 # postagens em tópicos excluídos não têm tópico e quebram o 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 curtidas

Por que excluir esses? Esses links não quebrarão?

E obrigado por este script. Eu retornei postagens que contêm esses links encurtados nos meus fóruns, e há um monte que precisará ser corrigido então. :+1:

1 curtida

Aqui está o que o Google Maps está gerando hoje: https://maps.app.goo.gl/Qz14oUZQv9aHCCfg6. Decidi adivinhar que esses domínios eles decidiram manter. :person_shrugging:

2 curtidas

Também estou vendo https://goo.gl/maps e https://goo.gl/photos/ e espero que eles também não sejam afetados.

2 curtidas

Eu não sei. Se eles funcionarem agora sem aviso, então eu diria que você está certo.

Tenho quase certeza de que o script tenta substituí-los.

3 curtidas

A página vinculada no OP diz:

Observe que os links goo.gl gerados por meio de aplicativos do Google (como o compartilhamento do Maps) continuarão funcionando.

então, presumivelmente, sim, eles continuarão funcionando. Especialmente se nenhum aviso aparecer.

Você tem algum específico que possa postar? Possivelmente https://goo.gl/maps/ID pode ser substituído por https://maps.app.goo.gl/ID, embora não funcione na direção oposta.

Independentemente disso, provavelmente não há problema em substituí-los?

2 curtidas

Difícil dizer. Provavelmente?

Estou tentando não gastar mais 5 horas neste trabalho de 2 horas, mas aqui estão alguns

https://goo.gl/maps/bFFQr8eL4F62

https://goo.gl/maps/BPCy1us5GkJQ2zMX8 se torna

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

Portanto, provavelmente é seguro modificar

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

para algo como

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

E talvez também adicionar a imagem.

E eu também acabei de aprender que você também precisa refazer posts que usam as URLs substituídas.

Acho que uma tarefa rake adequada com algumas especificações seria provavelmente necessária, mas eu já gastei pelo menos 3 vezes as horas neste trabalho que cobrei por ele.

Eu estava apenas imaginando se estes eram equivalentes:

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

mas este não é o caso.

Todos os sinais apontam para que o primeiro continue funcionando de qualquer maneira :+1:

3 curtidas

Aqui está um
https://goo.gl/photos/NBtTJoYjhrMqRdso9
Um teste rápido sugere que o Google não cria mais links curtos como estes, usando subdomínios em vez disso.

1 curtida

Portanto, provavelmente não é ruim que o script os desfaça.

1 curtida

Eu vi o bypass_bump: true e executei isso pensando que não preencheria minha visualização “Mais recentes” com centenas de edições. Mas definitivamente está preenchendo a visualização “Mais recentes”. Ficarei feliz em pagar esse preço para combater a “link rot” (links quebrados), mas pensei em avisar a próxima pessoa.

Descobri que “Redefinir data de bump” os remove da visualização “Mais recentes”.

2 curtidas