Metadata-Version: 2.5
Name: funblog
Version: 0.6.0
Summary: 本地笔记（Markdown/Jupyter Notebook）扫描工具：按目录结构建立分类-文章树并记录到本地 SQLite，再通过 XML-RPC 批量发布/更新到 Typecho 博客
Project-URL: Organization, https://github.com/farfarfun
Project-URL: Repository, https://github.com/farfarfun/funblog
Project-URL: Releases, https://github.com/farfarfun/funblog/releases
Author-email: 牛哥 <niuliangtao@qq.com>, farfarfun <farfarfun@qq.com>
Maintainer-email: 牛哥 <niuliangtao@qq.com>, farfarfun <farfarfun@qq.com>
License-Expression: MIT
License-File: LICENSE
Requires-Python: >=3.10
Requires-Dist: farlog>=1.1.8
Requires-Dist: fundata>=1.0.4
Requires-Dist: nbconvert>=7.0
Requires-Dist: nbformat>=5.9
Requires-Dist: tqdm>=4.65
Description-Content-Type: text/markdown

# funblog

本地笔记发布工具：把本地目录下的 Markdown / Jupyter Notebook（`.md` / `.ipynb`）文件按目录结构扫描成「分类-文章」树，记录到本地 SQLite，再通过 XML-RPC（metaWeblog 协议）批量发布/更新到 [Typecho](https://typecho.org/) 博客。仓库里还带了一个尚未实现的 Yuque（语雀）发布模块的空壳。

## 安装

```bash
pip install funblog
```

从源码安装（开发用）：

```bash
git clone https://github.com/farfarfun/funblog.git
cd funblog
pip install -e .
```

运行时依赖 `fundata`（提供 `SqliteTable` 等基础能力）、`nbformat`、`nbconvert`（用于解析 `.ipynb`）、`farlog`、`tqdm`，均已写入 `pyproject.toml`。`funbuild` 只是发布本包时用到的构建工具，不是运行时依赖，无需单独安装即可使用本包。

## 用法示例

```python
from funblog.publish.core import BlogManage

# path_root: 本地笔记根目录，子目录会被当作分类，.md/.ipynb 文件会被当作文章
blog = BlogManage(path_root="/path/to/notes", db_path="/path/to/blog.db")

# 1. 扫描本地文件，写入分类表/文章表
blog.local_scan()

# 2. 发布到 Typecho（通过 XML-RPC）
blog.publish_typecho(
    rpc_url="https://your-blog.com/action/xmlrpc",
    username="your-username",
    password="your-password",
)
```

`BlogManage` 内部用 `BlogCategoryDB` / `BlogPageDB`（均基于 SQLite）记录分类和文章的本地 id 与 Typecho 端 id 的对应关系，重复运行 `local_scan()` + `publish_typecho()` 可以做到增量更新：已发布过的文章会走 `edit_page`，未发布过的走 `new_page`。

底层的 Typecho 客户端 `funblog.blog.typecho.Typecho` 封装了 metaWeblog / WordPress 兼容的 XML-RPC 接口（文章、页面、分类、标签、附件、评论），可以单独使用：

```python
from funblog.blog.typecho import Typecho

typecho = Typecho(
    rpc_url="https://your-blog.com/action/xmlrpc",
    username="your-username",
    password="your-password",
)
print(typecho.get_categories())
```

## 已知局限

- Yuque（语雀）发布模块（`funblog/blog/yuque/`）目前是空文件，功能未实现。

---

## 关于 farfarfun

[farfarfun](https://github.com/farfarfun) 是一个专注于实用工具库的开源组织，
涵盖云存储、数据处理、AI、多媒体与开发工具链等方向。

- 🏠 组织主页：<https://github.com/farfarfun>
- 📦 PyPI：<https://pypi.org/user/niuliangtao/>
- 📧 联系：farfarfun@qq.com

本项目基于 [MIT](LICENSE) 协议开源。
