uniapi 是一个基于 Go 语言编写的多合一第三方服务统一集成包。它封装了多种常用互联网服务与工具的 API,提供了简洁一致的调用接口,旨在帮助开发者快速集成各种外部能力,免去重复造轮子的烦恼。
本库集成了以下 10 种 核心服务:
| 模块名称 | 功能描述 | 核心方法 |
|---|---|---|
baidupan |
百度网盘 API:支持文件上传、下载、删除及基于哈希的键值存储(CAS)。 | Init, Upload, Download, PutObject, GetObject, HasObject, GetFileId |
bilibili |
哔哩哔哩 API:支持获取关注列表、取消关注等用户社交关系管理。 | Init, GetAllFollowings, CancelFollow |
edgetts |
微软 Edge 文本转语音:调用 Edge TTS 生成自然语言语音,返回 WAV 字节数据。 | EdgeTTS |
flomo |
Flomo 笔记同步:支持增量同步与拉取 Flomo 上的 Memos 笔记。 | Init, UpdatedMemo |
googletrans |
谷歌翻译:提供免费且免 Key 的中英互译服务。 | TranslateZhToEn, TranslateEnToZh |
larkbot |
飞书/Lark 机器人:支持向飞书机器人、群聊或指定用户发送文本消息。 | Init, Send, SendTo |
monica |
Monica AI 助手:支持 Monica 的 Chat Completion 接口,支持主流大模型(如 Claude 3.5 / 4.5 等)。 | Init, ChatCompletion |
mysql |
MySQL & GORM 封装:包含 GORM 初始化、自动迁移、SQL 追踪及高效批量插入。 | Init, Connect, BatchInsert, SetTraceFn |
playwright |
Playwright 浏览器自动化:基于 Playwright 动态爬取网页 Cookie(如百度网盘登录凭证)或 Headers。 | GetCookies, GetHeader |
youtube |
YouTube 视频工具:解析并下载 YouTube 视频的自动生成字幕(Captions)。 | DownloadAutoCaption |
uniapi/
├── example/ # 完整的使用示例代码
│ └── main.go # 包含上述所有服务调用的 Demo
├── service/ # 核心服务模块目录
│ ├── baidupan/ # 百度网盘模块
│ ├── bilibili/ # 哔哩哔哩模块
│ ├── edgetts/ # 微软 Edge TTS 语音合成模块
│ ├── flomo/ # Flomo 笔记模块
│ ├── googletrans/ # 谷歌翻译模块
│ ├── larkbot/ # 飞书机器人模块
│ ├── monica/ # Monica AI 助手接口
│ ├── mysql/ # MySQL & GORM 数据库工具包
│ ├── playwright/ # Playwright 浏览器自动化工具
│ └── youtube/ # YouTube 工具包
├── utils/ # 通用公共工具库
│ ├── json.go # 不对 HTML 进行转义的 JSON 序列化工具
│ ├── req.go # 自带重试与 Proxy 支持的 HTTP 请求工具
│ └── retry.go # 通用重试器
├── go.mod # 依赖管理文件
└── go.sum # 依赖版本哈希文件
在使用本项目之前,请确保您的本地环境已安装了 Go (>= 1.25.0)。
可以使用以下命令拉取本项目的依赖:
go mod tidy
⚠️ 注意:部分模块(如playwright)需要本地安装 Playwright 的驱动程序。在第一次使用前,您可能需要执行 Playwright 的安装步骤:go run github.com/playwright-community/playwright-go/cmd/playwright@latest install --with-deps
在 example/main.go 中提供了所有服务的调用示例。以下是几个典型模块的使用方法:
package main
import (
"context"
"fmt"
"os"
"github.com/lincaiyong/uniapi/service/edgetts"
)
func main() {
ctx := context.Background()
// 合成语音,返回 WAV 格式的字节流
wavBytes, err := edgetts.EdgeTTS(ctx, "你好,欢迎使用 UniAPI!")
if err != nil {
fmt.Printf("TTS 合成失败: %v\n", err)
return
}
_ = os.WriteFile("output.wav", wavBytes, 0644)
fmt.Println("语音已保存到 output.wav")
}package main
import (
"context"
"fmt"
"github.com/lincaiyong/uniapi/service/googletrans"
)
func main() {
ctx := context.Background()
// 中文翻译为英文
enText, _ := googletrans.TranslateZhToEn(ctx, "书籍是人类进步的阶梯。")
fmt.Println(enText) // Output: Books are the ladder of human progress.
// 英文翻译为中文
zhText, _ := googletrans.TranslateEnToZh(ctx, enText)
fmt.Println(zhText) // Output: 书籍是人类进步的阶梯。
}package main
import (
"context"
"fmt"
"os"
"github.com/lincaiyong/uniapi/service/monica"
)
func main() {
// 初始化 Monica Session
monica.Init(os.Getenv("MONICA_SESSION_ID"))
ctx := context.Background()
// 流式获取 AI 对话结果
_, err := monica.ChatCompletion(ctx, monica.ModelClaude45Sonnet, "请讲一个冷笑话", func(chunk string) {
fmt.Print(chunk) // 实时打印流式输出
})
if err != nil {
fmt.Printf("调用 Monica 失败: %v\n", err)
}
fmt.Println()
}本库在 utils 下还提供了一些极其方便的底层实用工具:
utils.DoRequest: 内置了代理读取(读取系统环境变量HTTP_PROXY/HTTPS_PROXY)及 3 次自动重试机制的 HTTP 请求方法。utils.MarshalNoEscape/utils.MarshalIndentNoEscape: 默认不对<、>、&等 HTML 字符进行转义的 JSON 序列化工具,非常适合用于处理第三方接口请求体的拼接。utils.Retry: 简单的流程重试器,支持在发生错误时多次尝试执行指定函数。
本项目采用 MIT License 开源协议。