Habe nun mein eigenes Python-Script fertiggestellt: Nebenan landen in Zukunft nur noch die Einträge mit nicht funktionierenden Links zu duden.de.
Diese Disk.-Seite wird in Zukunft für die Prüfung also nicht mehr benötigt.
Es wird nun ca. 1 - 2 Tage dauern, bis ich aus den noch verbleibenden ca. 35.743 Verlinkungen zu duden.de die derzeit nicht funktionierenden Links mit meinem eigenen Python-Script ermittelt habe. Diese trage ich dann direkt umseitig ein.
Gruß --Udo T. (Diskussion) 18:47, 7. Sep. 2021 (MESZ)
Eigentlich nicht so wichtig. Am häufigsten kommt natürlich 404 (NOT FOUND) vor und gelegentlich auch 403 (FORBIDDEN). Der 403 kommt meist dann vor, wenn auf eine Nebenform verlinkt wurde. Beispiel: https://www.duden.de/rechtschreibung/Scifi. Richtig ist hier dann https://www.duden.de/suchen/dudenonline/Sci-Fi.
Bei 301 (MOVED PERMANENTLY) wurden offensichtlich permanente Weiterleitungen eingerichtet, was Duden vielleicht bei allen verschobenen Einträgen hätte machen sollen (dann hätten wir diese ganze Arbeit hier nicht). Ich habe sie trotzdem gelistet, da es ja sein kann, dass diese permanenten Weiterleitungen irgendwann einmal wegfallen.
Beispiel: https://www.duden.de/rechtschreibung/Russe funktioniert zwar, aber man landet in Wirklichkeit bei https://www.duden.de/rechtschreibung/Russe_Einwohner_Russland. Daneben gibt es dann übrigens auch noch https://www.duden.de/rechtschreibung/Russe_Tier. Es ist also ratsam, auch in den Einträge der 301-er-Zeilen Ref-Duden an den tatsächlichen Link anzupassen.
Gruß --Udo T. (Diskussion) 11:37, 9. Sep. 2021 (MESZ)
Mit folgendem SQL können alle Einträge mit Links zu duden.de ermittelt werden:
select /* SLOW_OK */
distinct concat("] —> ",
concat(replace(el.el_to_domain_index, '//de.duden.www.', '//www.duden.de')),el.el_to_path)
from externallinks el,
page p
where el.el_from = p.page_id
and el.el_to_domain_index like 'https://de.duden.www.%'
and el.el_to_path like '/rechtschreibung/%'
and p.page_namespace = 0
/*and p.page_title > 'Ra'*/ /* falls mal ab einer bestimmten Stelle gesucht werden soll*/
order by p.page_title;
Das sind derzeit (26.10.2024) über 82.290 Verlinkungen!!
Wenn man einen Toolforge-Shell-Zugang hat, kann man das SQL über einen SSH-Tunnel absetzen, was relativ flott vonstatten geht, z. B. so:
ssh [email protected] "mysql -s -h dewiktionary.analytics.db.svc.eqiad.wmflabs -D dewiktionary_p" < ./sqls/duden_links.sql > ./duden_links.txt
????? ist dabei der "Kontenname der Instanz-Shell" aus den Benutzer-Einstellungen von https://wikitech.wikimedia.org.
Alternativ kann man das SQL über Quarry (siehe https://quarry.wmcloud.org/query/58779) ausführen (hier dauert es aber "etwas" länger: zuletzt ca.80 Sekunden). Das Ergebnis dann bitte als CSV herunterladen und z. B. als Datei duden_links.txt
abspeichern. Anschließend bitte die 1. Zeile mit "" löschen). Diese Datei wird dann vom u. a. python-Script zeilenweise verarbeitet (siehe unten).
Aussehen sollte die Datei duden_links.txt
dann so:
] —> https://www.duden.de/rechtschreibung/_abel
] —> https://www.duden.de/rechtschreibung/_ade
] —> https://www.duden.de/rechtschreibung/_affin
] —> https://www.duden.de/rechtschreibung/_al__ell
] —> https://www.duden.de/rechtschreibung/_algie
] —> https://www.duden.de/rechtschreibung/_and
] —> https://www.duden.de/rechtschreibung/_ant
] —> https://www.duden.de/rechtschreibung/_arm
] —> https://www.duden.de/rechtschreibung/_ase
] —> https://www.duden.de/rechtschreibung/_ation
] —> https://www.duden.de/rechtschreibung/_bar
] —> https://www.duden.de/rechtschreibung/_basiert
Das nachfolgende python-Script liest die oben erzeugte Datei duden_links.txt
zeilenweise ein und überprüft dann jeden einzelnen Link zu duden.de.
Wenn ein Link nicht funktioniert, wird die Zeile in eine Datei duden.log
protokolliert (bis jetzt hat es in solchen Fällen immer nur die Status-Codes 404 und 403 gegeben).
Es wird aber auch der Status-Code 301 (permanente Weiterleitung) protokolliert, damit diese Links (die an für sich funktionieren) zu duden.de ebenfalls an den richtigen Link angepasst werden können.
Das Script habe ich unter Ubuntu 20.04.3 LTS (python 3.8.10), Debian 11.0 (python 3.9.2) sowie Windows 10 (python 3.9.7) getestet!!
import time
from http import HTTPStatus
import requests
# bitte bei Bedarf in den 2 folgenden Parametern den kompletten Pfad ergänzen!!
linkfilename = "duden_links.txt"
logfilename = "duden.log"
HTTPnottowrite =
HTTPtowrite =
HTTPtowait = [HTTPStatus.INTERNAL_SERVER_ERROR, HTTPStatus.NOT_IMPLEMENTED, HTTPStatus.BAD_GATEWAY,
HTTPStatus.SERVICE_UNAVAILABLE, HTTPStatus.GATEWAY_TIMEOUT]
def write_log(text):
log = open(logfilename, "a")
log.write(text)
log.close()
def main(*args):
datei = open(linkfilename, "r")
for zeile in datei:
worte = zeile.split(" ")
x = 0
r = requests.head(worte.strip("\n"))
# hier wird, insbesonderer bei HTTPStatus.BAD_GATEWAY (502), zunächst alle 60 Sekunden versucht,
# den HTTP-Request erneut abzusetzen. Bei duden.de gibt es nämlich mitunter nur kurze Aussetzer
while r.status_code in HTTPtowait:
x = x + 1
time.sleep(60)
r = requests.head(worte.strip("\n"))
if x > 30:
# Wenn es aber länger wie 30 Minuten dauert, dann macht duden.de meist eine größere Wartung
# Deshalb abspeichern der Zeile mit dem 502, damit man dort dann später weitermachen kann
# und Abbruch. In der Datei "duden_links.txt" sollten dann natürlich vor dem nächsten Lauf
# alle bis dahin überprüften Zeile gelöscht werden
zeile = "# " + str(r.status_code) + " — " + zeile
write_log(zeile)
write_log("BREAK!!!")
datei.close()
quit()
# wenn OK (= 200) o. MOVED_PERMANENTLY (= 301) dann ist alles gut
if r.status_code not in HTTPnottowrite:
# ansonsten, wenn 404 o. 403, dann in "duden.log" speichern
if r.status_code in HTTPtowrite:
zeile = "# " + str(r.status_code) + " — " + zeile
write_log(zeile)
else:
# bei einem (noch) unbekannten HTTP-Status wird erst mal abgebrochen, damit man das Script
# entsprechend anpassen kann!!! Die Zeile mit dem noch unbekannten Code wird protokolliert
zeile = "# " + str(r.status_code) + " — " + zeile
write_log(zeile)
write_log("QUIT !!!")
datei.close()
quit()
time.sleep(3)
datei.close()
write_log("FERTIG !!!")
if __name__ == "__main__":
main()
Im Idealfall, wenn es also keinerlei Unterbrechungen gibt, hat das Script innerhalb von ca. 2,5 – 3 Tagen alle derzeit knapp über 72.500 Links zu duden.de geprüft!
Den Inhalt der Datei duden.log
sollte man dann am Ende 1:1 in Benutzer:UT-Bot/Duden-Link-Check unterhalb von "noch zu erledigen" eintragen, sodass sich mehrere Benutzer am Korrigieren beteiligen können.
Mit Hilfe dieser Doku kann jeder mit etwas Bot-Erfahrung die Links zu duden.de überprüfen (falls ich z. B. irgendwann mal nicht mehr hier sein sollte, was hoffentlich noch lange dauern wird ;o)
Bisher hat das Skript fehlerfrei funktioniert. Falls jemand doch einen Fehler entdeckt, dann bitte ich um entsprechende Mitteilung.
(wird dann zu gegebener Zeit evtl noch erweitert bzw. angepasst) --Udo T. (Diskussion) 21:24, 21. Sep. 2021 (MESZ)
Ich habe sie heute im Rahmen der Bearbeitung von herzlichst bei sehnlichst kennengelernt und gleich auch bei heranwachsend angewendet. Meine Frage an Udo und alle Mitleser: Ist sie in diesen Fällen, wo der Online-Duden ein Wort verwendet, aber selbst nicht in einem eigenen Eintrag führt, sinnvoll? Gruß, Peter, 09:50, 22. Jan. 2022 (MEZ)
Hast Du einen neuen Suchlauf gestartet? Wenn ja, bin ich gespannt, wie oft ich einen weiteren toten Duden-Link bei den Korrekturen übersehen habe und wie viele neue Verschiebungen vorgenommen wurden. Gruß, Peter, 14:11, 19. Feb. 2022 (MEZ)
Bei manchen Substantiven funktioniert der Link zu Zeno mit der Vorlage:Ref-Meyers scheints wegen dort verwendeter Längen- oder Betonungszeichen nicht, obwohl das Lemma großgeschrieben wird. Dem kann durch Angabe des Parameters „nid“ abgeholfen werden (Spezial:Diff/9958995). Kann der Bot analog zum Duden feststellen, auf welche Einträge dies zutrifft? Gruß, Peter, 11:23, 10. Feb. 2024 (MEZ)