tiktok-cloudfunctions.md 5.7 KB

TikTok 红人博主库云函数

本文档定义了用于红人博主库模块的 TikTok 数据采集云函数。

API 配置

  • Base URL: https://api.tikhub.io/api/v1
  • API Key: tKIbAsEM8X+GmE2vHqGW7D/ICwK1Q5V4viKFrWiPB6HholGdLFqZJmmyNw==

云函数列表

1. 搜索用户 (tiktok_searchUsers)

用于在红人库首页搜索 TikTok 用户。

async function handler(request, response) {
  console.log('🚀 执行 TikTok 用户搜索...');
  
  const API_KEY = 'tKIbAsEM8X+GmE2vHqGW7D/ICwK1Q5V4viKFrWiPB6HholGdLFqZJmmyNw==';
  const BASE_URL = 'https://api.tikhub.io/api/v1';

  try {
    // 1. 获取参数
    let keyword = request.params?.keyword || request.body?.keyword;
    let cursor = request.params?.cursor || request.body?.cursor || 0;

    if (!keyword) {
      response.json({ code: 400, success: false, error: '缺少关键词参数 (keyword)' });
      return;
    }

    // 2. 调用 TikHub API
    const url = `${BASE_URL}/tiktok/web/fetch_search_user?keyword=${encodeURIComponent(keyword)}&cursor=${cursor}`;
    
    // 注意:这里假设云函数环境支持 fetch,如果不支持需使用 axios 或其他库
    const apiRes = await fetch(url, {
      method: 'GET',
      headers: {
        'Authorization': `Bearer ${API_KEY}`, // 假设 API Key 放在 Header,或者根据 TikHub 文档放在 query param
        // 根据文档 URL 示例,TikHub 似乎通常不需要复杂的 Auth Header,或者 Key 就在 URL 中?
        // 实际上通常商业 API 需要 Header。如果 TikHub 是开放 API,可能直接调用。
        // *根据任务描述的 API Key,通常用于 Authorization 头或 X-Api-Key 头*
        // 这里假设作为 Bearer Token 或 X-Api-Key
        'X-Api-Key': API_KEY 
      }
    });

    const data = await apiRes.json();

    // 3. 处理返回结果
    // 假设 TikHub 返回结构包含 user_list
    response.json({ 
      code: 200, 
      success: true, 
      data: data 
    });

  } catch (error) {
    console.error('❌ 搜索失败:', error.message);
    response.json({ code: 500, success: false, error: error.message });
  }
}

2. 获取用户详情 (tiktok_getUserProfile)

获取指定用户的详细信息(包括 sec_uid)。

async function handler(request, response) {
  console.log('🚀 获取 TikTok 用户详情...');
  
  const API_KEY = 'tKIbAsEM8X+GmE2vHqGW7D/ICwK1Q5V4viKFrWiPB6HholGdLFqZJmmyNw==';
  const BASE_URL = 'https://api.tikhub.io/api/v1';

  try {
    let uniqueId = request.params?.unique_id || request.body?.unique_id;

    if (!uniqueId) {
      response.json({ code: 400, success: false, error: '缺少 unique_id 参数' });
      return;
    }

    const url = `${BASE_URL}/tiktok/web/fetch_user_profile?unique_id=${uniqueId}`;
    const apiRes = await fetch(url, {
      headers: { 'X-Api-Key': API_KEY }
    });
    const data = await apiRes.json();

    response.json({ code: 200, success: true, data: data });

  } catch (error) {
    console.error('❌ 获取详情失败:', error.message);
    response.json({ code: 500, success: false, error: error.message });
  }
}

3. 获取用户作品列表 (tiktok_getUserPosts)

获取用户的视频作品列表。

async function handler(request, response) {
  console.log('🚀 获取 TikTok 用户作品...');
  
  const API_KEY = 'tKIbAsEM8X+GmE2vHqGW7D/ICwK1Q5V4viKFrWiPB6HholGdLFqZJmmyNw==';
  const BASE_URL = 'https://api.tikhub.io/api/v1';

  try {
    let secUid = request.params?.sec_user_id || request.body?.sec_user_id;
    let count = request.params?.count || request.body?.count || 20;
    let cursor = request.params?.cursor || request.body?.cursor || 0;

    if (!secUid) {
      response.json({ code: 400, success: false, error: '缺少 sec_user_id 参数' });
      return;
    }

    const url = `${BASE_URL}/tiktok/web/fetch_user_posts?sec_user_id=${secUid}&count=${count}&cursor=${cursor}`;
    const apiRes = await fetch(url, {
      headers: { 'X-Api-Key': API_KEY }
    });
    const data = await apiRes.json();

    response.json({ code: 200, success: true, data: data });

  } catch (error) {
    console.error('❌ 获取作品失败:', error.message);
    response.json({ code: 500, success: false, error: error.message });
  }
}

4. 获取视频评论 (tiktok_getPostComments)

获取视频的评论列表。

async function handler(request, response) {
  console.log('🚀 获取 TikTok 视频评论...');
  
  const API_KEY = 'tKIbAsEM8X+GmE2vHqGW7D/ICwK1Q5V4viKFrWiPB6HholGdLFqZJmmyNw==';
  const BASE_URL = 'https://api.tikhub.io/api/v1';

  try {
    let videoId = request.params?.video_id || request.body?.video_id;
    let count = request.params?.count || request.body?.count || 50;
    let cursor = request.params?.cursor || request.body?.cursor || 0;

    if (!videoId) {
      response.json({ code: 400, success: false, error: '缺少 video_id 参数' });
      return;
    }

    const url = `${BASE_URL}/tiktok/web/fetch_post_comment?aweme_id=${videoId}&count=${count}&cursor=${cursor}`;
    const apiRes = await fetch(url, {
      headers: { 'X-Api-Key': API_KEY }
    });
    const data = await apiRes.json();

    response.json({ code: 200, success: true, data: data });

  } catch (error) {
    console.error('❌ 获取评论失败:', error.message);
    response.json({ code: 500, success: false, error: error.message });
  }
}

部署说明

请将以上代码部署为对应的云函数,并记录 Function ID。

函数名 建议 Function ID 描述
tiktok_searchUsers tiktok_search 搜索用户
tiktok_getUserProfile tiktok_profile 获取用户详情
tiktok_getUserPosts tiktok_posts 获取用户作品
tiktok_getPostComments tiktok_comments 获取作品评论