# typecho接口api
**Repository Path**: ximami/typechoapi
## Basic Information
- **Project Name**: typecho接口api
- **Description**: Typecho 接口 API,包括发布文章、搜索文章、获取文章、备份数据、获取文章评论、获取网站信息、获取分类、获取标签等接口,持续更新中……
- **Primary Language**: PHP
- **License**: GPL-2.0
- **Default Branch**: master
- **Homepage**: https://lwcat.cn
- **GVP Project**: No
## Statistics
- **Stars**: 5
- **Forks**: 0
- **Created**: 2024-12-26
- **Last Updated**: 2025-05-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# typechoapi
Typecho 接口 API,包括发布文章、搜索文章、获取文章、备份数据、获取文章评论、获取网站信息、获取分类、获取标签等接口,持续更新中……
## 使用教程
上传 `api.php` 文件到 Typecho 博客(只支持正式版1.2.1,其他版本不支持,包括开发版本)根目录,使用前请务必修改自定义 `token`(为了安全考虑,不修改无法使用接口)。
## 近期新增
搜索文章、获取分类、获取标签、备份数据、删除备份
## 项目地址
- [GitHub 地址](https://github.com/smcloudcat/typechoapi)
- [Gitee 地址](https://gitee.com/ximami/typechoapi)
---
## 接口文档
### [文档地址](https://lwcat.cn/markdown/typechoapi/)
### 1. 发布文章 (release)
#### 请求方法
`POST/GET`
#### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|------------------------------------|
| token | string | 是 | 请求的认证 Token,必填,正确的 token |
| title | string | 是 | 文章标题 |
| content| string | 是 | 文章内容 |
| slug | string | 否 | 文章的 URL slug (可选) |
| tags | string | 否 | 文章标签,多个标签用逗号分隔 (可选) |
#### 示例请求
```bash
POST https://example.com/api.php
Content-Type: application/json
{
"method": "release",
"token": "123456",
"title": "文章标题",
"content": "文章内容",
"slug": "article-slug",
"tags": "PHP,Typecho"
}
```
#### 响应示例
成功响应:
```json
{
"success": true,
"message": "文章发布成功",
"cid": 123
}
```
失败响应:
```json
{
"success": false,
"message": "无效的 token"
}
```
---
### 2. 获取文章 (getarticle)
#### 请求方法
`POST/GET`
#### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|----------|--------|------|-----------------------------------------|
| token | string | 是 | 请求的认证 Token,必填,正确的 token |
| page | int | 否 | 页码,默认为 1 |
| pageSize | int | 否 | 每页数量,默认为 10,最大值为 50 |
#### 示例请求
```bash
GET https://example.com/api.php?method=getarticle&token=123456&page=1&pageSize=10
```
#### 响应示例
成功响应:
```json
{
"success": true,
"data": [
{
"cid": "134",
"title": "测试标题",
"slug": "测试",
"created": "2024-12-25 22:26:14",
"authorId": "1",
"tags": [],
"summary": "测试内容..."
},
{
"cid": "132",
"title": "通过c计算一元二次方程的根",
"slug": "132",
"created": "2024-12-08 23:45:08",
"authorId": "1",
"tags": [],
"summary": "```c\r\n#include \r\n#include \r\n\r\nvoid xiao(int a,int b,int c){\r\n int d;\r\n float real,noreal;\r\n d=b*b-4.0*a*c;\r\n real=(-b)\/2*a;\r\n noreal=sqrt(-(b*b-4*a*c));\r\n printf(\"这个方程有两个复数根:x1=%f+%f..."
}
],
"pagination": {
"total": "65",
"page": 1,
"pageSize": 2
}
}
```
---
### 3. 获取文章评论 (getcomments)
#### 请求方法
`POST/GET`
#### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|------|--------|------|---------------------------------------|
| token| string | 是 | 请求的认证 Token,必填,正确的 token |
| cid | int | 是 | 文章 ID |
#### 示例请求
```bash
GET https://example.com/api.php?method=getcomments&token=123456&cid=123
```
#### 响应示例
成功响应:
```json
{
"success": true,
"data": [
{
"coid": 456,
"author": "评论者",
"content": "这是评论内容",
"created": "2024-12-26 10:05:00",
"parent": 0
}
]
}
```
---
### 4. 获取网站信息 (getbloginfo)
#### 请求方法
`POST/GET`
#### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|------|--------|------|---------------------------------------|
| token| string | 是 | 请求的认证 Token,必填,正确的 token |
#### 示例请求
```bash
GET https://example.com/api.php?method=getbloginfo&token=123456
```
#### 响应示例
成功响应:
```json
{
"success": true,
"data": {
"title": "CC的小窝",
"description": "CC的小窝,记录生活的点点滴滴,分享自己的学习过程和心得。",
"keywords": "小猫咪博客,小猫咪blog,CC的小窝",
"theme": "handsome",
"siteUrl": "https:\/\/lwcat.cn",
"timezone": "28800",
"charset": "UTF-8",
"postCount": "65"
}
}
```
---
### 5. 删除文章 (delete)
#### 请求方法
`POST`
#### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|-------------------------------------|
| token | string | 是 | 请求的认证 Token,必填,正确的 token |
| cid | int | 是 | 要删除的文章 ID |
#### 示例请求
```bash
POST https://example.com/api.php
Content-Type: application/json
{
"method": "delete",
"token": "123456",
"cid": 123
}
```
#### 响应示例
成功响应:
```json
{
"success": true,
"message": "文章删除成功"
}
```
失败响应:
```json
{
"success": false,
"message": "无效的 token"
}
```
---
## 错误响应
所有接口都会返回如下格式的错误响应:
```json
{
"success": false,
"message": "错误信息"
}
```
### 错误码
| 错误信息 | 描述 |
|---------------|---------------------------------------|
| `请先到文件设置 token` | Token 未设置或文件为空 |
| `无效的 token` | 请求中携带的 token 不匹配或无效 |
| `文章ID不能为空` | 请求缺少 `cid` 或 `cid` 为无效值 |
| `不支持的请求方法` | 请求方法不支持 |
| `标题和内容不能为空` | 发布文章时,标题和内容不能为空 |
---
### 6. 备份管理
#### 6.1 数据库备份 (backup_db)
#### 6.2 文件备份 (backup_files)
#### 6.3 完整备份 (backup_all)
##### 请求方法
`GET/POST`
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|------------------------------------|
| token | string | 是 | 请求的认证 Token |
| method | string | 是 | 备份类型:backup_db/backup_files/backup_all |
##### 示例请求
```bash
GET https://example.com/api.php?method=backup_db&token=123456
```
##### 响应示例
```json
{
"success": true,
"message": "备份完成",
"download_links": [
{
"name": "backup_202308201530_abcd1234.sql",
"url": "https://example.com/backups/backup_202504201530_abcd1234.sql"
}
]
}
```
---
### 7. 标签管理
#### 7.1 获取全部标签 (getalltags)
##### 请求方法
`GET`
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|---------------|
| token | string | 是 | 认证 Token |
##### 响应示例
```json
{
"success": true,
"data": [
{"name": "PHP", "slug": "php"},
{"name": "教程", "slug": "tutorial"}
]
}
```
---
### 8. 分类管理
#### 8.1 获取全部分类 (getallcategories)
##### 请求方法
`GET`
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|---------------|
| token | string | 是 | 认证 Token |
##### 响应示例
```json
{
"success": true,
"data": [
{"name": "技术文章", "slug": "tech", "post_count": 15},
{"name": "生活随笔", "slug": "life", "post_count": 8}
]
}
```
#### 8.2 获取分类文章 (getcategoryposts)
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|----------|--------|------|------------------------------|
| token | string | 是 | 认证 Token |
| category | string | 是 | 分类名称或缩略名 |
| page | int | 否 | 页码(默认1) |
| pageSize | int | 否 | 每页数量(默认10,最大100) |
##### 响应示例
```json
{
"success": true,
"category_info": {
"name": "技术文章",
"slug": "tech",
"total_posts": 25
},
"data": [
{
"cid": 123,
"title": "PHP编程技巧",
"slug": "php-tips",
"created": "2025-04-20 10:30:00",
"authorId": 1,
"tags": ["PHP", "后端"],
"summary": "本文分享10个实用的PHP编程技巧..."
}
],
"pagination": {
"total": 25,
"page": 1,
"pageSize": 10,
"totalPages": 3
}
}
```
---
### 9. 文章搜索 (search)
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|----------|--------|------|------------------------------|
| token | string | 是 | 认证 Token |
| keyword | string | 是 | 搜索关键词 |
| page | int | 否 | 页码(默认1) |
| pageSize | int | 否 | 每页数量(默认10,最大100) |
##### 响应示例
```json
{
"success": true,
"keyword": "API",
"data": [
{
"cid": 123,
"title": "TypechoAPI开发指南",
"highlight_title": "Typecho API开发指南",
"slug": "typecho-api",
"created": "2025-04-20 14:30:00",
"authorId": 1,
"tags": ["教程", "开发"],
"summary": "本文详细介绍如何开发Typecho API接口...",
"highlight_summary": "本文详细介绍如何开发Typecho API接口..."
}
],
"pagination": {
"total": 5,
"page": 1,
"pageSize": 10,
"totalPages": 1
}
}
```
---
### 10. 删除备份 (delete_backups)
##### 请求方法
`POST`
##### 请求参数
| 参数 | 类型 | 必填 | 说明 |
|--------|--------|------|---------------|
| token | string | 是 | 认证 Token |
##### 响应示例
```json
{
"success": true,
"message": "已删除所有备份文件"
}
```
---
## 错误码(新增)
| 错误信息 | 描述 |
|---------------------|-------------------------------|
| `分类不存在` | 指定的分类名称/缩略名不存在 |
| `搜索关键词不能为空` | 未提供搜索关键词 |
| `数据库备份失败` | 执行数据库备份时出现错误 |
---
## 其他说明
1. **Token 设置**
Token 存储在文件中的第 9 行,请按要求修改,禁止为 "123456",确保文件中存在有效的 token,且在请求中正确传递。
如果文件为空,接口将返回 `请先到文件设置 token` 错误信息。为了你的网站安全,请设置安全的 token 并且妥善保管!
2. **分页与限制**
获取文章列表的接口 (`getarticle`) 支持分页,`page` 和 `pageSize` 参数允许控制返回数据的页码和每页数量。`pageSize` 最大为 50。
3. **错误处理**
所有接口都会返回标准的错误格式,确保你能够捕获并处理错误信息。
4. **备份管理注意事项**
- 备份目录位于 `/backups/` 需要777写权限,可在文件中修改地址(建议修改)
- 建议在服务器配置禁止直接访问备份目录
- 大文件备份建议设置 `set_time_limit(0)`,否则容易出现超时问题,尤其是把图片文件都放在博客服务器中的
5. **搜索功能优化建议**
- 在MySQL中为contents表创建全文索引
```sql
CREATE FULLTEXT INDEX idx_search ON typecho_contents(title, text);
```
- 中文搜索建议使用MySQL 5.7+的ngram分词器
6. **分类文章排序逻辑**
- 默认按创建时间倒序排列
- 可通过修改`order`参数实现不同排序方式:
```php
->order($table.'.created', Typecho_Db::SORT_DESC) // 修改此处排序条件
```
---
## 关于项目
最近在搞机器人,就顺手写了这个,接口目前还不多,持续更新中。如果在使用过程中发现问题,欢迎反馈 [yuncat@email.lwcat.cn](mailto:yuncat@email.lwcat.cn)