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