synoter
synoter copied to clipboard
A node library to get data from Synology NoteStation.
Synoter
Synoter
is designed for getting data from Synology NoteStation
.
This article describes how NoteStation works in DSM 6. For now I dont know what's going on in DSM 7, I still use DSM 6.
How it works?
Synology NoteStation
is an official note-taking app for Synology NAS system DSM
.
Unfortunately, unlinke other apps such as AudioStaion
or FileStation
, there is no official API of Note Station for further development, so you just can't customize your NoteStation for your own purpose.
After some rearch, I have found something useful:
-
NoteStation stores notes meta data to
PostgreSQL
(in DSM) for indexing. -
Then NoteStation adds some FTS (full text searching) tokens to these indexing data and copies them to a single
sqlite3
file that is stored in/<volume_name>/@appstore/NoteStation/db/fts.db
. -
The real stuffs are stored in
/<volume_name>/@SynoDrive/NoteStation
. Each folder holds a note, and the name of folder is theobject_id
in metadata.
So if you want to take something out of the NoteStation, the only thing we need to do is:
-
Find out all notes that are tagged with "blog" (or anything you like) from
fts.db
and get theirobject_id
. -
Read notes from
/<volume_name>/@SynoDrive/NoteStation/<object_id>
by usingobject_id
from above.
And now we've got everything we need.
Something you might know.
Synoter
is a node.js package written in Typescript, so you have to know how to deal with Node.js.
If your NAS is running node.js v4, you have to import both babel-polyfill
and babel-register
in your own application otherwise sqlite
will keep throwing error.
For Node v8 and v12, everything would be fine.
Quick Start.
-
Git clone and copy these files to your own project.
-
Rock n' roll.
// In your app.
import { getAllNotesWithTag } from './synoter/src/index'
try {
const notesData = await getAllNotesWithTag('Blog', 'volume1') // Get notes tagged with "Blog" from volume1. Replace "volume1" with where your NoteStation is installed on.
console.log(notesData) //INoteData[]. This is an array that holds all note data.
} catch (error) {
console.error('Something went wrong:', error)
}
You can check example codes in example
folder.
License
MIT.