Twitter API Claude Code SKILL
使用 Twitter API SKILL 通过 aidir.fun 快速访问 Twitter 数据
Twitter API Claude Code SKILL
Twitter API SKILL 允许 Claude Code 通过 aidir.fun 的 API 服务快速访问 Twitter 数据。此 SKILL 提供便捷的方法来获取用户资料、推文、关注者等。
安装
要在 Claude Code 项目中使用 Twitter API SKILL:
- 在项目根目录创建
.claude/skills目录 - 创建
twitter-api.skill.js文件(代码见下方) - 创建
.claude/skills/.env文件配置 API 密钥
配置
在 .claude/skills/.env 文件中设置您的 aidir.fun API 密钥:
AIDIR_API_KEY=your_api_key_here
AIDIR_API_BASE_URL=https://www.aidir.fun/api/twitterSKILL 代码
创建 .claude/skills/twitter-api.skill.js 文件,内容如下:
#!/usr/bin/env node
/**
* Twitter API SKILL for Claude Code
* 通过 aidir.fun 服务快速访问 Twitter API
*/
const https = require('https');
const http = require('http');
const API_KEY = process.env.AIDIR_API_KEY || '';
const API_BASE_URL = process.env.AIDIR_API_BASE_URL || 'http://localhost:3000/api/twitter';
function makeRequest(url, options = {}) {
return new Promise((resolve, reject) => {
const urlObj = new URL(url);
const protocol = urlObj.protocol === 'https:' ? https : http;
const requestOptions = {
hostname: urlObj.hostname,
port: urlObj.port,
path: urlObj.pathname + urlObj.search,
method: options.method || 'GET',
headers: {
'X-API-Key': API_KEY,
'Content-Type': 'application/json',
...options.headers,
},
};
const req = protocol.request(requestOptions, (res) => {
let data = '';
res.on('data', (chunk) => { data += chunk; });
res.on('end', () => {
try {
const jsonData = JSON.parse(data);
if (res.statusCode >= 200 && res.statusCode < 300) {
resolve(jsonData);
} else {
reject(new Error(jsonData.error?.message || jsonData.error || 'Request failed'));
}
} catch (e) {
reject(new Error('Failed to parse response'));
}
});
});
req.on('error', (error) => reject(error));
if (options.body) req.write(JSON.stringify(options.body));
req.end();
});
}
async function getUserProfile(screenName) {
const url = `${API_BASE_URL}/user-profile?screenName=${encodeURIComponent(screenName)}`;
return makeRequest(url);
}
async function getUserTweets(restId) {
const url = `${API_BASE_URL}/user-tweets?restId=${encodeURIComponent(restId)}`;
return makeRequest(url);
}
async function searchTweets(query) {
const url = `${API_BASE_URL}/search?rawQuery=${encodeURIComponent(query)}`;
return makeRequest(url);
}
async function getTweetDetail(restId) {
const url = `${API_BASE_URL}/tweet-detail?restId=${encodeURIComponent(restId)}`;
return makeRequest(url);
}
async function getFollowers(restId) {
const url = `${API_BASE_URL}/followers?restId=${encodeURIComponent(restId)}`;
return makeRequest(url);
}
async function getFollowing(restId) {
const url = `${API_BASE_URL}/following?restId=${encodeURIComponent(restId)}`;
return makeRequest(url);
}
async function main() {
const args = process.argv.slice(2);
if (!API_KEY) {
console.error('Error: AIDIR_API_KEY environment variable is not set');
process.exit(1);
}
const command = args[0];
const param = args[1];
try {
let result;
switch (command) {
case 'profile':
result = await getUserProfile(param);
break;
case 'tweets':
result = await getUserTweets(param);
break;
case 'search':
result = await searchTweets(param);
break;
case 'tweet':
result = await getTweetDetail(param);
break;
case 'followers':
result = await getFollowers(param);
break;
case 'following':
result = await getFollowing(param);
break;
default:
console.error(`Unknown command: ${command}`);
process.exit(1);
}
console.log(JSON.stringify(result, null, 2));
} catch (error) {
console.error('Error:', error.message);
process.exit(1);
}
}
if (require.main === module) {
main();
}
module.exports = { getUserProfile, getUserTweets, searchTweets, getTweetDetail, getFollowers, getFollowing };创建文件后,添加执行权限:
chmod +x .claude/skills/twitter-api.skill.js使用方法
有三种方式使用此 SKILL:
方式 1: 直接询问 Claude(推荐)
在 Claude Code 对话中直接询问:
获取 elonmusk 的 Twitter 资料或
帮我搜索关于"人工智能"的推文Claude 会自动运行脚本并返回结果。
方式 2: 手动运行脚本
在终端中直接运行:
# 加载环境变量并运行
export $(cat .claude/skills/.env | xargs)
node .claude/skills/twitter-api.skill.js profile elonmusk或使用环境变量前缀:
AIDIR_API_KEY=your_key AIDIR_API_BASE_URL=https://www.aidir.fun/api/twitter \
node .claude/skills/twitter-api.skill.js profile elonmusk方式 3: 创建自定义 Agent
创建 .claude/agents/twitter-api.md 文件:
# Twitter API Agent
你是 Twitter API 专家,帮助用户通过 aidir.fun API 服务获取 Twitter 数据。
## 使用方法
当用户请求 Twitter 数据时,使用 Bash 工具执行脚本:
\`\`\`bash
export $(cat .claude/skills/.env | xargs) && node .claude/skills/twitter-api.skill.js <command> <args>
\`\`\`
## 可用命令
- profile <username> - 获取用户资料
- tweets <userId> - 获取用户推文
- search <query> - 搜索推文
- tweet <tweetId> - 获取推文详情
- followers <userId> - 获取关注者
- following <userId> - 获取正在关注的���户
始终以易读的格式展示结果。然后使用 @twitter-api 调用:
@twitter-api 获取 elonmusk 的资料使用示例
获取用户资料
node .claude/skills/twitter-api.skill.js profile elonmusk获取用户推文
node .claude/skills/twitter-api.skill.js tweets 44196397搜索推文
node .claude/skills/twitter-api.skill.js search "人工智能"获取推文详情
node .claude/skills/twitter-api.skill.js tweet 1234567890获取关注者
node .claude/skills/twitter-api.skill.js followers 44196397获取正在关注
node .claude/skills/twitter-api.skill.js following 44196397可用命令
| 命令 | 描述 | 参数 |
|---|---|---|
profile <username> | 通过用户名获取用户资料 | username (字符串) |
tweets <userId> | 获取用户最近的推文 | userId (字符串) |
search <query> | 搜索推文 | query (字符串) |
tweet <tweetId> | 获取推文详情 | tweetId (字符串) |
followers <userId> | 获取用户的关注者 | userId (字符串) |
following <userId> | 获取用户关注的人 | userId (字符串) |
community <communityId> | 获取社区推文 | communityId (字符串) |
list <listId> | 获取列表推文 | listId (字符串) |
响应格式
所有响应都以 JSON 格式返回,结构如下:
{
"data": {
// Twitter API 响应数据
},
"cached": false,
"timestamp": "2025-01-06T12:00:00Z"
}错误处理
如果发生错误,SKILL 将返回错误消息:
{
"error": {
"code": 400,
"message": "无效的参数",
"details": "..."
}
}常见错误代码:
401: API 密钥无效或缺失403: 超出速率限制或配额耗尽404: 资源未找到500: 内部服务器错误
速率限制
请注意速率限制:
- 免费计划: 每天 100 次请求
- 专业计划: 根据订阅自定义限制
- 配额跟踪: 在响应头中检查剩余配额
示例
示例 1: 分析 Twitter 用户
// 获取用户资料
const profile = await twitter.profile('elonmusk');
// 获取他们的最新推文
const tweets = await twitter.tweets(profile.data.rest_id);
// 分析互动
console.log(`总推文数: ${tweets.data.length}`);示例 2: 搜索和筛选
// 搜索 AI 相关推文
const results = await twitter.search('人工智能');
// 按互动筛选
const popular = results.data.filter(tweet =>
tweet.favorite_count > 1000
);最佳实践
- 缓存结果: 启用时 API 会自动缓存响应
- 错误处理: 始终为 API 调用实现错误处理
- 速率限制: 监控配额使用情况以避免达到限制
- 批量请求: 尽可能组合多个操作
API 端点配置
后端 API 提供以下 Twitter 数据访问端点:
可用端点
| 本地端点 | 说明 |
|---|---|
/api/twitter/user-profile | 通过用户名获取用户资料 |
/api/twitter/user-tweets | 获取用户推文 |
/api/twitter/user-tweets-replies | 获取用户推文和回复 |
/api/twitter/search | 搜索推文 |
/api/twitter/tweet-detail | 获取推文详情 |
/api/twitter/followers | 获取关注者列表 |
/api/twitter/following | 获取正在关注列表 |
/api/twitter/list-latest-tweets | 获取列表推文 |
/api/twitter/community-tweets | 获取社区推文 |
认证方式
所有端点使用基于 token 的查询参数认证。
环境变量配置
在 .env.local 文件中配置:
TWITTER_BEARER_TOKEN=your_token_here测试示例
获取 Elon Musk 的推文
# 使用本地 API
curl "http://localhost:3000/api/twitter/user-tweets?user_id=44196397&count=10" \
-H "X-API-Key: your_api_key"响应示例:
{
"data": {
"data": {
"user": {
"result": {
"timeline": {
"timeline": {
"instructions": [
{
"type": "TimelineAddEntries",
"entries": [
{
"content": {
"itemContent": {
"tweet_results": {
"result": {
"legacy": {
"full_text": "推文内容...",
"favorite_count": 9242,
"retweet_count": 1217,
"reply_count": 1935
},
"views": {
"count": "1330792"
}
}
}
}
}
}
]
}
]
}
}
}
}
}
}
}成功案例
✅ 测试用户: @elonmusk (ID: 44196397)
- 成功获取 10 条最新推文
- 包含完整的推文内容、互动数据和浏览量
- 平均响应时间: < 2 秒
故障排除
问题 1: "Twitter API error: Not Found"
原因: 端点路径不正确或 token 无效
解决方案:
- 确认
TWITTER_BEARER_TOKEN有效 - 检查环境变量配置是否正确
- 重启开发服务器:
pnpm dev
问题 2: "Validation error"
原因: 参数名称不匹配
解决方案:
- 使用
user_id而不是restId - 使用
query而不是rawQuery - 使用
tweet_id而不是restId
问题 3: 空响应或超时
原因: 网络问题或 API 服务不可用
解决方案:
- 检查网络连接
- 验证 API 服务状态
- 增加请求超时时间
支持
如有问题或疑问:
- API 文档:
/docs/api - 支持邮箱: [email protected]
- Twitter: @aidirfun
MkSaaS文档