d2e8a70bfe
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2.7 KiB
2.7 KiB
evernote_to_joplin_mirror_v1.0
Verze: 1.0 | Datum: 2026-06-11 | Autor: Claude (pro V. Buzalku)
Jednosměrné zrcadlení Evernote → self-hosted Joplin Server. Záložní „únikový východ" pro případ, že by Evernote (Bending Spoons) přestal vyhovovat — kompletní kopie poznámek na vlastním Toweru, odkud lze plynule přejít na Joplin.
Architektura
Evernote cloud --(evernote-backup sync)--> en_backup.db --(tento skript)--> Joplin Server
- Čtení: přímo z
en_backup.dbpřes knihovnuevernote_backup.note_storage.SqliteStorage(žádný ENEX mezikrok — knihovna je vlastní kód nástroje, čtení je spolehlivé). - Zápis: Joplin sync API
PUT /api/items/root:/<id>.md:/content, autentizace session tokenem zPOST /api/sessions(headerX-API-AUTH).
Mapování
| Evernote | Joplin | poznámka |
|---|---|---|
| notebook | folder (type_ 2) |
|
| stack | nadřazený folder | notebooky ve stacku dostanou parent |
| note | note (type_ 1) |
tělo = ENML → HTML (markup_language: 2) |
| en-media (příloha) | resource (type_ 4) + blob |
odkaz v těle :/<id> |
| en-todo | ☐ / ☑ |
ID v Joplinu = md5("evernote-<typ>:<evernote-guid>") → 32 hex. Deterministická,
takže opakované běhy aktualizují (upsert), neduplikují.
Použití
# pilot na jednom notebooku
python evernote_to_joplin_mirror_v1.0.py --notebook "CL2-78989-011"
# test s limitem poznámek
python evernote_to_joplin_mirror_v1.0.py --notebook "Recepty" --limit 5
# plné zrcadlení
python evernote_to_joplin_mirror_v1.0.py --all
# náhled bez zápisu
python evernote_to_joplin_mirror_v1.0.py --all --dry-run
Po běhu spustit v Joplin klientovi synchronizaci, aby se položky stáhly ze serveru.
Ověřeno (2026-06-11)
- Pilot
CL2-78989-011: 4 poznámky, text + HTML formátování věrně přeneseno. - Pilot
Recepty --limit 1: 1 poznámka + 20 příloh; blob byte-identický (md5 shoda), tělo správně odkazuje:/<resid>.
Známá omezení / TODO v1.1
- Upsert only — položky smazané/přejmenované v Evernote se v Joplinu zatím NEMAŽOU.
Pro pravý mirror doplnit mazání (porovnat sadu GUID, smazat osiřelé
deleted_time). - Heslo je v hlavičce skriptu plaintextem — zvážit přesun do env/konfig.
- ENML→HTML je „best effort" (en-media, en-todo). Exotické prvky (en-crypt, tabulky se zvláštním stylingem) neřešeny.
- Plánování zatím ručně na Z230; přesun na Tower (User Scripts cron) plánován.
Předchůdce
evernote-backup sync musí proběhnout před tímto skriptem (naplní/aktualizuje
en_backup.db). Plná pipeline: evernote-backup sync && python evernote_to_joplin_mirror_v1.0.py --all.