# OSS 媒体转存实测

日期：2026-06-29

## 结论

当前 `.env` 已配置 OSS 转存接口：

```text
CRAWLER_OSS_UPLOAD_URL=http://crawler-upload-v2.aiddit.com/crawler/oss/upload_stream
CRAWLER_OSS_UPLOAD_TIMEOUT_SECONDS=60
```

接口请求体：

```json
{
  "src_url": "远程媒体直链",
  "src_type": "image 或 video"
}
```

返回结构里 `oss_object.cdn_url` 是可用 CDN 地址。当前本地封装在 `acquisition/oss.py`：

- `upload_stream(src_url, src_type="image"|"video")`：成功返回 CDN URL，失败抛错。
- `to_oss(src_url, src_type)`：成功返回 CDN URL，失败返回原 URL，用于降级。

实测结果：小红书图片、微信公众号图片、抖音视频都可以直接把原始媒体 URL 丢给该接口转存到 CDN。

## 图文和文字的处理边界

小红书和微信公众号的“图文”需要拆开处理：

- 图片：每张图片都有远程 URL，可以逐张调用 `upload_stream(..., src_type="image")` 转成 CDN URL。
- 文字：正文是 `body_text` 字段，不是媒体 URL；该 `upload_stream` 接口不支持直接上传纯文本。

因此完整图文帖的存储结构应是：

```json
{
  "title": "...",
  "body_text": "...",
  "images": ["https://res.cybertogether.net/crawler/image/xxx.webp"],
  "source_url": "原帖 URL"
}
```

如果以后希望正文也进 OSS，需要另做一层：把正文打成 JSON/HTML/Markdown 文件，再用支持文件/字节上传的接口；不能直接复用当前 `src_url + src_type=image|video` 的转存接口。

## 实测记录

### 接口样例视频

源 URL：

```text
https://res-bj.cybertogether.net/crawler/test2.mp4
```

请求：

```json
{
  "src_url": "https://res-bj.cybertogether.net/crawler/test2.mp4",
  "src_type": "video"
}
```

结果：成功。

CDN URL：

```text
https://res.cybertogether.net/crawler/video/f7950e5639acb0cc393edce6edcb63e8.mp4
```

### 小红书

测试 query：`人生感悟 选题`

样本：

- 标题：`分享｜女性成长赛道的热门选题🔥小白直接抄`
- content_id：`69bd387c000000001d01e68a`
- 详情接口返回图片数：8
- 正文字数：115
- 转存类型：`image`

结果：成功。

CDN URL：

```text
https://res.cybertogether.net/crawler/image/8de0ca10016540ebf31eee6428691155.webp
```

### 微信公众号

测试 query：`短视频脚本 怎么写`

样本：

- 标题：`短视频脚本写不好？三个习惯让你的稿子开口就抓人`
- 详情接口返回图片数：6
- 正文字数：2794
- 转存类型：`image`

结果：成功。

CDN URL：

```text
https://res.cybertogether.net/crawler/image/d7f4306fba37fafd2fe191554bcf7b05.gif
```

### 抖音

测试 query：`短视频脚本 怎么写`

样本：

- 标题：`不会写脚本才能干好新媒体运营#新媒体运营...`
- content_id：`7624537985144543729`
- 详情接口返回视频数：1
- 转存类型：`video`

结果：成功。

CDN URL：

```text
https://res.cybertogether.net/crawler/video/2d4ec0766f8de5bef9b3271aa1c2c7f5.mp4
```

## 后续实现建议

1. 搜索到帖子后，不再把媒体下载到本地 `data/search`。
2. 对小红书/微信公众号图文：拉详情后遍历 `image_urls`，逐张转存 OSS，正文继续保存在结构化记录里。
3. 对抖音：取详情里的首个 `video_url`，用 `src_type="video"` 转存 OSS；封面图如需要展示，也可以用 `src_type="image"` 转存。
4. 数据库或 JSON 记录只保存 CDN URL、正文、标题、原帖 URL、平台、query、正交方法等轻量字段。
