Kein Stack-Thema. Notizzettel für Infrastruktur außerhalb von chemenu. Bleibt hier auf Wunsch des Betreibers offen, bis ein eigenes Repo existiert; dann wird dieser Body dorthin übernommen und das Issue geschlossen. Gebaut wird hier nichts. Bewusst ohne area/-Label - keines passt.
Der Tracker ist öffentlich: keine Hostnamen, Zugangsdaten oder sonstigen privaten Infrastrukturdaten hier eintragen.
Ursprünglicher Stub (2026-09-10) wörtlich im ersten Kommentar. Überarbeitet 2026-10-02.
Ziel
Zwei Wünsche, ein gemeinsamer Kern:
Lesen unterwegs, Volltext später: Artikel im RSS-Reader (FieryFeeds auf iOS, Backend Nextcloud News) mit einem Stern markieren; der Volltext landet ohne Desktop-Handarbeit im Notiz-/Wissensspeicher. Bisher: Obsidian Web Clipper am Desktop, der eine laufende Obsidian-Instanz braucht.
Paywall-Artikel ins Wiki:wikitool raw fetch (chemenu #120) lädt nur ohne Login. Paywall-Inhalt (Beispiel heise+) braucht eine eingeloggte Session.
Gemeinsamer Kern: ein Auth-/Fetch-Dienst, der Sessions hält und eine einzige Frage beantwortet: URL rein, HTML raus (eingeloggt, wo nötig). Beide Wünsche nutzen ihn.
Architektur (Stand der Überlegung)
FieryFeeds --Stern--> Nextcloud News
|
Poll-Job (Cron) --URL--> Auth-/Fetch-Dienst <--URL-- wikitool raw fetch
| (Sessions, Adapter) (via #169)
v |
Ziel (Vault / Instanz) <----HTML-------+
Auth-/Fetch-Dienst
Schnittstelle: "URL rein, HTML-Bytes raus". Für wikitool als Kommandozeilenbefehl <befehl> <url> -> HTML auf stdout, exit 0; Fehler -> exit ≠ 0 + Meldung auf stderr. Verbindlich ist das Protokoll in chemenu #169, nicht dieser Absatz; ändert es sich, wird es dort geändert. Der Befehl kann ein dünner Client sein, der einen Dienst im Netz anspricht.
Adapter pro Domain (aus dem ursprünglichen Entwurf): matches(url), needs_auth(), load_session(), login(), fetch(). extract() muss der Dienst nicht können, wenn das Ziel eine chemenu-Instanz ist: wikitool leitet den Text selbst ab (#120); der Dienst liefert nur HTML. Für das Vault-Ziel ohne wikitool bleibt extract() nötig - Option: im Dienst dieselbe Ableitung wie #120 verwenden oder Trafilatura/Readability.
Login technisch: Vermutlich ist ein Headless-Browser nötig (Playwright mit persistentem Storage-State), nicht nur Requests+Formular-POST - Verlags-Logins haben oft Bot-Schutz/Captcha und JS-gerenderte Inhalte. Ungeprüft, ebenso wie der konkrete heise+-Login-Ablauf (Formularfelder, 2FA, SSO).
Nutzungsbedingungen: Ob heise+ (und jede weitere Site) automatisierten Abruf durch den Abonnenten erlaubt, ist nicht geprüft. Vor dem ersten Adapter nachlesen.
Wartung: Jeder Login-Adapter bricht, wenn die Site ihren Login ändert. Ein Adapter pro Site, Ausfall muss gemeldet werden (siehe Benachrichtigung).
Zugangsdaten: verschlüsselt at-rest (age/GPG oder Secret-Store der Laufzeitumgebung) - nicht entschieden. Nie im chemenu-Arbeitsbaum.
RSS-Pipeline (aus dem ursprünglichen Entwurf)
Trigger: Stern in FieryFeeds (normale App-Funktion; FieryFeeds' Siri-Shortcuts-Support wurde vom Entwickler weitgehend entfernt, daher kein Shortcuts-Trigger).
Poll-Job (Cron, etwa alle 10-15 Min): GET /items/updated?lastModified=<ts>&type=2 der Nextcloud-News-API liefert seit dem letzten Lauf geänderte Starred-Items.
Je Artikel: Auth-/Fetch-Dienst aufrufen.
Ergebnis ans Ziel liefern (siehe unten).
Erfolg: PUT /items/unstar/multiple entsternt als Fertig-Signal. Fehler: Stern bleibt, Benachrichtigung (ntfy/Pushcut o.ä.).
Verworfen: Pushcut Automation Server als Trigger (zugunsten Poll); Obsidian Local REST API und Clipper-URI als Ziel-Schnittstelle (beide brauchen eine laufende Obsidian-Instanz - genau der ursprüngliche Blocker).
Ziel: wohin der Artikel geht
Ziel
Weg
Bemerkung
Obsidian-Vault (ursprünglich)
Git-Commit ins Vault-Repo, Note mit Frontmatter (Titel, URL, Datum, Quelle)
Auslösung offen: Runner mit Deploy-Key oder Push vom Server
chemenu-Instanz, lokal
Pipeline legt HTML in incoming/ ab; Ingest dann mit wikitool raw fetch --html incoming/<datei>.html --url <url> (#120)
incoming/ ist lokal und gitignored - nur machbar, wenn die Pipeline auf derselben Maschine wie die Instanz läuft
chemenu-Instanz, entfernt
MCP-Tool submit der Instanz -> mcp-upload/, Mensch gibt per wikitool upload accept frei (Upload Review Gate)
Bestehender Weg für entfernte Aufrufer, siehe raw/CONTRACT.md § mcp-upload; braucht einen laufenden MCP-Server mit .wikitool-upload.json. Ungeprüft, ob submit zwei Dateien (HTML) sauber transportiert
chemenu-Instanz, Ingest auf Abruf
Kein Push: wikitool raw fetch <url> nutzt den Dienst über #169, wenn der Nutzer eine URL ingesten will
Kein Poll nötig; deckt Wunsch 2 ab, nicht Wunsch 1
Nicht entschieden, ob Wunsch 1 überhaupt in chemenu landen soll oder im Vault.
Abgrenzung zu chemenu (verbindlich in den jeweiligen Issues)
#120raw fetch <url> und raw fetch --html <datei> --url <url>: Abruf ohne Login, Ableitung HTML -> Text, Bundle HTML + .md in incoming/. Keine Zugangsdaten, keine Login-Adapter, kein Headless-Browser im Tool.
#169.wikitool-fetch.json: optionaler externer Abrufbefehl pro Host, die Andockstelle für den Dienst hier. Wartet (prio/waiting) unter anderem darauf, dass dieser Dienst existiert.
Alles andere hier - Poll, Dienst, Adapter, Zugangsdaten, Benachrichtigung, Deployment - gehört nicht in chemenu.
Offene Fragen
Wo laufen Poll-Job und Dienst (Homelab-Container, bestehende Infrastruktur)?
heise+-Login: Ablauf, 2FA, Bot-Schutz - reicht Requests oder braucht es Playwright?
Nutzungsbedingungen der Paywall-Sites zu automatisiertem Abruf.
Speicherort und Verschlüsselung der Zugangsdaten/Sessions.
Benachrichtigungskanal bei Fehlern (ntfy, Pushcut, Mail).
Ziel für Wunsch 1: Vault, chemenu-Instanz oder beides (Tabelle oben)?
Wie der Dienst für wikitool erreichbar ist: lokaler Befehl, oder dünner Client gegen einen Netzdienst (dann: Authentisierung zwischen Client und Dienst).
Auslöser (prio/waiting)
Ein eigenes Repo für diese Infrastruktur wird angelegt. Dann: Body dorthin übernehmen, hier mit Verweis schließen. Bis dahin wird hier gesammelt.
> **Kein Stack-Thema.** Notizzettel für Infrastruktur außerhalb von chemenu. Bleibt hier auf Wunsch des Betreibers offen, bis ein eigenes Repo existiert; dann wird dieser Body dorthin übernommen und das Issue geschlossen. Gebaut wird hier nichts. Bewusst ohne `area/`-Label - keines passt.
>
> Der Tracker ist öffentlich: keine Hostnamen, Zugangsdaten oder sonstigen privaten Infrastrukturdaten hier eintragen.
>
> Ursprünglicher Stub (2026-09-10) wörtlich im ersten Kommentar. Überarbeitet 2026-10-02.
## Ziel
Zwei Wünsche, ein gemeinsamer Kern:
1. **Lesen unterwegs, Volltext später:** Artikel im RSS-Reader (FieryFeeds auf iOS, Backend Nextcloud News) mit einem Stern markieren; der Volltext landet ohne Desktop-Handarbeit im Notiz-/Wissensspeicher. Bisher: Obsidian Web Clipper am Desktop, der eine laufende Obsidian-Instanz braucht.
2. **Paywall-Artikel ins Wiki:** `wikitool raw fetch` (chemenu #120) lädt nur ohne Login. Paywall-Inhalt (Beispiel heise+) braucht eine eingeloggte Session.
Gemeinsamer Kern: ein **Auth-/Fetch-Dienst**, der Sessions hält und eine einzige Frage beantwortet: *URL rein, HTML raus (eingeloggt, wo nötig)*. Beide Wünsche nutzen ihn.
## Architektur (Stand der Überlegung)
```
FieryFeeds --Stern--> Nextcloud News
|
Poll-Job (Cron) --URL--> Auth-/Fetch-Dienst <--URL-- wikitool raw fetch
| (Sessions, Adapter) (via #169)
v |
Ziel (Vault / Instanz) <----HTML-------+
```
### Auth-/Fetch-Dienst
- **Schnittstelle:** "URL rein, HTML-Bytes raus". Für `wikitool` als Kommandozeilenbefehl `<befehl> <url>` -> HTML auf stdout, exit 0; Fehler -> exit ≠ 0 + Meldung auf stderr. **Verbindlich ist das Protokoll in chemenu #169**, nicht dieser Absatz; ändert es sich, wird es dort geändert. Der Befehl kann ein dünner Client sein, der einen Dienst im Netz anspricht.
- **Adapter pro Domain** (aus dem ursprünglichen Entwurf): `matches(url)`, `needs_auth()`, `load_session()`, `login()`, `fetch()`. `extract()` muss der Dienst **nicht** können, wenn das Ziel eine chemenu-Instanz ist: `wikitool` leitet den Text selbst ab (#120); der Dienst liefert nur HTML. Für das Vault-Ziel ohne `wikitool` bleibt `extract()` nötig - Option: im Dienst dieselbe Ableitung wie #120 verwenden oder Trafilatura/Readability.
- **Login technisch:** Vermutlich ist ein Headless-Browser nötig (Playwright mit persistentem Storage-State), nicht nur Requests+Formular-POST - Verlags-Logins haben oft Bot-Schutz/Captcha und JS-gerenderte Inhalte. **Ungeprüft**, ebenso wie der konkrete heise+-Login-Ablauf (Formularfelder, 2FA, SSO).
- **Nutzungsbedingungen:** Ob heise+ (und jede weitere Site) automatisierten Abruf durch den Abonnenten erlaubt, ist **nicht geprüft**. Vor dem ersten Adapter nachlesen.
- **Wartung:** Jeder Login-Adapter bricht, wenn die Site ihren Login ändert. Ein Adapter pro Site, Ausfall muss gemeldet werden (siehe Benachrichtigung).
- **Zugangsdaten:** verschlüsselt at-rest (age/GPG oder Secret-Store der Laufzeitumgebung) - nicht entschieden. Nie im chemenu-Arbeitsbaum.
### RSS-Pipeline (aus dem ursprünglichen Entwurf)
1. Trigger: Stern in FieryFeeds (normale App-Funktion; FieryFeeds' Siri-Shortcuts-Support wurde vom Entwickler weitgehend entfernt, daher kein Shortcuts-Trigger).
2. Poll-Job (Cron, etwa alle 10-15 Min): `GET /items/updated?lastModified=<ts>&type=2` der Nextcloud-News-API liefert seit dem letzten Lauf geänderte Starred-Items.
3. Je Artikel: Auth-/Fetch-Dienst aufrufen.
4. Ergebnis ans Ziel liefern (siehe unten).
5. Erfolg: `PUT /items/unstar/multiple` entsternt als Fertig-Signal. Fehler: Stern bleibt, Benachrichtigung (ntfy/Pushcut o.ä.).
Verworfen: Pushcut Automation Server als Trigger (zugunsten Poll); Obsidian Local REST API und Clipper-URI als Ziel-Schnittstelle (beide brauchen eine laufende Obsidian-Instanz - genau der ursprüngliche Blocker).
### Ziel: wohin der Artikel geht
| Ziel | Weg | Bemerkung |
|---|---|---|
| Obsidian-Vault (ursprünglich) | Git-Commit ins Vault-Repo, Note mit Frontmatter (Titel, URL, Datum, Quelle) | Auslösung offen: Runner mit Deploy-Key oder Push vom Server |
| chemenu-Instanz, lokal | Pipeline legt HTML in `incoming/` ab; Ingest dann mit `wikitool raw fetch --html incoming/<datei>.html --url <url>` (#120) | `incoming/` ist lokal und gitignored - nur machbar, wenn die Pipeline auf derselben Maschine wie die Instanz läuft |
| chemenu-Instanz, entfernt | MCP-Tool `submit` der Instanz -> `mcp-upload/`, Mensch gibt per `wikitool upload accept` frei (Upload Review Gate) | Bestehender Weg für entfernte Aufrufer, siehe `raw/CONTRACT.md` § mcp-upload; braucht einen laufenden MCP-Server mit `.wikitool-upload.json`. Ungeprüft, ob `submit` zwei Dateien (HTML) sauber transportiert |
| chemenu-Instanz, Ingest auf Abruf | Kein Push: `wikitool raw fetch <url>` nutzt den Dienst über #169, wenn der Nutzer eine URL ingesten will | Kein Poll nötig; deckt Wunsch 2 ab, nicht Wunsch 1 |
Nicht entschieden, ob Wunsch 1 überhaupt in chemenu landen soll oder im Vault.
## Abgrenzung zu chemenu (verbindlich in den jeweiligen Issues)
- **#120** `raw fetch <url>` und `raw fetch --html <datei> --url <url>`: Abruf ohne Login, Ableitung HTML -> Text, Bundle HTML + `.md` in `incoming/`. Keine Zugangsdaten, keine Login-Adapter, kein Headless-Browser im Tool.
- **#169** `.wikitool-fetch.json`: optionaler externer Abrufbefehl pro Host, die Andockstelle für den Dienst hier. Wartet (`prio/waiting`) unter anderem darauf, dass dieser Dienst existiert.
- Alles andere hier - Poll, Dienst, Adapter, Zugangsdaten, Benachrichtigung, Deployment - gehört **nicht** in chemenu.
## Offene Fragen
- Wo laufen Poll-Job und Dienst (Homelab-Container, bestehende Infrastruktur)?
- heise+-Login: Ablauf, 2FA, Bot-Schutz - reicht Requests oder braucht es Playwright?
- Nutzungsbedingungen der Paywall-Sites zu automatisiertem Abruf.
- Speicherort und Verschlüsselung der Zugangsdaten/Sessions.
- Benachrichtigungskanal bei Fehlern (ntfy, Pushcut, Mail).
- Ziel für Wunsch 1: Vault, chemenu-Instanz oder beides (Tabelle oben)?
- Wie der Dienst für `wikitool` erreichbar ist: lokaler Befehl, oder dünner Client gegen einen Netzdienst (dann: Authentisierung zwischen Client und Dienst).
## Auslöser (`prio/waiting`)
Ein eigenes Repo für diese Infrastruktur wird angelegt. Dann: Body dorthin übernehmen, hier mit Verweis schließen. Bis dahin wird hier gesammelt.
## Quellen aus der Recherche (2026-09-09/10)
- Nextcloud News External API v1-2 (`items/updated`, `items/star(unstar)/multiple`): https://github.com/nextcloud/news/blob/master/docs/api/api-v1-2.md
- Nextcloud News Nutzer-Doku (Mark Read/Starred): https://nextcloud.github.io/news/user/
- FieryFeeds' reduzierter Shortcuts-/Siri-Support (Entwickler-Blog): https://voidstern.net/archives/3101
- Obsidian Web Clipper - Einführung (setzt laufende Obsidian-Instanz voraus): https://obsidian.md/help/web-clipper
- Obsidian Web Clipper - Capture-Mechanik (Obsidian-URI): https://obsidian.md/help/web-clipper/capture
- Obsidian Local REST API (setzt ebenfalls laufende Instanz voraus): https://coddingtonbear.github.io/obsidian-local-rest-api/
- Web-Scraping hinter Login mit Python/Requests+BeautifulSoup (Heise-Ratgeber, Session-Cookie-Ansatz): https://www.heise.de/ratgeber/Python-Websitedaten-nach-einem-Login-auslesen-4681895.html
- n8n-Workflow-Beispiel "Send RSS feed data to webhook": https://n8n.io/workflows/159-send-rss-feed-data-to-webhook/
- Pushcut Automation Server (als Trigger verworfen): https://www.pushcut.io/support/automation-server
Changelog: Auf Wunsch des Betreibers (2026-10-02) bleibt dieses Issue offen, als Sammelstelle für alles zur Infrastruktur außerhalb des Stacks (RSS-Poll, Auth-/Fetch-Dienst), bis es in ein eigenes Repo wandert. Body neu gegliedert: ursprünglicher Entwurf erhalten, ergänzt um die Abgrenzung zum Stack (#120raw fetch + --html, #169 Andockstelle .wikitool-fetch.json), die Idee eines zentralen Auth-Dienstes für beide Verbraucher, ungeprüfte Annahmen zum heise+-Login und eine Option, Artikel über MCP-submit in eine Instanz zu liefern. Titel angepasst. status/incoming entfernt; kind/decision, prio/waiting, size/L gesetzt, bewusst ohne area/ (kein Stack-Thema).
Der ursprüngliche Stub, wörtlich:
Herkunft: Aus einer Diskussion in der LLM-Wiki-Space-Session vom 2026-09-09/10, keine wikitool-Ausarbeitung.
Ausgangsproblem: Torben liest RSS über FieryFeeds (iOS) mit Nextcloud-News-Backend. Artikel, die den vollen Text erfordern (z. B. hinter Paywall wie Heise+), werden bisher manuell später am Desktop per Obsidian Web Clipper in den Vault übernommen — unbequem, weil das Lesen typischerweise abends im Bett passiert und der Clipper eine laufende Desktop-Instanz von Obsidian voraussetzt.
Skizzierter Ansatz:
Trigger: Artikel in FieryFeeds als "Starred" markieren (normale App-Funktion, kein fragiles Shortcuts-Feature — FieryFeeds' Siri-Shortcuts-Support wurde vom Entwickler aus technischen Gründen größtenteils entfernt).
Poll-Job (Cron, z. B. alle 10–15 Min) fragt die Nextcloud-News-API ab: GET /items/updated?lastModified=<ts>&type=2 liefert alle seit dem letzten Lauf geänderten Starred-Items.
Für jeden neuen Artikel: Domain-Matching gegen eine Adapter-Registry (siehe unten), Volltext holen, zu Markdown extrahieren.
Note mit Frontmatter (Titel, URL, Datum, Quelle) wird per Git-Commit direkt ins Vault-Repo geschrieben — bewusst nicht über Obsidian Local REST API oder eine Clipper-artige URI, weil beide eine laufende, erreichbare Obsidian-Instanz voraussetzen (das war der ursprüngliche Bequemlichkeits-Blocker).
Erfolgreich verarbeitete Items werden per PUT /items/unstar/multiple (Nextcloud News API) entsternt als Fertig-Signal; bei Fehlern bleibt der Stern stehen und der Job meldet sich (z. B. ntfy/Pushcut-Notification).
Plugin-Infrastruktur für das Auth-/Paywall-Problem:
Adapter-Registry mit gemeinsamem Interface pro Domain (matches(url), needs_auth(), load_session(), login(), fetch(), extract()). Default-Adapter für unauthentifizierte Seiten (Readability/Trafilatura-artige Extraktion); domainspezifische Adapter (z. B. für heise.de) kapseln Login-Flow und Session-Handling (Cookie/Storage-State, verschlüsselt at-rest). Neue Paywall-Site = neue Adapter-Datei, Rest der Pipeline bleibt unverändert.
Offene Fragen:
Wo läuft der Poll-Job/die Adapter-Pipeline (Homelab-Container? bestehende Infrastruktur?).
Konkreter Login-Flow für Heise+ (Formularfelder, 2FA?) ungeklärt.
Speicherort/Verschlüsselung der Zugangsdaten (age/GPG?) nur als Idee, nicht entschieden.
Wie wird ein fehlgeschlagener Adapter dem Nutzer gemeldet — Kanal noch offen.
Wie wird der Git-Commit ins Vault-Repo ausgelöst (lokaler Runner mit SSH-Deploy-Key? Push von einem Server aus?) — ungeklärt.
Hinweis zur Einordnung in diesen Tracker: Dies ist kein Chemenu-Stack-Thema im Sinne von instructions/dev/issue-tracking.md — es betrifft eine private RSS-zu-Obsidian-Automatisierung außerhalb dieses Repos. Keines der bestehenden area/*-Labels passt inhaltlich, daher bewusst ohne area/-Label angelegt. Als status/incoming ist das laut Konvention unproblematisch (die vier Pflichtlabels sind bei diesem Flag noch nicht fällig) — bei der Triage muss aber geklärt werden, ob dieser Tracker überhaupt der richtige Ort für das Thema ist.
**Changelog:** Auf Wunsch des Betreibers (2026-10-02) bleibt dieses Issue offen, als Sammelstelle für alles zur Infrastruktur außerhalb des Stacks (RSS-Poll, Auth-/Fetch-Dienst), bis es in ein eigenes Repo wandert. Body neu gegliedert: ursprünglicher Entwurf erhalten, ergänzt um die Abgrenzung zum Stack (#120 `raw fetch` + `--html`, #169 Andockstelle `.wikitool-fetch.json`), die Idee eines zentralen Auth-Dienstes für beide Verbraucher, ungeprüfte Annahmen zum heise+-Login und eine Option, Artikel über MCP-`submit` in eine Instanz zu liefern. Titel angepasst. `status/incoming` entfernt; `kind/decision`, `prio/waiting`, `size/L` gesetzt, bewusst ohne `area/` (kein Stack-Thema).
Der ursprüngliche Stub, wörtlich:
> **Herkunft:** Aus einer Diskussion in der LLM-Wiki-Space-Session vom 2026-09-09/10, keine wikitool-Ausarbeitung.
>
> **Ausgangsproblem:** Torben liest RSS über FieryFeeds (iOS) mit Nextcloud-News-Backend. Artikel, die den vollen Text erfordern (z. B. hinter Paywall wie Heise+), werden bisher manuell später am Desktop per Obsidian Web Clipper in den Vault übernommen — unbequem, weil das Lesen typischerweise abends im Bett passiert und der Clipper eine laufende Desktop-Instanz von Obsidian voraussetzt.
>
> **Skizzierter Ansatz:**
>
> 1. Trigger: Artikel in FieryFeeds als "Starred" markieren (normale App-Funktion, kein fragiles Shortcuts-Feature — FieryFeeds' Siri-Shortcuts-Support wurde vom Entwickler aus technischen Gründen größtenteils entfernt).
> 2. Poll-Job (Cron, z. B. alle 10–15 Min) fragt die Nextcloud-News-API ab: `GET /items/updated?lastModified=<ts>&type=2` liefert alle seit dem letzten Lauf geänderten Starred-Items.
> 3. Für jeden neuen Artikel: Domain-Matching gegen eine Adapter-Registry (siehe unten), Volltext holen, zu Markdown extrahieren.
> 4. Note mit Frontmatter (Titel, URL, Datum, Quelle) wird per Git-Commit direkt ins Vault-Repo geschrieben — bewusst **nicht** über Obsidian Local REST API oder eine Clipper-artige URI, weil beide eine laufende, erreichbare Obsidian-Instanz voraussetzen (das war der ursprüngliche Bequemlichkeits-Blocker).
> 5. Erfolgreich verarbeitete Items werden per `PUT /items/unstar/multiple` (Nextcloud News API) entsternt als Fertig-Signal; bei Fehlern bleibt der Stern stehen und der Job meldet sich (z. B. ntfy/Pushcut-Notification).
>
> **Plugin-Infrastruktur für das Auth-/Paywall-Problem:**
>
> Adapter-Registry mit gemeinsamem Interface pro Domain (`matches(url)`, `needs_auth()`, `load_session()`, `login()`, `fetch()`, `extract()`). Default-Adapter für unauthentifizierte Seiten (Readability/Trafilatura-artige Extraktion); domainspezifische Adapter (z. B. für heise.de) kapseln Login-Flow und Session-Handling (Cookie/Storage-State, verschlüsselt at-rest). Neue Paywall-Site = neue Adapter-Datei, Rest der Pipeline bleibt unverändert.
>
> **Offene Fragen:**
>
> - Wo läuft der Poll-Job/die Adapter-Pipeline (Homelab-Container? bestehende Infrastruktur?).
> - Konkreter Login-Flow für Heise+ (Formularfelder, 2FA?) ungeklärt.
> - Speicherort/Verschlüsselung der Zugangsdaten (age/GPG?) nur als Idee, nicht entschieden.
> - Wie wird ein fehlgeschlagener Adapter dem Nutzer gemeldet — Kanal noch offen.
> - Wie wird der Git-Commit ins Vault-Repo ausgelöst (lokaler Runner mit SSH-Deploy-Key? Push von einem Server aus?) — ungeklärt.
>
> **Quellen aus der Recherche:**
>
> - Nextcloud News External API v1-2 (Endpunkte `items/updated`, `items/star(unstar)/multiple`): https://github.com/nextcloud/news/blob/master/docs/api/api-v1-2.md
> - Nextcloud News Nutzer-Doku (Mark Read/Starred): https://nextcloud.github.io/news/user/
> - FieryFeeds' reduzierter Shortcuts-/Siri-Support (Entwickler-Blog): https://voidstern.net/archives/3101
> - Obsidian Web Clipper – offizielle Einführung (setzt laufende Obsidian-Instanz voraus): https://obsidian.md/help/web-clipper
> - Obsidian Web Clipper – Capture-Mechanik (Obsidian-URI): https://obsidian.md/help/web-clipper/capture
> - Obsidian Local REST API (Plugin, Alternative zur URI, setzt ebenfalls laufende Instanz voraus): https://coddingtonbear.github.io/obsidian-local-rest-api/
> - Web-Scraping hinter Login mit Python/Requests+BeautifulSoup (Heise-Ratgeber, Beispiel für Session-Cookie-Ansatz): https://www.heise.de/ratgeber/Python-Websitedaten-nach-einem-Login-auslesen-4681895.html
> - n8n-Workflow-Beispiel "Send RSS feed data to webhook": https://n8n.io/workflows/159-send-rss-feed-data-to-webhook/
> - Pushcut Automation Server (Alternative Trigger-Mechanik, in der Diskussion zugunsten des Poll-Ansatzes verworfen): https://www.pushcut.io/support/automation-server
>
> **Hinweis zur Einordnung in diesen Tracker:** Dies ist kein Chemenu-Stack-Thema im Sinne von `instructions/dev/issue-tracking.md` — es betrifft eine private RSS-zu-Obsidian-Automatisierung außerhalb dieses Repos. Keines der bestehenden `area/*`-Labels passt inhaltlich, daher bewusst ohne `area/`-Label angelegt. Als `status/incoming` ist das laut Konvention unproblematisch (die vier Pflichtlabels sind bei diesem Flag noch nicht fällig) — bei der Triage muss aber geklärt werden, ob dieser Tracker überhaupt der richtige Ort für das Thema ist.
torben
changed title from RSS-zu-Obsidian-Pipeline: Star-Flag-Poll über Nextcloud-News-API mit Adapter-Plugin für Paywall-Auth (Entwurf) to [Notizzettel, wandert in eigenes Repo] RSS-Pipeline und Auth-/Fetch-Dienst für Paywall-Artikel2026-10-02 20:03:41 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Ziel
Zwei Wünsche, ein gemeinsamer Kern:
wikitool raw fetch(chemenu #120) lädt nur ohne Login. Paywall-Inhalt (Beispiel heise+) braucht eine eingeloggte Session.Gemeinsamer Kern: ein Auth-/Fetch-Dienst, der Sessions hält und eine einzige Frage beantwortet: URL rein, HTML raus (eingeloggt, wo nötig). Beide Wünsche nutzen ihn.
Architektur (Stand der Überlegung)
Auth-/Fetch-Dienst
wikitoolals Kommandozeilenbefehl<befehl> <url>-> HTML auf stdout, exit 0; Fehler -> exit ≠ 0 + Meldung auf stderr. Verbindlich ist das Protokoll in chemenu #169, nicht dieser Absatz; ändert es sich, wird es dort geändert. Der Befehl kann ein dünner Client sein, der einen Dienst im Netz anspricht.matches(url),needs_auth(),load_session(),login(),fetch().extract()muss der Dienst nicht können, wenn das Ziel eine chemenu-Instanz ist:wikitoolleitet den Text selbst ab (#120); der Dienst liefert nur HTML. Für das Vault-Ziel ohnewikitoolbleibtextract()nötig - Option: im Dienst dieselbe Ableitung wie #120 verwenden oder Trafilatura/Readability.RSS-Pipeline (aus dem ursprünglichen Entwurf)
GET /items/updated?lastModified=<ts>&type=2der Nextcloud-News-API liefert seit dem letzten Lauf geänderte Starred-Items.PUT /items/unstar/multipleentsternt als Fertig-Signal. Fehler: Stern bleibt, Benachrichtigung (ntfy/Pushcut o.ä.).Verworfen: Pushcut Automation Server als Trigger (zugunsten Poll); Obsidian Local REST API und Clipper-URI als Ziel-Schnittstelle (beide brauchen eine laufende Obsidian-Instanz - genau der ursprüngliche Blocker).
Ziel: wohin der Artikel geht
incoming/ab; Ingest dann mitwikitool raw fetch --html incoming/<datei>.html --url <url>(#120)incoming/ist lokal und gitignored - nur machbar, wenn die Pipeline auf derselben Maschine wie die Instanz läuftsubmitder Instanz ->mcp-upload/, Mensch gibt perwikitool upload acceptfrei (Upload Review Gate)raw/CONTRACT.md§ mcp-upload; braucht einen laufenden MCP-Server mit.wikitool-upload.json. Ungeprüft, obsubmitzwei Dateien (HTML) sauber transportiertwikitool raw fetch <url>nutzt den Dienst über #169, wenn der Nutzer eine URL ingesten willNicht entschieden, ob Wunsch 1 überhaupt in chemenu landen soll oder im Vault.
Abgrenzung zu chemenu (verbindlich in den jeweiligen Issues)
raw fetch <url>undraw fetch --html <datei> --url <url>: Abruf ohne Login, Ableitung HTML -> Text, Bundle HTML +.mdinincoming/. Keine Zugangsdaten, keine Login-Adapter, kein Headless-Browser im Tool..wikitool-fetch.json: optionaler externer Abrufbefehl pro Host, die Andockstelle für den Dienst hier. Wartet (prio/waiting) unter anderem darauf, dass dieser Dienst existiert.Offene Fragen
wikitoolerreichbar ist: lokaler Befehl, oder dünner Client gegen einen Netzdienst (dann: Authentisierung zwischen Client und Dienst).Auslöser (
prio/waiting)Ein eigenes Repo für diese Infrastruktur wird angelegt. Dann: Body dorthin übernehmen, hier mit Verweis schließen. Bis dahin wird hier gesammelt.
Quellen aus der Recherche (2026-09-09/10)
items/updated,items/star(unstar)/multiple): https://github.com/nextcloud/news/blob/master/docs/api/api-v1-2.mdChangelog: Auf Wunsch des Betreibers (2026-10-02) bleibt dieses Issue offen, als Sammelstelle für alles zur Infrastruktur außerhalb des Stacks (RSS-Poll, Auth-/Fetch-Dienst), bis es in ein eigenes Repo wandert. Body neu gegliedert: ursprünglicher Entwurf erhalten, ergänzt um die Abgrenzung zum Stack (#120
raw fetch+--html, #169 Andockstelle.wikitool-fetch.json), die Idee eines zentralen Auth-Dienstes für beide Verbraucher, ungeprüfte Annahmen zum heise+-Login und eine Option, Artikel über MCP-submitin eine Instanz zu liefern. Titel angepasst.status/incomingentfernt;kind/decision,prio/waiting,size/Lgesetzt, bewusst ohnearea/(kein Stack-Thema).Der ursprüngliche Stub, wörtlich:
RSS-zu-Obsidian-Pipeline: Star-Flag-Poll über Nextcloud-News-API mit Adapter-Plugin für Paywall-Auth (Entwurf)to [Notizzettel, wandert in eigenes Repo] RSS-Pipeline und Auth-/Fetch-Dienst für Paywall-Artikel