Pyroaman helps you explore Roam Research databases with Python.
You need Python 3.6 or later to use Pyroaman.
Install and update using pip:
$ pip install -U pyroaman
First, you need the JSON export of a Roam database.
For this demo, we will use a public one: roamhacker
.
$ curl https://raw.githubusercontent.com/br-g/roam-public-db/main/json/roamhacker.json -o roamhacker.json
import pyroaman
db = pyroaman.load('roamhacker.json')
print(db)
Database (276 pages, 2397 blocks)
Let's query blocks that contain the word "agile":
some_blocks = db.lookup('agile')
print(some_blocks)
[Block (string: "Goal for myself: Fight desire to...", is_page: False, children: 1, links: 1, backlinks: 0),
Block (string: "Agile Note Taking", is_page: True, children: 0, links: 0, backlinks: 1),
Block (string: "[9] This example comes from Nas...", is_page: False, children: 0, links: 0, backlinks: 0)]
Get the text of a block (its string without images, references...):
print(some_blocks[0].text)
'Goal for myself: Fight desire to have the "perfect system". Better to use and iterate improvements, rather than wait for perfect system. And by the way, is there a perfect system? Agile Note Taking?? - sprint, try, iterate'
Get the children of a block:
print(some_blocks[0].children)
[Block (string: "Open organization: disorder with...", is_page: False, children: 0, links: 0, backlinks: 0)]
Get its links:
print(some_blocks[0].links)
[Block (string: "Agile Note Taking", is_page: True, children: 0, links: 0, backlinks: 1)]
Get backlinks:
print(some_blocks[1].backlinks)
[Block (string: "Goal for myself: Fight desire to...", is_page: False, children: 1, links: 1, backlinks: 0)]
Get block's metadata:
print(some_blocks[0].metadata)
{'edit-time': 1606399607792,
'refs': [{'uid': 'YAYZKdubo'}],
'uid': 'XP9lZauAg',
':block/refs': [{':block/uid': 'YAYZKdubo'}],
':create/user': {':user/uid': 'kfmqimzFiIOQwL1xgoBOApXxsup1'},
'create-time': 1599461612984,
':edit/user': {':user/uid': 'kfmqimzFiIOQwL1xgoBOApXxsup1'}}