enexconv

2023-12-14

enexconv とは

Evernote のエクスポートファイル(enex)からノート毎にリソースも含んだ単独のHTMLファイルを生成するコマンドラインアプリです
単一でない HTMLは、Evernoteクライアントを利用してエクスポート可能ですので、そちらをご利用ください

動作環境

64bit Windows

ご注意

謝辞

暗号化テキストの復号化において、チグサウェブ(千草)さんの javascript コードを利用(ほぼ丸写し)させていただきました
https://chigusa-web.com/blog/evernote-decrypt/
大変助かりました

使用方法

enexconv のダウンロード

ファイル構成

使用例

最も簡単な利用方法は enexconv.exe へ enexファイルをドロップする事です

enexconv.exe [/j] [/w] [/o] [/d=出力先フォルダ] 変換元enexファイル [変換元enexファイル...]

/d : =に続いて出力先フォルダを指定
/j : ノートのタイトルがファイル名に使用できない文字を含む場合、該当文字を全角へ変換して出力(デフォルトはNG文字を削除)
/w : 出力先のファイルを上書き(デフォルトは番号付与)
/o : 出力した HTMLファイルを標準ブラウザで開く

※変換元ファイルの指定にはワイルドカードが利用可能です(*.* を指定しても処理されるのは *.enex のみです)
※出力先フォルダを省略した場合、変換元の enexファイルと同じ場所に作成されます
※出力先のファイル名はタイトルから生成されます(一つの enexが複数のノートを含んでいる場合があるため、指定できません)

ex.> enexconv.exe "export.enex"
ex.> enexconv.exe /w /d="c:\dest\destfolder" "c:\source\export.enex"
ex.> enexconv.exe /j /w "c:\hoge\*.enex" "c:\foo\*.enex"
スペースを含むパスは " で括って下さい

enex の仕組みや雑多なこと

外部の javascript ライブラリについて

このアプリケーションに通信機能はありませんが、生成したHTMLファイルから暗号化テキストの復号に外部の javascript ライブラリを使用しています.
※復号化処理は、ローカルのブラウザ内で行われます.
従って、暗号化テキストの復号はネットワーク接続が必要です. オフラインで処理したい方は、各ライブラリをダウンロード後、enexconv_base.html のインポートパスをローカルに書き換えてご利用ください.

enexの構造

enex ファイルの構造は、左記のようになっていて、 一つの enex ファイルに複数のノートを含むことができるため、note タグが繰り返される場合があります.

ノート本文は <content><en-note> で、基本的にHTMLを踏襲していますが、 画像などのリソースは、
<en-media hash="0cc175b9c0f1b6a831c399e269772661" type="image/png"/>
のような独自タグで表記されます.
リソース本体は <resource> 配下にあり、それらを紐づけするのは hash(md5) のみ
この構造は Evernote API も同様で、重複データ排除を兼ねた構造となっています.

名前の違う同じ内容(同一hash)のファイルを一つのノートへ複数添付した場合、ファイル名<file-name>はリソース情報側のみに記録されているため、 2つ以降のファイル名が消失するという設計上の問題がEvernoteには存在します.
適当なハッシュで他人のファイルを取得できる可能性が考えられますが、
APIで試した所、許可されていませんでした(試したんかい)

enexは、<resource> 側に hash 情報が存在しないため、enexconvではリソースデータ(base64エンコード)をデコード後 hash 生成して <en-media> タグと紐づけを行っています.
※後術の noteInfo(json) には resource 内にここで生成した hash を含んでいます

インライン表示の img と pdf(iframe) は、ダウンロード時のファイル名を指定できていません.
データを含むアンカータグ(a)で括って可能なようですが、 img そのものにアンカータグによるリンクが行われている可能性があるため見送っています.
各タグの data-filename オプションや下記の noteInfo(json) から元のファイル名を読み取ることは可能です.

どなたか enexconv_base.html を編集して解決してください...

javascript からのノート情報利用 - noteInfo(json)

ノート情報は置換コマンド %NOTEINFOJSON% を通じて json として吐き出されます(ノート本文やリソースデータを除く)
標準で javascript の noteInfo 変数(配列)へ格納されます.
例) noteInfo.title ←タイトル

より柔軟で見栄えの良い enexconv_base.html を誰かが作成してくれることを望んでいます!!

その他

作者へのコンタクト

どっかの掲示板に書き込んでいただくか、フォームからご連絡下さい
基本的すぎる質問、飛躍した要望はご遠慮ください。
作成動機がオレオレ使用です、お察しください