Kennt ihr auch das Klexikon für Lese-Anfänger? Auf MiniKlexikon.de findet ihr mehr als 900 Artikel von A wie Aal bis Z wie Zoo.
Skripte: Unterschied zwischen den Versionen
Aus Klexikon - Das Freie Kinderlexikon
(Rundung der Einwohnerzahl verbessert, +Kleinigkeiten) |
(+Wartungskategorien in den Länderartikeln, +Kleinigkeiten) |
||
| Zeile 47: | Zeile 47: | ||
# Öffne Vorlagen-Seite oder lege sie neu an | # Öffne Vorlagen-Seite oder lege sie neu an | ||
page = pywikibot.Page(site, f'Vorlage:Infobox_{title}') | page = pywikibot.Page(site, f'Vorlage:Infobox_{title}') | ||
| − | code = mwparserfromhell.parse(page.text if | + | code = mwparserfromhell.parse(page.text) |
| + | |||
| + | # Ersetze Seiteninhalt mit {{Infobox Land}}, falls nicht vorhanden | ||
| + | if not code.filter_templates(matches = lambda n: n.name.matches ('Infobox Land')): | ||
| + | code = mwparserfromhell.parse('{{Infobox Land\n}}') | ||
# Fülle alle Vorlagen-Felder | # Fülle alle Vorlagen-Felder | ||
| Zeile 77: | Zeile 81: | ||
f' {prop} ', f' {val}\n', preserve_spacing = False) | f' {prop} ', f' {val}\n', preserve_spacing = False) | ||
| − | # Speichere die | + | # Speichere die Änderungen, falls vorhanden, und verschiebe |
| − | page.text = str(code) | + | # Artikel ggf. zurück in Kategorie "ungeprüfte Infobox" |
| − | + | if page.text != str(code): | |
| − | + | # Speichere Vorlage | |
| − | + | page.text = str(code) | |
| − | + | page.save('Automatische Anlage der Länder-Infobox (dritter Testlauf mit 5 Ländern)') | |
| + | |||
| + | # Öffne Länderartikel | ||
| + | page = pywikibot.Page(site, title) | ||
| + | code = mwparserfromhell.parse(page.text) | ||
| + | |||
| + | # Binde Länder-Infobox ein, falls noch nicht geschehen | ||
| + | if not code.filter_templates(matches = lambda n: n.name.matches (f'Infobox_{title}')): | ||
| + | code = mwparserfromhell.parse(f'{{{{Infobox_{title}}}}}\n{str(code)}') | ||
| + | |||
| + | # Lösche [[Kategorie:Artikel mit geprüfter Infobox]], falls vorhanden | ||
| + | if '[[Kategorie:Artikel mit geprüfter Infobox]]' in str(code): | ||
| + | code.remove ('[[Kategorie:Artikel mit geprüfter Infobox]]') | ||
| + | |||
| + | # Füge [[Kategorie:Artikel mit ungeprüfter Infobox]] ein, falls noch nicht geschehen | ||
| + | if '[[Kategorie:Artikel mit ungeprüfter Infobox]]' not in str(code): | ||
| + | code.append ('\n[[Kategorie:Artikel mit ungeprüfter Infobox]]') | ||
| − | + | # Speichere Länderartikel | |
| − | + | page.text = str(code) | |
| − | page.text = | + | page.save('Automatische Einbindung der Länder-Infobox (dritter Testlauf mit 5 Ländern)') |
| − | page.save('Automatische Einbindung der Länder-Infobox ( | + | |
</syntaxhighlight> | </syntaxhighlight> | ||
Version vom 6. April 2019, 14:41 Uhr
Skript zur Aktualisierung der Länder-Infoboxen
import requests import pywikibot import mwparserfromhell import locale # Verwende deutsches Zahlenformat mit Tausenderpunkt und Dezimalkomma locale.setlocale(locale.LC_NUMERIC, 'german') # Zuordnung von Wikidata-Abfrage-Feldern zu Vorlage-Parametern fieldmap = { 'Name': 'itemLabel', 'Flagge': 'safeFlaggenDatei', 'Hauptstadt': 'hauptstaedte', 'Amtssprache': 'amtssprachen', 'Staatsoberhaupt': 'oberhaeupter', 'Einwohnerzahl': 'max_ew_in_mio', 'Fläche': 'max_flaeche_rund', 'Lagekarte': 'safeKartenDatei', 'Lagebeschreibung': 'itemLabel' } # Legt fest, welche Länder-Artikel bzw. Vorlagen-Parameter Klexibot nicht ändern soll blacklist = { 'Eidgenossenschaft', 'Deutsches Kaiserreich' } # Anmeldung beim Klexikon site = pywikibot.Site() # Lade Wikidata-Tabelle und speichere sie in "data"-Variable url = 'https://query.wikidata.org/sparql' with open('infobox_data_query.rq', 'r') as query_file: qry = query_file.read() r = requests.get(url, params = {'format': 'json', 'query': qry }, headers = { 'User-Agent':f'{requests.utils.default_headers()["User-Agent"]} (Klexikon bot by User:Tkarcher)'}) data = r.json() # Gehe Wikidata-Tabelle Zeile für Zeile durch for item in data['results']['bindings']: title = item['titel_im_klexikon']['value'] # Ignoriere Artikel, die in der Ausschlußliste enthalten sind if title not in blacklist: # Öffne Vorlagen-Seite oder lege sie neu an page = pywikibot.Page(site, f'Vorlage:Infobox_{title}') code = mwparserfromhell.parse(page.text) # Ersetze Seiteninhalt mit {{Infobox Land}}, falls nicht vorhanden if not code.filter_templates(matches = lambda n: n.name.matches ('Infobox Land')): code = mwparserfromhell.parse('{{Infobox Land\n}}') # Fülle alle Vorlagen-Felder for prop, field in fieldmap.items(): # Ignoriere Vorlagen-Parameter, die leer oder in der Ausschlußliste enthalten sind if field in item and f'{title}:{prop}' not in blacklist: if prop == 'Einwohnerzahl': ew = float(item[field]['value']) if ew > 1: val = f'etwa {locale.format_string("%.0f", ew, grouping = True)} Millionen' else: val = f'etwa {locale.format_string("%.0f", ew * 1000000, grouping = True)}' elif prop == 'Fläche': val = locale.format_string('%i', int(item[field]['value']), grouping = True) val = f'etwa {val} [[Meter|Quadratkilometer]]' elif prop == 'Staatsoberhaupt': if 'oberhaupt_bezeichnung' in item: val = item['oberhaupt_bezeichnung']['value'] + ' ' + item[field]['value'] else: val = item[field]['value'] elif prop == 'Lagebeschreibung': # Manche Länder (Schweiz, USA, ...) brauchen weibliche Artikel, # andere (Irak, Iran) männliche, andere gar keine... # deshalb erstmal nur sehr generisch: val = 'Wo das Land liegt' else: val = item[field]['value'] code.filter_templates()[0].add( f' {prop} ', f' {val}\n', preserve_spacing = False) # Speichere die Änderungen, falls vorhanden, und verschiebe # Artikel ggf. zurück in Kategorie "ungeprüfte Infobox" if page.text != str(code): # Speichere Vorlage page.text = str(code) page.save('Automatische Anlage der Länder-Infobox (dritter Testlauf mit 5 Ländern)') # Öffne Länderartikel page = pywikibot.Page(site, title) code = mwparserfromhell.parse(page.text) # Binde Länder-Infobox ein, falls noch nicht geschehen if not code.filter_templates(matches = lambda n: n.name.matches (f'Infobox_{title}')): code = mwparserfromhell.parse(f'{{{{Infobox_{title}}}}}\n{str(code)}') # Lösche [[Kategorie:Artikel mit geprüfter Infobox]], falls vorhanden if '[[Kategorie:Artikel mit geprüfter Infobox]]' in str(code): code.remove ('[[Kategorie:Artikel mit geprüfter Infobox]]') # Füge [[Kategorie:Artikel mit ungeprüfter Infobox]] ein, falls noch nicht geschehen if '[[Kategorie:Artikel mit ungeprüfter Infobox]]' not in str(code): code.append ('\n[[Kategorie:Artikel mit ungeprüfter Infobox]]') # Speichere Länderartikel page.text = str(code) page.save('Automatische Einbindung der Länder-Infobox (dritter Testlauf mit 5 Ländern)')


