# API 文档 本文档详细描述了饭否 MCP 服务器提供的所有工具函数。 ## 认证方式 ### 环境变量方式(PyPI 包) 使用环境变量传递认证信息: - `FANFOU_API_KEY` - 饭否应用的 API Key - `FANFOU_API_SECRET` - 饭否应用的 API Secret - `FANFOU_OAUTH_TOKEN` - OAuth Token(推荐) - `FANFOU_OAUTH_TOKEN_SECRET` - OAuth Token Secret(推荐) - `FANFOU_USERNAME` - 饭否用户名(首次使用) - `FANFOU_PASSWORD` - 饭否密码(首次使用) ### HTTP 头方式(SSE 服务) 使用 HTTP 头传递认证信息,支持多用户隔离: - `X-Fanfou-Api-Key` - 饭否应用的 API Key - `X-Fanfou-Api-Secret` - 饭否应用的 API Secret - `X-Fanfou-OAuth-Token` - OAuth Token(推荐) - `X-Fanfou-OAuth-Token-Secret` - OAuth Token Secret(推荐) - `X-Fanfou-Username` - 饭否用户名(首次使用) - `X-Fanfou-Password` - 饭否密码(首次使用) ## 认证相关 ### generate_oauth_token 生成 OAuth Token **功能:** - 使用用户名密码生成 OAuth Token - 用于后续免密登录,避免重复输入用户名密码 **前提条件:** - 环境变量方式:需要设置 `FANFOU_USERNAME` 和 `FANFOU_PASSWORD` 环境变量 - HTTP 头方式:需要传递 `X-Fanfou-Username` 和 `X-Fanfou-Password` 头部 **返回:** - 包含 OAuth Token 信息的字典 - 控制台会显示详细的 Token 信息和使用说明 ## 时间线相关 ### get_home_timeline 获取当前用户首页关注用户及自己的饭否时间线 **功能:** - 调用饭否 API 的 /statuses/home_timeline.json 接口获取当前用户的首页时间线 - 包含用户关注的所有人的最新消息 - 注:通常用户询问「我的饭否」时,指的是该时间线,除非用户明确指出「某个用户的饭否」 **参数:** - `count` (int, 可选): 获取数量,默认 5 条 - `max_id` (str, 可选): 返回列表中内容最新 ID,用于分页获取更早的内容 **返回:** - 首页时间线列表,包含以下字段: - `饭否内容`: 饭否消息内容(HTML 格式) - 转发:以「转@」开头,后跟用户链接,如 `转@kingcos`,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 - 话题:以「#」包围,如 `#正在播放#`,其中 q/ 后面的是话题名,一条饭否可能有多个话题 - 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - `发布 ID`: 消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布者`: 发布者的用户名 - `发布者 ID`: 发布者的用户 ID - `图片链接`: 如果包含图片,则提供图片链接 ### get_user_timeline 根据用户 ID 获取某个用户发表内容的时间线 **功能:** - 调用饭否 API 的 /statuses/user_timeline.json 接口获取指定用户的时间线 - 当提供搜索关键词时,会调用 /search/user_timeline.json 接口进行搜索 **参数:** - `user_id` (str, 可选): 用户 ID,如果为空则获取当前用户时间线 - `max_id` (str, 可选): 返回列表中内容最新 ID,用于分页获取更早的内容 - `count` (int, 可选): 获取数量,默认 5 条 - `q` (str, 可选): 搜索关键词,如果为空则获取普通用户时间线;如果不为空则搜索该用户包含该关键词的消息 **返回:** - 用户时间线列表,包含以下字段: - `饭否内容`: 饭否消息内容(HTML 格式) - 转发:以「转@」开头,后跟用户链接,如 `转@kingcos`,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 - 话题:以「#」包围,如 `#正在播放#`,其中 q/ 后面的是话题名,一条饭否可能有多个话题 - 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - `发布 ID`: 消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布者`: 发布者的用户名 - `发布者 ID`: 发布者的用户 ID - `图片链接`: 如果包含图片,则提供图片链接 ### get_public_timeline 获取公开时间线 **功能:** - 调用饭否 API 的 /statuses/public_timeline.json 接口获取饭否全站最新的公开消息 - 这些是所有用户可见的公开饭否内容 - 当提供搜索关键词时,会调用 /search/public_timeline.json 接口进行搜索 **参数:** - `count` (int, 可选): 获取数量,默认 5 条 - `max_id` (str, 可选): 返回列表中内容最新 ID,用于分页获取更早的内容 - `q` (str, 可选): 搜索关键词,如果为空则获取普通公开时间线;如果不为空则搜索包含该关键词的公开消息 **返回:** - 公开时间线列表,包含以下字段: - `饭否内容`: 饭否消息内容(HTML 格式) - 转发:以「转@」开头,后跟用户链接,如 `转@kingcos`,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 - 话题:以「#」包围,如 `#正在播放#`,其中 q/ 后面的是话题名,一条饭否可能有多个话题 - 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - `发布 ID`: 消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布者`: 发布者的用户名 - `发布者 ID`: 发布者的用户 ID - `图片链接`: 如果包含图片,则提供图片链接 ## 用户和内容相关 ### get_user_info 获取用户信息 **功能:** - 调用饭否 API 的 /users/show.json 接口获取指定用户的详细信息 - 如果 user_id 为空,则获取当前登录用户的信息 **参数:** - `user_id` (str, 可选): 用户 ID,如果为空则获取当前用户信息 **返回:** - 用户信息字典,包含以下字段: - `用户 ID`: 用户的唯一标识符 - `用户名`: 用户名 - `位置`: 用户所在位置 - `性别`: 用户性别 - `生日`: 用户生日 - `描述`: 用户个人描述 - `头像`: 用户头像链接 - `链接`: 用户个人网站链接 - `是否加锁`: 账号是否受保护 - `粉丝数`: 被关注数量 - `朋友数`: 互相关注数量 - `收藏数`: 收藏的消息数量 - `发布数`: 发布的消息数量 - `照片数`: 发布的照片数量 - `是否关注`: 当前用户是否关注该用户 - `注册时间`: 账号注册时间 - `最新状态`: 用户最新发布的消息信息(包含发布时间、发布 ID、发布内容) ### get_status_info 获取某条饭否内容的具体信息 **功能:** - 调用饭否 API 的 /statuses/show/id.json 接口获取指定饭否内容的详细信息 **参数:** - `status_id` (str, 必需): 饭否内容的 ID **返回:** - 饭否内容的详细信息字典,包含以下字段: - `饭否内容`: 消息文本内容(HTML 格式) - 转发:以「转@」开头,后跟用户链接,如 `转@kingcos`,其中 href 中的是用户 ID,inner Text 是被转发用户的显示名称,一条饭否可能有多个转发 - 话题:以「#」包围,如 `#正在播放#`,其中 q/ 后面的是话题名,一条饭否可能有多个话题 - 审核状态:如果内容末尾显示「【审核中】」,表示该内容正在审核中 - `发布 ID`: 消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布者`: 发布者的显示名称 - `发布者 ID`: 发布者的用户 ID - `是否收藏`: 当前用户是否收藏了该消息 - `是否是自己`: 是否是当前用户发布的消息 - `发布位置`: 消息发布的地理位置 - `回复信息`: 如果是回复消息,包含被回复的状态 ID、用户 ID 和用户名 - `图片链接`: 如果包含图片,则提供图片链接 ## 互动相关 ### manage_favorite 管理饭否内容的收藏状态 **功能:** - 调用饭否 API 的 /favorites/create/id.json 或 /favorites/destroy/id.json 接口 - 可以收藏或取消收藏指定的饭否内容 - 内置二次确认机制,防止误操作 - **重要:AI助手不能自动确认操作,必须等待用户明确指示** **参数:** - `status_id` (str, 必需): 饭否内容的 ID - `action` (str, 必需): 操作类型,"create" 表示收藏,"destroy" 表示取消收藏 - `confirm` (bool, 可选): 是否确认操作,默认为 False **返回:** **首次调用时(confirm=False):** - 确认信息字典,包含以下字段: - `需要确认`: 是否需要用户确认 - `内容预览`: 要操作的内容预览(最多50字) - `发布时间`: 内容的发布时间 - `发布 ID`: 内容的 ID - `发布者`: 内容的发布者 - `当前收藏状态`: 当前的收藏状态 - `操作类型`: 要执行的操作(收藏/取消收藏) - `⚠️ 重要提示`: 操作的提醒信息 - `确认提示`: 如何进行确认的说明 - `🚫 绝对禁止`: AI助手不能自动确认的提醒 **确认操作时(confirm=True):** - 操作结果字典,包含以下字段: - `是否收藏`: 操作后的收藏状态 - `操作结果`: 操作是否成功的描述信息 - `操作类型`: 执行的具体操作(收藏/取消收藏) **使用流程:** 1. 首次调用:`manage_favorite("status_id", "action")` - 显示内容预览和确认提示 2. **用户必须明确表示要操作**:用户看到预览后,必须明确说"确认收藏"或"确认取消收藏" 3. 确认操作:只有在用户明确确认后,AI才会调用 `manage_favorite("status_id", "action", confirm=True)` **安全机制:** - 🛡️ **双重保护**:首次调用只显示预览,不执行操作 - 🚫 **AI限制**:AI助手被明确禁止自动确认操作 - 👤 **用户控制**:只有用户明确表示要操作时,AI才会执行 - ⚠️ **状态检查**:自动检查当前收藏状态,避免重复操作 ### manage_friendship 管理用户关注状态 **功能:** - 调用饭否 API 的 /friendships/create.json 或 /friendships/destroy.json 接口 - 可以关注或取消关注指定用户 - 在执行关注操作前,会先调用 get_user_info 查询目标用户信息 - 智能处理受保护账号的关注申请 - 内置二次确认机制,防止误操作 - **重要:AI助手不能自动确认操作,必须等待用户明确指示** **参数:** - `user_id` (str, 必需): 目标用户的 ID - `action` (str, 必需): 操作类型,"create" 表示关注,"destroy" 表示取消关注 - `confirm` (bool, 可选): 是否确认操作,默认为 False **返回:** **首次调用时(confirm=False):** - 确认信息字典,包含以下字段: - `需要确认`: 是否需要用户确认 - `用户预览`: 要操作的用户预览信息(用户名、用户ID、是否受保护、粉丝数、发布数、个人描述) - `当前关注状态`: 当前的关注状态 - `操作类型`: 要执行的操作(关注/取消关注) - `⚠️ 重要提示`: 操作的提醒信息 - `特殊情况`: 如果是受保护账号,会包含相关提示 - `确认提示`: 如何进行确认的说明 - `🚫 绝对禁止`: AI助手不能自动确认的提醒 **确认操作时(confirm=True):** - 操作结果字典,包含以下字段: - `是否关注`: 操作后的关注状态 - `操作结果`: 操作是否成功的描述信息 - `操作类型`: 执行的具体操作(关注/取消关注/关注申请) - `用户信息`: 目标用户的基本信息(用户名、用户ID、是否受保护) - `特殊情况`: 如果是受保护账号的关注申请,会包含相关提示 **使用流程:** 1. 首次调用:`manage_friendship("user_id", "action")` - 显示用户预览和确认提示 2. **用户必须明确表示要操作**:用户看到预览后,必须明确说"确认关注"或"确认取消关注" 3. 确认操作:只有在用户明确确认后,AI才会调用 `manage_friendship("user_id", "action", confirm=True)` **安全机制:** - 🛡️ **双重保护**:首次调用只显示预览,不执行操作 - 🚫 **AI限制**:AI助手被明确禁止自动确认操作 - 👤 **用户控制**:只有用户明确表示要操作时,AI才会执行 - ⚠️ **状态检查**:自动检查当前关注状态,避免重复操作 **特殊情况:** - 当目标用户账号受保护(protected)时,关注操作将变为申请关注 - 系统会自动检测并处理这种情况,返回相应的提示信息 - 申请关注需要对方确认后才能生效 ## 发布相关 ### publish_status 发布饭否内容(仅文字) **功能:** - 调用饭否 API 的 /statuses/update.json 接口发布纯文字内容 - 支持最多140字的文字内容发布 - 内置二次确认机制,防止误发布 - **重要:AI助手不能自动确认发布,必须等待用户明确指示** **参数:** - `status` (str, 必需): 要发布的文字内容(最多140字) - `confirm` (bool, 可选): 是否确认发布,默认为 False **返回:** **首次调用时(confirm=False):** - 确认信息字典,包含以下字段: - `需要确认`: 是否需要用户确认 - `内容预览`: 要发布的内容预览 - `字数统计`: 当前字数和限制(如:50/140) - `操作类型`: 发布饭否 - `⚠️ 重要提示`: 发布的提醒信息 - `确认提示`: 如何进行确认的说明 - `🚫 绝对禁止`: AI助手不能自动确认的提醒 **确认发布时(confirm=True):** - 发布结果字典,包含以下字段: - `发布 ID`: 新发布消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布结果`: 发布是否成功的描述信息 - `重要提示`: 关于审核的提醒信息 **使用流程:** 1. 首次调用:`publish_status("内容")` - 显示内容预览和确认提示 2. **用户必须明确表示要发布**:用户看到预览后,必须明确说"确认发布"或类似的话 3. 确认发布:只有在用户明确确认后,AI才会调用 `publish_status("内容", confirm=True)` **安全机制:** - 🛡️ **双重保护**:首次调用只显示预览,不执行发布 - 🚫 **AI限制**:AI助手被明确禁止自动确认发布 - 👤 **用户控制**:只有用户明确表示要发布时,AI才会执行 - ⚠️ **内容验证**:自动进行字数统计和内容验证 **注意事项:** - 发布成功后需要等待审核才能在时间线中显示 - 内容不能为空且不能超过140字 - 系统会自动进行内容验证 - **AI助手绝对不会自动执行发布操作** ### publish_photo 发布饭否内容(文字+图片) **功能:** - 调用饭否 API 的 /photos/upload.json 接口发布带图片的内容 - 支持文字+单张图片的组合发布(最多一张图片) - 支持从网络 URL 自动下载图片 - 内置二次确认机制,防止误发布 - **重要:AI助手不能自动确认发布,必须等待用户明确指示** **参数:** - `status` (str, 必需): 要发布的文字内容(最多140字) - `photo_url` (str, 必需): 图片的网络 URL 地址 - `confirm` (bool, 可选): 是否确认发布,默认为 False **返回:** **首次调用时(confirm=False):** - 确认信息字典,包含以下字段: - `需要确认`: 是否需要用户确认 - `内容预览`: 要发布的内容预览 - `字数统计`: 当前字数和限制(如:50/140) - `图片链接`: 图片的 URL 地址 - `操作类型`: 发布带图片的饭否 - `⚠️ 重要提示`: 发布的提醒信息 - `URL 提示`: 图片 URL 格式检查结果 - `确认提示`: 如何进行确认的说明 - `🚫 绝对禁止`: AI助手不能自动确认的提醒 **确认发布时(confirm=True):** - 发布结果字典,包含以下字段: - `发布 ID`: 新发布消息的唯一标识符 - `发布时间`: 消息发布时间 - `发布结果`: 发布是否成功的描述信息 - `重要提示`: 关于审核的提醒信息 **使用流程:** 1. 首次调用:`publish_photo("内容", "图片URL")` - 显示内容和图片预览以及确认提示 2. **用户必须明确表示要发布**:用户看到预览后,必须明确说"确认发布"或类似的话 3. 确认发布:只有在用户明确确认后,AI才会调用 `publish_photo("内容", "图片URL", confirm=True)` **安全机制:** - 🛡️ **双重保护**:首次调用只显示预览,不执行发布 - 🚫 **AI限制**:AI助手被明确禁止自动确认发布 - 👤 **用户控制**:只有用户明确表示要发布时,AI才会执行 - ⚠️ **内容验证**:自动进行字数统计、内容验证和图片URL检查 **支持的图片格式:** - JPEG: `https://example.com/image.jpg` - PNG: `https://example.com/image.png` - GIF: `https://example.com/image.gif` - BMP: `https://example.com/image.bmp` - WebP: `https://example.com/image.webp` **注意事项:** - 发布成功后需要等待审核才能在时间线中显示 - 文字内容不能为空且不能超过140字 - 图片下载后大小不能超过5MB - 系统会自动从 URL 下载图片并上传到饭否 - 支持 HTTP 和 HTTPS 协议 - 下载超时时间为30秒 - 系统会自动检测图片的 MIME 类型 - **AI助手绝对不会自动执行发布操作** ### delete_status 删除饭否内容 **功能:** - 调用饭否 API 的 /statuses/destroy.json 接口删除指定的饭否内容 - 只能删除自己发布的内容 - 内置二次确认机制,防止误删 - **重要:AI助手不能自动确认删除,必须等待用户明确指示** **参数:** - `status_id` (str, 必需): 要删除的饭否内容的 ID - `confirm` (bool, 可选): 是否确认删除,默认为 False **返回:** **首次调用时(confirm=False):** - 确认信息字典,包含以下字段: - `需要确认`: 是否需要用户确认 - `内容预览`: 要删除的内容预览(最多50字) - `发布时间`: 内容的发布时间 - `发布 ID`: 内容的 ID - `⚠️ 重要警告`: 删除操作的警告信息 - `确认提示`: 如何进行确认的说明 - `🚫 绝对禁止`: AI助手不能自动确认的提醒 **确认删除时(confirm=True):** - 删除结果字典,包含以下字段: - `删除 ID`: 被删除消息的 ID - `删除结果`: 删除是否成功的描述信息 - `重要提示`: 关于删除操作的提醒信息 **使用流程:** 1. 首次调用:`delete_status("status_id")` - 显示内容预览和确认提示 2. **用户必须明确表示要删除**:用户看到预览后,必须明确说"确认删除"或类似的话 3. 确认删除:只有在用户明确确认后,AI才会调用 `delete_status("status_id", confirm=True)` **安全机制:** - 🛡️ **双重保护**:首次调用只显示预览,不执行删除 - 🚫 **AI限制**:AI助手被明确禁止自动确认删除操作 - 👤 **用户控制**:只有用户明确表示要删除时,AI才会执行删除 - ⚠️ **警告提示**:每次都会显示删除不可逆的警告 **注意事项:** - 只能删除自己发布的饭否内容 - 删除操作不可逆,请谨慎操作 - 删除成功后,内容将立即从时间线中消失 - 需要提供准确的饭否内容 ID - 系统会自动检查内容所有权,非本人内容无法删除 - 内容预览会自动移除HTML标签,便于阅读 - **AI助手绝对不会自动执行删除操作**