Ersetzen von goo.gl-Links

goo.gl wird abgeschaltet (siehe Google URL Shortener links will no longer be available [updated] - Google Developers Blog). Links in Ihrem Forum, die goo.gl-Links enthalten, werden daher nach dem 25. August 2025 nicht mehr funktionieren.

Ich habe dieses Skript für einen Kunden entwickelt. Es hat viel, viel länger gedauert, als ich ihm in Rechnung gestellt habe, und länger, als ich zugeben möchte.

Es findet alle Beiträge, die goo.gl enthalten, und versucht dann (wenn es sich nicht um maps.app.goo.gl oder maps.goo.gl handelt), sie durch die URL zu ersetzen, die goo.gl zurückgibt. Es verwendet den Beitragsrevisor, sodass Sie sehen können, dass er aktualisiert wurde und warum, und Sie können ihn bei Bedarf rückgängig machen. Ich habe versucht, es so ausfallsicher wie möglich zu gestalten, aber die Nutzung erfolgt auf eigene Gefahr.

Wenn Sie nicht wissen, wie Sie dieses Skript ausführen, sollten Sie es wahrscheinlich nicht selbst tun. Wenn Sie Hilfe bei der Funktionsweise benötigen und ein Budget haben, kontaktieren Sie mich oder fragen Sie im Marketplace.

Wenn Sie es verwenden und Vorschläge haben, wie es verbessert werden kann, antworten Sie bitte und/oder bearbeiten Sie es nach Belieben.

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 # Original zurückgeben, wenn keine Weiterleitung
  end
rescue
  short_url # Original zurückgeben, wenn ein Fehler aufgetreten ist
end

def resolve_url(short_url)
  short_url.gsub!(/http:/,"https:")
  # Prüfen, ob die URL bereits im Cache ist
  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)

    # URL auflösen, wenn es sich um eine Weiterleitung handelt
    resolved_url = if response.is_a?(Net::HTTPRedirection)
                     response['location']
                   else
                     short_url # Original zurückgeben, wenn keine Weiterleitung
                   end
    sleep 1
    # Die aufgelöste URL im Cache speichern
    URL_CACHE[short_url] = resolved_url

    resolved_url
  rescue
    # Die Original-URL im Cache speichern, falls ein Fehler auftritt
    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 "."
    # aus unklaren Gründen stürzte das Aktualisieren von Beiträgen in diesen Themen Rails ab
    # next if [145478,64885,84408].include? post.topic_id
    # goo.gl-Links finden und die URL abrufen, zu der sie weiterleiten
    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 # Beiträge in gelöschten Themen haben kein Thema und brechen 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 „Gefällt mir“

Warum diese ausschließen? Diese Links werden nicht kaputtgehen?

Und danke für dieses Skript. Ich habe Beiträge zurückgegeben, die diese verkürzten Links in meinen Foren enthalten, und es gibt eine Menge, die dann behoben werden müssen. :+1:

1 „Gefällt mir“

Hier ist, was Google Maps heute generiert: https://maps.app.goo.gl/Qz14oUZQv9aHCCfg6. Ich habe geraten, dass diese Domains beibehalten werden. :person_shrugging:

2 „Gefällt mir“

Ich sehe auch https://goo.gl/maps und https://goo.gl/photos/ und gehe davon aus, dass diese ebenfalls nicht betroffen sein werden.

2 „Gefällt mir“

Ich weiß es nicht. Wenn sie jetzt ohne Warnung funktionieren, dann hast du wahrscheinlich recht.

Ich bin ziemlich sicher, dass das Skript versucht, diese zu ersetzen.

3 „Gefällt mir“

Die im OP verlinkte Seite besagt:

Beachten Sie, dass goo.gl-Links, die über Google Apps (wie z. B. Maps-Sharing) generiert werden, weiterhin funktionieren.

Also vermutlich ja, sie werden weiterhin funktionieren. Insbesondere, wenn keine Zwischenseiten angezeigt werden.

Haben Sie spezifische Links, die Sie posten können? Möglicherweise kann https://goo.gl/maps/ID durch https://maps.app.goo.gl/ID ersetzt werden, obwohl dies in die andere Richtung nicht funktioniert.

Unabhängig davon schadet es wahrscheinlich nicht, sie zu ersetzen?

2 „Gefällt mir“

Schwer zu sagen. Wahrscheinlich?

Ich versuche, nicht weitere 5 Stunden für diese 2-Stunden-Aufgabe aufzuwenden, aber hier sind ein paar:

https://goo.gl/maps/bFFQr8eL4F62

https://goo.gl/maps/BPCy1us5GkJQ2zMX8 wird zu

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

Daher ist es wahrscheinlich sicher, zu modifizieren

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

zu etwas wie

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

Und vielleicht auch das Bild-Ding hinzufügen.

Und ich habe gerade auch gelernt, dass man Beiträge neu backen muss, die die ersetzten URLs als Onebox darstellen.

Ich denke, eine ordnungsgemäße Rake-Aufgabe mit einigen Tests wäre wahrscheinlich angebracht, aber ich habe bereits mindestens das Dreifache der Stunden in diese Aufgabe investiert, die ich dafür abgerechnet habe.

Ich habe mich nur gefragt, ob diese äquivalent sind:

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

aber das ist nicht der Fall.

Alles deutet darauf hin, dass die erstere sowieso weiterhin funktioniert :+1:

3 „Gefällt mir“

Hier ist einer
https://goo.gl/photos/NBtTJoYjhrMqRdso9
Ein schneller Test deutet darauf hin, dass Google keine kurzen Links wie diese mehr erstellt, sondern stattdessen Subdomains verwendet.

1 „Gefällt mir“

Es ist also wahrscheinlich nicht schlecht, dass das Skript sie verkürzt.

1 „Gefällt mir“

Ich habe bypass_bump: true gesehen und dies ausgeführt, in der Annahme, dass meine „Neuesten“-Ansicht nicht mit Hunderten von Bearbeitungen gefüllt würde. Aber sie füllt definitiv die „Neuesten“-Ansicht. Ich zahle gerne diesen Preis, um Link-Fäulnis zu bekämpfen, aber ich dachte, ich gebe dem nächsten eine Vorwarnung.

Es stellt sich heraus, dass „Bump-Datum zurücksetzen“ sie wieder aus der „Neuesten“-Ansicht entfernt.

2 „Gefällt mir“