# Twitter Fetcher

> 用户要求抓取某个 Twitter 用户的推文，用户要求搜索 Twitter 上的特定关键词，用户提到 "拉取推文"、"抓取 Twitter"、"获取推特上关于XX的讨论或者 用户提供 Twitter 用户名并希望获取其推文的时候进行调用

- Skill: `aichaellee/twitter-fetcher` (Agent Skill, multi-file: 2 files)
- Install (CLI): `npx skillmds@latest add aichaellee/twitter-fetcher`
- Raw SKILL.md: https://api.skillmd.com/api/skills/aichaellee/twitter-fetcher/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: aichaellee (https://skillmd.com/u/aichaellee)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/aichaellee/twitter-fetcher

---


# Twitter Fetcher

抓取 Twitter 推文数据，支持用户模式和关键词搜索模式。数据自动保存到数据库。

---

## 智能参数解析指南

当用户提出抓取需求时，你需要根据用户的自然语言描述，智能解析以下参数：

### 1. 采集数量智能判断

根据用户需求自动设置采集数量：

| 用户意图 | 推荐数量 | 示例 |
|---------|---------|------|
| 快速浏览/测试 | 100-300 | "帮我看看最近的推文"、"简单查一下" |
| 日常采集 | 500-800 | "抓取推文"、"获取数据" |
| 深度分析 | 1000-1500 | "全面分析"、"深入了解"、"数据分析" |
| 大规模采集 | 1500-3000 | "尽可能多"、"全部推文"、"大量数据" |

**如果用户未指定数量，默认使用 200 条。**

### 2. 排序维度解析

| 用户表述 | 参数值 | 说明 |
|---------|--------|------|
| "最新"、"最近"、"新发布" | `--type Latest` | 按时间倒序（默认） |
| "热门"、"火爆"、"高互动"、"爆款" | `--type Top` | 按互动量排序 |

### 3. 高级查询条件

脚本支持 Twitter 搜索操作符，可组合使用：

| 操作符 | 说明 | 示例 |
|--------|------|------|
| `--since` | 开始日期 | `--since 2024-01-01` |
| `--until` | 结束日期 | `--until 2024-12-31` |
| `--lang` | 语言过滤 | `--lang zh`（中文）、`--lang en`（英文） |
| `--min-faves` | 最少点赞数 | `--min-faves 100` |
| `--min-retweets` | 最少转推数 | `--min-retweets 50` |
| `--filter` | 内容过滤 | `images`（含图片）、`videos`（含视频）、`links`（含链接） |
| `--exclude` | 排除内容 | `replies`（排除回复）、`retweets`（排除转推） |
| `--verified` | 仅认证用户 | 添加此参数仅获取蓝V用户推文 |

### 4. 条件解析示例

**示例 1**: "帮我查询最近一周关于 AI 的热门推文"
```bash
python3 scripts/fetch_tweets.py -k "AI" --type Top --since 2024-01-12 --max-tweets 800
```

**示例 2**: "抓取 @elonmusk 最近的推文"
```bash
python3 scripts/fetch_tweets.py -u elonmusk --max-tweets 800
```

**示例 3**: "搜索 ChatGPT 相关的高质量推文，点赞超过 1000"
```bash
python3 scripts/fetch_tweets.py -k "ChatGPT" --min-faves 1000 --type Top --max-tweets 500
```

**示例 4**: "获取某用户的原创推文，不要转推和回复"
```bash
python3 scripts/fetch_tweets.py -u username --exclude replies --exclude retweets --max-tweets 1000
```

**示例 5**: "大规模采集 AI Agent 领域的推文做研究"
```bash
python3 scripts/fetch_tweets.py -k "AI Agent" --type Latest --max-tweets 3000
```

---

## 使用方法

### 抓取用户推文

```bash
# 抓取用户最近推文（自动保存到数据库）
python3 scripts/fetch_tweets.py -u <username>

# 指定数量
python3 scripts/fetch_tweets.py -u <username> --max-tweets 500

# 带时间范围
python3 scripts/fetch_tweets.py -u <username> --since 2024-01-01 --until 2024-06-30
```

### 搜索关键词

```bash
# 搜索关键词
python3 scripts/fetch_tweets.py -k "AI agent" --max-tweets 500

# 搜索热门推文
python3 scripts/fetch_tweets.py -k "ChatGPT" --type Top

# 带过滤条件
python3 scripts/fetch_tweets.py -k "AI" --min-faves 100 --lang en --type Top
```

### 完整参数说明

| 参数 | 说明 | 默认值 |
|------|------|--------|
| `-u, --user` | Twitter 用户名（不含 @） | - |
| `-k, --keyword` | 搜索关键词 | - |
| `--max-tweets` | 最大推文数量 | 800 |
| `--type` | 搜索类型：Latest（最新）或 Top（热门） | Latest |
| `--since` | 开始日期 (YYYY-MM-DD) | - |
| `--until` | 结束日期 (YYYY-MM-DD) | - |
| `--lang` | 语言代码 (zh/en/ja 等) | - |
| `--min-faves` | 最少点赞数 | - |
| `--min-retweets` | 最少转推数 | - |
| `--filter` | 内容过滤 (images/videos/links)，可多次使用 | - |
| `--exclude` | 排除内容 (replies/retweets)，可多次使用 | - |
| `--verified` | 仅获取认证用户推文 | False |

## 数据库字段

`tweets` 表包含以下字段：

| 字段 | 说明 |
|------|------|
| `tweet_id` | 推文 ID |
| `created_at` | 发布时间 |
| `text` | 推文内容 |
| `lang` | 语言 |
| `source` | 发布来源 |
| `favorites` | 点赞数 |
| `retweets` | 转推数 |
| `replies` | 回复数 |
| `quotes` | 引用数 |
| `bookmarks` | 书签数 |
| `views` | 浏览量 |
| `conversation_id` | 会话 ID |
| `author_id` | 作者 ID |
| `author_name` | 作者显示名 |
| `author_screen_name` | 作者用户名 |
| `author_avatar` | 作者头像 |
| `author_blue_verified` | 蓝V认证 |
| `has_media` | 是否有媒体 |
| `media_count` | 媒体数量 |
| `has_quoted` | 是否引用推文 |
| `quoted_tweet_id` | 引用推文 ID |
| `quoted_author_name` | 引用推文作者 |
| `quoted_text` | 引用推文内容 |
| `hashtags` | 话题标签 (JSON) |
| `urls` | 链接 (JSON) |
| `user_mentions` | 用户提及 (JSON) |
| `is_pinned` | 是否置顶 |
| `fetch_time` | 抓取时间 |

## 注意事项

- 数据自动保存到数据库，重复数据会自动跳过
- 脚本会自动处理分页，直到达到目标数量或无更多推文
- 连续 3 页无新推文时自动停止
- 请求间隔 0.3 秒，避免 API 限流
- 遇到 429 限流会自动等待并重试

