Files
janssen/Evernote/evernote_to_joplin_mirror_v1.0.md
T

2.7 KiB
Raw Blame History

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.db přes knihovnu evernote_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 z POST /api/sessions (header X-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.