LogoMkSaaS文档
LogoMkSaaS文档
首页

入门指南

Twitter API 概览

工具

Twitter API Claude Code SKILL

API 参考

迁移

Twitter API 迁移计划
X (Twitter)

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:

  1. 在项目根目录创建 .claude/skills 目录
  2. 创建 twitter-api.skill.js 文件(代码见下方)
  3. 创建 .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/twitter

SKILL 代码

创建 .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
);

最佳实践

  1. 缓存结果: 启用时 API 会自动缓存响应
  2. 错误处理: 始终为 API 调用实现错误处理
  3. 速率限制: 监控配额使用情况以避免达到限制
  4. 批量请求: 尽可能组合多个操作

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 无效

解决方案:

  1. 确认 TWITTER_BEARER_TOKEN 有效
  2. 检查环境变量配置是否正确
  3. 重启开发服务器: pnpm dev

问题 2: "Validation error"

原因: 参数名称不匹配

解决方案:

  • 使用 user_id 而不是 restId
  • 使用 query 而不是 rawQuery
  • 使用 tweet_id 而不是 restId

问题 3: 空响应或超时

原因: 网络问题或 API 服务不可用

解决方案:

  1. 检查网络连接
  2. 验证 API 服务状态
  3. 增加请求超时时间

支持

如有问题或疑问:

  • API 文档: /docs/api
  • 支持邮箱: [email protected]
  • Twitter: @aidirfun

相关

  • API 认证
  • API 速率限制
  • API 端点

Twitter API 概览

无需 Twitter 认证的企业级数据 API 服务

API 概览

Twitter API 端点和使用介绍

目录

Twitter API Claude Code SKILL
安装
配置
SKILL 代码
使用方法
方式 1: 直接询问 Claude(推荐)
方式 2: 手动运行脚本
方式 3: 创建自定义 Agent
使用示例
获取用户资料
获取用户推文
搜索推文
获取推文详情
获取关注者
获取正在关注
可用命令
响应格式
错误处理
速率限制
示例
示例 1: 分析 Twitter 用户
示例 2: 搜索和筛选
最佳实践
API 端点配置
可用端点
认证方式
环境变量配置
测试示例
获取 Elon Musk 的推文
成功案例
故障排除
问题 1: "Twitter API error: Not Found"
问题 2: "Validation error"
问题 3: 空响应或超时
支持
相关