Initial commit: Python library for Markdown note services

- Add MDAuth class for authentication and session management
- Add MDClient class for note operations (CRUD + export/search)
- Add CLI tool mdclient_cli.py for quick operations
- Support for CodiMD, HedgeDoc, and HackMD services
- Multi-endpoint API compatibility

Co-Authored-By: Claude Sonnet 4 <noreply@anthropic.com>
This commit is contained in:
2026-03-17 14:38:54 +08:00
commit 38b4bc5377
15 changed files with 1992 additions and 0 deletions

255
API.md Normal file
View File

@@ -0,0 +1,255 @@
# MDclient API 文件
## MDAuth
認證類,用於登入和管理會話。
### 建構函式
```python
MDAuth(base_url="https://codimd.lotimmy.com", cookie_file="key.conf")
```
**參數:**
- `base_url` (str): 伺服器位址
- `cookie_file` (str): Cookie 儲存檔案路徑
### 方法
#### login()
登入並儲存 Cookie。
```python
success = auth.login(email, password)
```
**參數:**
- `email` (str): 登入信箱
- `password` (str): 登入密碼
**回傳:**
- `bool`: 是否登入成功
#### test_cookie()
測試儲存的 Cookie 是否有效。
```python
is_valid = auth.test_cookie()
```
**回傳:**
- `bool`: Cookie 是否有效
#### load_cookie()
從檔案載入 Cookie。
```python
cookies = auth.load_cookie()
```
**回傳:**
- `dict` | `None`: Cookie 字典,檔案不存在時返回 None
---
## MDClient
客戶端類,提供所有筆記操作的 API。
### 建構函式
```python
MDClient(base_url="https://codimd.lotimmy.com", cookie_file="key.conf", email=None, password=None)
```
**參數:**
- `base_url` (str): 伺服器位址
- `cookie_file` (str): Cookie 檔案路徑
- `email` (str): 登入信箱(可選)
- `password` (str): 登入密碼(可選)
### 方法
#### list_notes()
列出所有筆記。
```python
notes = client.list_notes()
```
**回傳:**
- `list` | `None`: 筆記列表,失敗時返回 None
**筆記物件結構:**
```python
{
"id": "note_id",
"text": "筆記標題",
"time": 1234567890,
"tags": ["tag1", "tag2"],
"pinned": False
}
```
#### get_note()
取得筆記內容。
```python
note = client.get_note(note_id)
```
**參數:**
- `note_id` (str): 筆記 ID
**回傳:**
- `dict` | `None`: 筆記內容,失敗時返回 None
**筆記內容結構:**
```python
{
"id": "note_id",
"title": "筆記標題",
"content": "Markdown 內容",
"lastChangeAt": "2024-01-01T00:00:00.000Z",
"createdAt": "2024-01-01T00:00:00.000Z"
}
```
#### create_note()
建立新筆記。
```python
result = client.create_note(title, content="")
```
**參數:**
- `title` (str): 筆記標題
- `content` (str): Markdown 內容
**回傳:**
- `dict` | `None`: 建立結果,失敗時返回 None
**回傳結構:**
```python
{
"id": "new_note_id",
"url": "https://server.com/new_note_id"
}
```
#### delete_note()
刪除筆記。
```python
success = client.delete_note(note_id)
```
**參數:**
- `note_id` (str): 筆記 ID
**回傳:**
- `bool`: 是否刪除成功
#### export_note()
匯出筆記。
```python
content = client.export_note(note_id, format="md")
```
**參數:**
- `note_id` (str): 筆記 ID
- `format` (str): 匯出格式md, pdf, html, slides
**回傳:**
- `str` | `None`: 匯出的內容,失敗時返回 None
#### search_notes()
搜尋筆記。
```python
results = client.search_notes(query)
```
**參數:**
- `query` (str): 搜尋關鍵字
**回傳:**
- `list` | `None`: 符合的筆記列表
---
## 使用範例
### 完整工作流程
```python
from mdclient import MDAuth, MDClient
# 1. 登入
auth = MDAuth()
auth.login("user@example.com", "password")
# 2. 使用客戶端
client = MDClient()
# 3. 列出筆記
notes = client.list_notes()
# 4. 建立筆記
result = client.create_note("新筆記", "# 內容")
# 5. 取得筆記
note = client.get_note(result['id'])
# 6. 匯出筆記
content = client.export_note(result['id'])
# 7. 刪除筆記
client.delete_note(result['id'])
```
### 錯誤處理
```python
from mdclient import MDClient
client = MDClient()
# 檢查回傳值
notes = client.list_notes()
if notes is None:
print("取得筆記失敗")
else:
for note in notes:
print(note['text'])
# 檢查操作結果
result = client.create_note("標題", "內容")
if result:
print(f"建立成功: {result['id']}")
else:
print("建立失敗")
```
### 自訂伺服器
```python
from mdclient import MDAuth, MDClient
# 連接到不同的伺服器
auth = MDAuth(base_url="https://demo.hedgedoc.org")
auth.login("user@example.com", "password")
client = MDClient(base_url="https://demo.hedgedoc.org")
notes = client.list_notes()
```