mcpField
E
evernote-data-handling

evernote-data-handling

github.com/jeremylongshoreデータ・データベース2.9k39 回インストール2 日前に更新
リポジトリ

evernote-data-handling について

Evernote データの処理を支援するスキルで、ローカル保存、ENML 変換、添付ファイル、同期、エクスポートを扱います。Evernote コンテンツのデータ処理フローやローカルミラーを構築する開発者向けです。

主な機能

  1. 01Evernote データスキーマの設計
  2. 02ENML のテキスト・HTML 変換
  3. 03添付ファイルの保存とハッシュ検証
  4. 04USN による差分同期
  5. 05ENEX、JSON、Markdown へのエクスポート

活用シーン

  1. 01ノートのローカルデータベースへのミラーリング
  2. 02ENML コンテンツの変換
  3. 03ノートブックのノートを Markdown に出力
  4. 04添付ファイルとノート変更の同期

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/jeremylongshore/tons-of-skills-marketplace --skill evernote-data-handling

インストール後、Claude Code で/evernote-data-handlingを入力して読み込まれたか確認します。

同梱ファイルreferences/implementation-guide.md

詳細

Evernote データの取り扱い

概要

ENML コンテンツの処理、添付ファイルの管理、ローカルデータベースとの同期、ENEX のエクスポート/インポートなど、Evernote データを取り扱う際のベストプラクティスです。

前提条件

  • Evernote のデータモデル(ノート、ノートブック、タグ、リソース)の理解
  • ローカルストレージ用のデータベース(SQLite、PostgreSQL など)
  • 添付ファイル用のファイルストレージ

手順

ステップ 1:データスキーマの設計

Evernote のデータモデルを反映したローカルデータベーススキーマを設計します。主なテーブルは、notes(guid、title、content、notebookGuid、created、updated、USN)、notebooks(guid、name、stack)、tags(guid、name)、resources(guid、noteGuid、mime、hash、size)です。差分同期のために、更新シーケンス番号(USN)を追跡します。

CREATE TABLE notes (
  guid TEXT PRIMARY KEY,
  title TEXT NOT NULL,
  content TEXT,
  notebook_guid TEXT REFERENCES notebooks(guid),
  created BIGINT,
  updated BIGINT,
  usn INTEGER DEFAULT 0
);
ステップ 2:ENML コンテンツの処理

ENML を解析してプレーンテキストを抽出(タグを除去)したり、HTML に変換(<en-note>を<body>に置き換え、<en-media>を<img>/<a>タグに解決)したり、Markdown に変換したりします。API に送信する前に、必須宣言や禁止要素を確認して ENML を検証します。

function enmlToPlainText(enml) {
  return enml
    .replace(/<\?xml[^>]*\?>/g, '')
    .replace(/<!DOCTYPE[^>]*>/g, '')
    .replace(/<[^>]+>/g, ' ')
    .replace(/\s+/g, ' ')
    .trim();
}
ステップ 3:リソース(添付ファイル)の処理

noteStore.getResource(guid, withData, ...)を使ってリソースをダウンロードします。バイナリデータは、ファイル名に MD5 ハッシュを使用してローカルに保存します。適切なコンテンツタイプで配信できるよう、MIME タイプを記録します。整合性検証のためにハッシュを計算します。

ステップ 4:同期データマネージャー

getSyncState()を使って現在のサーバー USN を取得し、getSyncChunk()を使って前回の同期以降の変更を取得する、差分同期を実装します。チャンクはノートブック、タグ、ノート、リソースの順に処理します。

const syncState = await noteStore.getSyncState();
if (syncState.updateCount > lastSyncUSN) {
  const chunk = await noteStore.getSyncChunk(lastSyncUSN, 100, true);
  // Process chunk.notebooks, chunk.tags, chunk.notes, chunk.resources
}
ステップ 5:データのエクスポート

ノートを ENEX(Evernote の XML エクスポート形式)、JSON、または Markdown にエクスポートします。ENEX はリソースを含むノートの完全な構造を保持し、Evernote へのインポートにも対応しています。

完全なデータスキーマ、同期マネージャー、ENML プロセッサー、エクスポートの実装については、実装ガイドを参照してください。

出力

  • ローカルの Evernote データストレージ用 SQL スキーマ
  • ENML からテキストおよび HTML へのコンバーター
  • リソースのダウンロードおよびローカルストレージマネージャー
  • USN の追跡を利用する差分同期エンジン
  • ENEX、JSON、Markdown のエクスポートユーティリティ

エラー処理

エラー原因解決策
BAD_DATA_FORMAT更新時の ENML 形式の不備API 呼び出しの前に DTD チェックで ENML を検証します
QUOTA_REACHEDアップロード制限の超過ノートを作成する前にuser.accounting.uploadedを確認します
DATA_CONFLICT前回の読み取り後にノートが変更されたGUID でノートを再取得し、変更をマージします
同期チャンクの欠落USN 範囲の取りこぼしUSN 0 から全件同期をリクエストします

リソース

次のステップ

エンタープライズ機能については、evernote-enterprise-rbacを参照してください。

例

ローカルミラー:差分同期を使って、すべてのノートをローカルの SQLite データベースに同期します。リソースは MD5 ハッシュをキーとしてディスクに保存します。ローカルミラーを使用すると、API を呼び出さずに全文検索できます。

Markdown エクスポート:ノートブック内のすべてのノートを Markdown ファイルに変換し、ノートブックスタックのフォルダー構造を保持して、添付ファイルをassets/ディレクトリに保存します。

コメント