z230 - Joplin mirror skripty, store_cda_batch v1.2, vyrazeni Evernote exportu a en_backup.db z gitu
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
# 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í
|
||||
|
||||
```bash
|
||||
# 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`.
|
||||
Reference in New Issue
Block a user