- 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>
256 lines
4.1 KiB
Markdown
256 lines
4.1 KiB
Markdown
# 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()
|
||
```
|