at backyard

Color my life with the chaos of trouble.

Evernoteのノートの中身をテキストに書きだすPHPスクリプト

Evernote の無料枠が2台までの使用となるらしい。
私は2台以上使っているので、有料プランへ変更する必要がある。

blog.evernote.com

有料にするのは嫌じゃない。よく使っているサービスだし、アリかなとは思う。
だが、ヘビーユーザーというわけでもなく、思ったことやメモを残すのに使うぐらいなので、別にEvernote じゃないとダメというわけでもない。
テキスト主体で使っているので、ひとまず中身をテキストでエクスポートして、バックアップとして残すにしても、移行するにしても、ひとまずはテキストで残しておこうと思った。
※多分移行はしないで、無料枠の中で使う道を今は選びそう。どちらにしろテキスト形式で残すというのはやる。
自身で持っておきたいデータはプレーンテキストが1番管理が楽だし。

だが、残念なことにテキスト形式でのエクスポート機能はない。HTMLやPDF では取り出せるようだが。
また、evernote規格のXMLファイルを吐き出してバックアップも取れるらしい。

テキスト形式で出せないなら出せばいい、そう考える人間は多そうなので、evernoteのフォーラムを観覧していたら、これがビンゴだった。

discussion.evernote.com

しかもPHPスクリプト
PHPWordPressぐらいしか触らないので、興味津々にGithub覗いてみました。クールだね。

github.com


enex-dumpを早速使ってみる

まずはREADMEを読んでみた。
どうやら、Evernoteのエクスポートデータをテキストファイルに変換してくれるスクリプトみたいだ。

このスクリプトEvernoteエクスポートデータ(ENEX)を入力ファイルとして受け取って、指定したフォルダにプレーンテキストとしてノートを出力するんだ。すべてのHTML形式や添付は取り除くぜ。出力ファイルはノートのタイトルにちなんで命名するから、そこんとこよろしくな!ちなみにノートのタイトルはエクスポートしたテキストデータの一番最初の行にも含むからよ!このスクリプトを実行する前に、現在のディレクトリからの相対パスを設定してくれな!ちなみにデフォルトでは"My Notes.enex"っていう名前の入力ファイルを探すようにしているけど、ここらへんはオーバーライドするために追加パラメータを設定できるからよ!

ざっと説明文を翻訳(そうとうアバウトに)してみました。

というわけで早速やってみよう。

Evernoteのエクスポートデータ作成

https://help.evernote.com/hc/ja/articles/209005557-%E3%83%8E%E3%83%BC%E3%83%88%E3%82%84%E3%83%8E%E3%83%BC%E3%83%88%E3%83%96%E3%83%83%E3%82%AF%E3%82%92%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97-%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%9D%E3%83%BC%E3%83%88-%E3%81%BE%E3%81%9F%E3%81%AF%E5%BE%A9%E5%85%83-%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88-%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95help.evernote.com

上記を参考にMac版のEvernoteでエクスポートデータを作成。いちいち説明することもないほどに簡単。

  • Evernoteのメニューバー【ファイル】から【ノートをエクスポート...】を選択。
  • エクスポートデータの名前をつけて、保存ボタンを押す。

こんな感じ↓

f:id:shinshin86:20160629231713p:plain

次に上にリンク貼ったGitHubからソースを落としてきます。
ひとまず同じディレクトリにエクスポートデータと落としてきたソースのenex-dump.phpを置いて、下記コマンドを実行。
パラメータで指定のenexファイルをしている。

php enex-dump.php mynote.enex

これで、同階層にoutputというディレクトリが作成され、そこにテキスト化されたノートがはき出される。

f:id:shinshin86:20160629232034p:plain

こんな感じ。
このPHPスクリプトを使って、Evernote上のエクスポートデータを一気にテキストデータ化すれば、望んだことは一応出来そう。
ここらへんはちょっと試行錯誤してやってみますかね。
試行錯誤するまでもなく出来ましたので、ページ下部に追記としてやり方を記載しています。


ちなみ上のキャプチャ上の"最高ゲームリアクション"は何かというと、これら。
リアクション最高な奴らって、こっちまでテンション上がるし、ホント最高だよね!

youtu.be

youtu.be

追記

Evernoteの全データをテキストに書き出す方法としては、
Evernoteアプリ内で全てのノートを表示している状態にしてから
全データを選択した状態にして、(Macなら"command + a"などで)
上にも書いてある通り、メニューにある"ファイル" から "ノートをエクスポート..."を選択。
ファイル名を設定してエクスポートを実施。

次にそのファイルに対して、上記のPHPスクリプト実行すれば、
自動で生成された"output"ディレクトリ配下に
各ノートがテキストファイルで書き出されていきます。

全部のノートが書き出されているかは、
私はMac環境なので下記のコマンドで確認。

ls -1 output | wc -l

ところが、私の場合、全てのノートの件数と、
上記コマンドを打ったときの数値に差があり、
実際にコマンド実行時にエラーのようなものが出ていたので
何件かはテキスト抽出に失敗しているよう。

正しくはエラーではなく警告でした。先入観で書いてしまっていた。。
この警告の内容と解決法については下に追記します。といっても大したものではありませんが、自分への備忘録として。
なお、コンソールを見るとエラーなく全てのテキストは抽出されているようだったので、
ノートの件数に差異があるのは、別の要因かなと考えています。

警告内容と解決方法

以下、警告内容
見やすくするために、意図的に改行入れています。

Warning: strtotime(): It is not safe to rely on the system's timezone settings. 
You are *required* to use the date.timezone setting or the date_default_timezone_set() function.
In case you used any of those methods and you are still getting this warning,
you most likely misspelled the timezone identifier. We selected the timezone 'UTC' for now,
but please set date.timezone to select your timezone. in "このプログラムのパス"

警告にもある通り、タイムゾーンを設定することで解決。
コード内に下記の記述を追加することで警告がなくなりました。

date_default_timezone_set('Asia/Tokyo');

もしくは下記のやり方でもタイムゾーンを設定できるよう。(未確認)

qiita.com

時間を見つけてPHPにも触れていきたい。