iheardulkbtc-twitter-reader

TotalClaw 作者 totalclaw

从 X(Twitter)推文 URL 读取并提取完整数据,含正文、作者、互动统计、媒体与引用推文。采用 FxTwitter API 多层级方案,Nitter 为尽力而为的备用。

安装 / 下载方式

TotalClaw CLI推荐
totalclaw skills install shop:totalclaw:totalclaw~iheardulkbtc-twitter-reader
cURL直接下载,无需登录
curl -fsSL https://skills.taituai.com/api/skills/totalclaw%3Atotalclaw~iheardulkbtc-twitter-reader/file -o iheardulkbtc-twitter-reader.md
## 概述(中文)

从 X(Twitter)推文 URL 读取并提取完整数据,含正文、作者、互动统计、媒体与引用推文。采用 FxTwitter API 多层级方案,Nitter 为尽力而为的备用。

## 技能正文

# Twitter/X 阅读器技能

用于通过多个可靠数据源从 X(原 Twitter)推文读取和提取数据的综合技能。

## 概述

本技能从 X/Twitter URL 提取完整推文信息,包括正文、作者详情、互动统计、媒体附件和引用推文。采用多层级方案以实现最大可靠性与数据完整性。

## 何时使用

**主要触发条件:**
- 用户分享推文 URL(x.com/*/status/* 或 twitter.com/*/status/*)
- 用户要求「阅读这条推文」并提供 URL
- 用户请求推文分析、摘要或数据提取
- 用户提及从特定推文获取信息

**用户请求示例:**
- 「这条推文说了什么?https://x.com/elonmusk/status/123456789」
- 「能帮我读一下这条推文吗?」
- 「总结这个 Twitter 讨论串」
- 「这条推文的互动数据是多少?」
- 「提取这条推文的媒体」

## 能力

### 提取的数据
- **推文内容**:完整正文及正确格式
- **作者信息**:显示名称与句柄(@username)
- **时间戳**:人类可读格式与原始格式
- **互动统计**:点赞、转推、回复、引用推文
- **媒体附件**:图片与视频的直接 URL
- **引用推文**:完整引用推文内容及作者信息
- **讨论串上下文**:可用时提供

### 支持的 URL 格式
- `https://x.com/username/status/1234567890`
- `https://twitter.com/username/status/1234567890`
- 带查询参数的 URL(如 `?s=20`、`?t=abc123`)
- 移动端 URL(m.twitter.com 自动处理)

## 使用示例

### 基本用法
```bash
# 读取单条推文
./scripts/read_tweet.sh "https://x.com/username/status/1234567890"

# 读取完整讨论串(沿同一作者的回复链)
./scripts/read_thread.sh "https://x.com/username/status/1234567890"

# 使用 Nitter 的备用方法
./scripts/read_tweet_nitter.sh "https://x.com/username/status/1234567890"
```

### 代理指令

当用户提供推文 URL 时:

1. **验证 URL 格式** — 确保为有效的 X/Twitter status URL
2. **使用主脚本** — 优先使用 `scripts/read_tweet.sh`
3. **优雅处理失败** — 主方法失败时尝试 `scripts/read_tweet_nitter.sh`
4. **清晰呈现数据** — 格式化输出供人类阅读
5. **保留上下文** — 包含互动统计与媒体引用

### 示例响应格式

脚本返回如下结构化 JSON:

```json
{
  "success": true,
  "tweet": {
    "text": "Tweet content here...",
    "author": {
      "name": "Display Name",
      "handle": "username"
    },
    "timestamp": {
      "formatted": "2024-01-15 14:30:25 UTC",
      "original": "Mon Jan 15 14:30:25 +0000 2024"
    },
    "url": "https://x.com/username/status/1234567890",
    "engagement": {
      "likes": 1250,
      "retweets": 340,
      "replies": 89,
      "quotes": 45
    },
    "media": {
      "photos": ["https://pbs.twimg.com/media/..."],
      "video": "https://video.twimg.com/..."
    },
    "quoted_tweet": {
      "text": "Quoted tweet text...",
      "author": {
        "name": "Quoted Author",
        "handle": "quoted_user"
      },
      "url": "https://x.com/quoted_user/status/987654321"
    }
  },
  "source": "fxtwitter",
  "fetched_at": 1705327825
}
```

### 代理响应示例

```markdown
**来自 @elonmusk 的推文:**
> "Just had a great meeting about sustainable transport. The future is electric! ⚡🚗"

**发布时间:** 2024 年 1 月 15 日 14:30 UTC
**互动:** 1,250 点赞 • 340 转推 • 89 回复 • 45 引用

**媒体:** 附 1 张图片
- 图片:https://pbs.twimg.com/media/example.jpg

**来自 @teslaofficial 的引用推文:**
> "Our latest Model S update includes new charging optimizations..."
```

## 技术实现

### 主方法:FxTwitter API
- **端点:** `https://api.fxtwitter.com/{username}/status/{tweet_id}`
- **优势:** 无需认证、数据全面、可靠
- **速率限制:** 个人使用额度宽松
- **响应:** 含所有推文元数据的完整 JSON

### 备用方法:Nitter 抓取(尽力而为)
- **实例:** 多个公共 Nitter 实例作为备用
- **优势:** FxTwitter 不可用时仍可用
- **限制:** 基础数据提取,无互动统计
- **用法:** 主方法失败时自动回退
- **⚠️ 注意:** 自 2024 年以来,大多数公共 Nitter 实例已关闭或变得不可靠。此备用方案为尽力而为,可能无法返回结果。FxTwitter API 应视为唯一可靠方法。

### 错误处理
- 无效 URL 格式检测
- 网络超时处理
- API 错误响应解析
- 方法间优雅回退
- 向用户提供清晰错误消息

## 依赖

**必需系统工具:**
- `curl` — 向 API 发起 HTTP 请求
- `jq` — JSON 解析与格式化
- `bash` — 脚本执行环境
- `grep/sed` — 文本处理(仅 Nitter 备用)

**可选增强:**
- `gdate`(macOS 上通过 Homebrew 安装 GNU date)— 更好的时间戳格式化

## 安全与隐私

### 安全特性
- ✅ **无外部数据收集** — 数据保留在你的系统上
- ✅ **无分析或遥测** — 无跟踪或使用报告
- ✅ **完全可审计代码** — 开源、可读的 shell 脚本
- ✅ **最少网络调用** — 仅连接 FxTwitter API 和 Nitter 实例
- ✅ **无敏感数据暴露** — 脚本不存储或记录个人信息
- ✅ **安全 URL 处理** — 正确的 URL 验证与清理

### 网络连接
**批准的外部主机:**
- `api.fxtwitter.com` — 主数据源(FxTwitter API)
- `nitter.net` 及其他 Nitter 实例 — 备用抓取
- 不建立其他外部连接

**数据流:**
1. 用户提供推文 URL
2. 脚本从 URL 提取用户名/ID
3. 向 FxTwitter 或 Nitter 发起 API 请求
4. 本地解析响应
5. 返回格式化 JSON(不永久存储)

### 审计轨迹
所有网络请求包含:
- 清晰的 user-agent 标识
- 仅必要的最少请求头
- 无认证令牌或个人标识符
- 仅请求提取公开推文数据

## 错误场景与处理

### 常见错误

**无效 URL 格式:**
```json
{
  "error": "Invalid Twitter/X URL format",
  "expected": "x.com/user/status/123456789 or twitter.com/user/status/123456789"
}
```

**推文未找到:**
```json
{
  "error": "API Error",
  "code": 404,
  "message": "NOT_FOUND"
}
```

**网络失败:**
```json
{
  "error": "Failed to fetch tweet data",
  "details": "Network request failed"
}
```

**需要备用方案:**
```json
{
  "error": "All Nitter instances failed",
  "suggestion": "Try the main script with FxTwitter API, or wait for Nitter instances to recover"
}
```

### 代理错误处理

发生错误时:
1. **解析错误 JSON** 以了解问题
2. **尝试备用方法**(若主方法失败)
3. **用通俗语言向用户解释**出了什么问题
4. **建议替代方案**(稍后重试、检查 URL 格式等)

## 高级特性

### 讨论串阅读
通过 `read_thread.sh` 支持完整讨论串展开:
- 给定讨论串中任意推文 URL,通过 `replying_to` 字段向上遍历回复链
- 仅收集同一作者的推文(自回复讨论串)
- 按时间顺序返回推文 JSON 数组
- 每条讨论串安全上限 50 条推文(可通过第二个参数配置)
- 用法:`./scripts/read_thread.sh "https://x.com/user/status/123" [max_depth]`

### 媒体处理
- **图片:** 通过 `media.photos` 数组获取直接 URL(全分辨率)
- **视频:** 通过 `media.videos` 获取 MP4 链接,含缩略图与时长
- **所有媒体:** 合并的 `media.all` 数组,带类型标注以完整覆盖
- **文章封面:** 长文 X 帖子(「文章」)提取 `media.article_cover`
- **GIF:** 作为视频内容处理
- **外部链接:** 保留在推文正文中

### 引用推文递归
技能可提取嵌套引用推文至合理深度,避免无限循环。

## 性能说明

### 响应时间
- **FxTwitter API:** 通常 200–500ms
- **Nitter 抓取:** 每个实例 1–3 秒
- **依赖网络:** 可能因连接质量而异

### 缓存考虑
- 默认不实现持久缓存
- 重复请求可考虑临时缓存
- 尊重外部服务的速率限制

## 故障排除

### 常见问题

**「API 响应中无推文数据」**
- 推文可能已删除或为受保护内容
- 检查 URL 格式与推文 ID
- 尝试备用方法

**「网络请求失败」**
- 检查互联网连接
- FxTwitter API 可能暂时不可用
- 回退到 Nitter 方法

**「所有 Nitter 实例均失败」**
- Nitter 实例可能被封锁或宕机
- 等待后使用 FxTwitter API 重试
- 检查防火墙/代理设置

### 调试模式
调试时以详细输出运行:
```bash
bash -x scripts/read_tweet.sh "https://x.com/username/status/123"
```

## 开发与定制

### 添加新数据源
添加额外备用方法:
1. 在 `scripts/` 目录创建新脚本
2. 遵循相同的 JSON 输出格式
3. 更新主技能逻辑以包含新方法
4. 充分测试并更新文档

### 修改输出格式
可通过修改各脚本中最终的 `jq` 命令自定义 JSON 结构。保持所有方法间的一致性。

### 添加功能
可考虑以下增强方向:
- 推文内容情感分析
- 话题标签与提及提取
- 链接展开与预览
- 媒体中文字的 OCR
- 非英文推文翻译支持

## 版本历史

- **v1.1** — 讨论串跟踪(`read_thread.sh`)、全面媒体提取(图片、视频、所有媒体、文章封面)
- **v1.0** — 初始版本,含 FxTwitter API 与 Nitter 备用
- 多源可靠性及全面数据提取
- 完整安全审计合规
- 可用于 ClawHub 分发的生产就绪版本