Medical Research Radar
Ich interessiere mich sehr für offizielle Publikationen zu bestimmten medizinischen Themen. Also habe ich einen Automations-Workflow gebaut, der das für mich erledigt: der Medical Research Radar.
Das System durchsucht PubMed, EuropePMC und ClinicalTrials.gov laufend nach neuer Literatur zu von mir vorher fest definierten Themen, bewertet Treffer mit einem Relevanz-Score und erstellt für die vielversprechendsten Fundstücke automatisch deutschsprachige Obsidian-Notizen. Ziel ist ein belastbares Wissenssystem, ohne bei jeder Suche blind alles per KI zusammenzufassen (Kostenfalle).
Wie es aufgebaut ist
Das System besteht aus drei n8n-Workflows, die ineinandergreifen:
1. Core Backfill – der historische Bestand
Der erste Workflow baut den Kern-Bestand auf, getrennt nach Quelle:
- PubMed: läuft im Update-Betrieb und dedupliziert gegen bereits bekannte PMIDs
- EuropePMC: paginierter Voll-Backfill mit strikten Titel- und Metadatenfiltern auf Themen-Kernbezug
- ClinicalTrials: fokussierter historischer Backfill gegen Titel und Condition
Alle drei Zweige schreiben in dasselbe Google Sheet, in eigene Tabs (PubMed, EuropePMC, ClinicalTrials).
2. Summary – täglich um 08:00 Uhr
Der Summary-Workflow liest täglich alle als candidate markierten Einträge aus dem Sheet und erstellt daraus kontrolliert deutsche Obsidian-Notizen:
- PubMed:
high-Bucket → Abstract via efetch → OpenAI → Google Drive → Telegram - EuropePMC: bei leerem Abstract Fallback auf PubMed efetch möglich → OpenAI → Telegram → Upload
- ClinicalTrials: Markdown-Template ohne KI (Studieninfos brauchen keine Zusammenfassung)
Sheet-Update und Telegram-Benachrichtigung laufen bewusst vor dem Google-Drive-Upload (dazu gleich mehr unter Learnings).
3. Offene Punkte (geplant)
- Optional: EuropePMC-Abstract-Endpoint für non-MED-Quellen (Preprints) prüfen
- Optional: Score-Schwellen nach mehr Praxis-Läufen nachjustieren
- Optional: quellenübergreifende Sammelansicht (
Radar_All) ergänzen
Das Relevanz-Scoring
Damit nicht jede halbwegs passende Veröffentlichung in Obsidian landet, bewertet ein Scoring-Algorithmus jeden Treffer anhand seiner Metadaten (Titel, Publikationstyp, Journal, Jahr):
| Kriterium | Punkte |
|---|---|
| Thema direkt im Titel | 5 |
| Studientyp: Review/Guideline | 4 |
| Studientyp: klinisch/Beobachtung | 3 |
| Studientyp: Case Report | 1 |
| Praxisrelevante Begriffe | bis 4 |
| Aktualität ≤5 Jahre | 3 |
| Aktualität ≤10 Jahre | 2 |
| Pädiatrischer Bezug | +2 |
| Versorgungsrealität (Fehldiagnose etc.) | +2 |
Alles ab Score 9 landet im high-Bucket und wird für eine Obsidian-Notiz vorgemerkt. EuropePMC-Kandidaten sind noch strenger gefasst: nur Reviews/Guidelines aus den letzten 10 Jahren, kein PubMed-Duplikat.
Das Scoring arbeitet bewusst nur mit Metadaten – Studien mit schwachem Titel aber starkem Abstract können zu niedrig einsortiert werden. Das ist ein bekannter Kompromiss.
Was ich dabei gelernt habe
Google Drive Upload bricht die pairedItem-Kette. Nach dem Upload sind alle Node-Referenzen kaputt, Telegram überschreibt danach zusätzlich $json. Fix: Sheet-Update und Telegram laufen VOR Convert/Upload; ein Restore-Set-Node stellt fileContent/fileName danach aus einem früheren Node wieder her.
EuropePMC-Paginierung war ein längerer Debugging-Weg. Verschiedene Code-Node-Ansätze (new URL(), fetch(), $helpers.httpRequest()) scheiterten alle an fehlenden globalen APIs in der n8n-Code-Node-Runtime. Lösung: n8n-natives HTTP-Pagination-Pattern (Response Contains Next URL / nextPageUrl) statt Code-Node-Requests.
PubMed-Rate-Limit (429) kommt schnell. Count- und Search-Requests laufen jetzt seriell über Loop Over Items + Wait, und Count-Nodes haben executeOnce gesetzt.
Status und nächste Schritte
Das System läuft. Der historische Bestand wird batchweise aufgebaut, der Summary-Workflow erstellt täglich neue Notizen für die besten Treffer, und ich bekomme per Telegram Bescheid wenn eine neue Obsidian-Notiz fertig ist.
Was noch fehlt:
– Den Update-Workflow aktivieren und auf monatlichen Trigger umstellen
– Optional: EuropePMC-Abstract-Endpoint für Preprints prüfen
– Optional: Score-Schwellen nach mehr Praxis-Läufen nachjustieren
