From 5c87fd6cd4663923616b42ba86f49ec8ae669bbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kier=C3=A1n=20Meinhardt?= Date: Mon, 16 Dec 2024 17:17:43 +0100 Subject: [PATCH] celan: use tei edition --- configs/bots/celan.nix | 72 ++++++++++++++++++++++++++---------------- 1 file changed, 44 insertions(+), 28 deletions(-) diff --git a/configs/bots/celan.nix b/configs/bots/celan.nix index 54596b8..2af5d27 100644 --- a/configs/bots/celan.nix +++ b/configs/bots/celan.nix @@ -3,12 +3,7 @@ lib, config, ... -}: let - celan = pkgs.fetchzip { - url = "http://c.krebsco.de/celan.tar.gz"; - sha256 = "sha256-nA+EwAH2vkeolsy9AoPLEMt1uGKDZe/aPrS95CZvuus="; - }; -in { +}: { niveum.bots.celan = { enable = true; time = "08:00"; @@ -22,28 +17,49 @@ in { tokenFile = config.age.secrets.mastodon-token-celan.path; language = "de"; }; - command = toString (pkgs.writers.writeDash "random-celan" '' - cd ${celan} - poem="$(${pkgs.findutils}/bin/find . -type f | ${pkgs.coreutils}/bin/shuf -n1)" - source="$(${pkgs.coreutils}/bin/dirname "$poem" \ - | ${pkgs.gnused}/bin/sed 's#^\./##;s/[-_]/ /g;s!/! › !g;s/0\([0-9]\+\)/\1/g' \ - | ${pkgs.gnused}/bin/sed 's/Der Sand aus den Urnen/#Der_Sand_aus_den_Urnen (1948)/g' \ - | ${pkgs.gnused}/bin/sed 's/Mohn und Gedächtnis/#Mohn_und_Gedächtnis (1952)/g' \ - | ${pkgs.gnused}/bin/sed 's/Von Schwelle zu Schwelle/#Von_Schwelle_zu_Schwelle (1955)/g' \ - | ${pkgs.gnused}/bin/sed 's/Sprachgitter/#& (1959)/g' \ - | ${pkgs.gnused}/bin/sed 's/Niemandsrose/#& (1963)/g' \ - | ${pkgs.gnused}/bin/sed 's/Atemwende/#& (1967)/g' \ - | ${pkgs.gnused}/bin/sed 's/Fadensonnen/#& (1968)/g' \ - | ${pkgs.gnused}/bin/sed 's/Lichtzwang/#& (1970)/g' \ - | ${pkgs.gnused}/bin/sed 's/Schneepart/#& (1971)/g' \ - | ${pkgs.gnused}/bin/sed 's/Zeitgehöft/#& (1976)/g' \ - | ${pkgs.gnused}/bin/sed 's/Frühwerk/#& (1989)/g' \ - | ${pkgs.gnused}/bin/sed 's/Eingedunkelt/#& (1991)/g' \ - | ${pkgs.gnused}/bin/sed 's/Nachlaß/#& (1997)/g' - )" - cat "$poem" - echo - printf "Aus: %s\n\n#PaulCelan #Celan #Lyrik #poetry" "$source" + command = toString (pkgs.writers.writePython3 "random-celan.py" { libraries = [pkgs.python3Packages.lxml]; } '' + from lxml import etree + import random + + + def xml_text(elements): + return "".join("".join(t.itertext()) for t in elements).strip() + + + tree = etree.parse('${pkgs.fetchurl { + url = "http://c.krebsco.de/celan.tei.xml"; + hash = "sha256-HgNmJYfhuwyfm+FcNtnnYWpJpIIU1ElHLeLiIFjF9mE="; + }}') + root = tree.getroot() + + tei = {"tei": "http://www.tei-c.org/ns/1.0"} + + poems = root.xpath(".//tei:lg[@type='poem']", namespaces=tei) + + poem = random.choice(poems) + + for stanza in poem.xpath("./tei:lg[@type='stanza']", namespaces=tei): + for line in stanza.xpath('./tei:l', namespaces=tei): + if line.text: + print(line.text.strip()) + print() + + current_element = poem + while current_element is not None: + if current_element.tag == "{http://www.tei-c.org/ns/1.0}text": + text_element = current_element + + title = xml_text(text_element.xpath("./tei:front/tei:docTitle", + namespaces=tei)) + print(f"Aus: #{title.replace(" ", "_")}", end=" ") + + if date := xml_text(text_element.xpath("./tei:front/tei:docDate", + namespaces=tei)): + print(f"({date})") + break + current_element = current_element.getparent() + + print("\n\n#PaulCelan #Celan #Lyrik #poetry") ''); };