一、准备工作(之前博客有提到)

✅ 步骤 1:环境准备

  1. 打开 https://user.tikhub.io → 用邮箱注册账号。

  2. 登录后务必先点右上角「签到」,系统会赠送当日免费额度(不签到后续可能无法调用接口)。


✅ 步骤 2:创建 API Key

  1. 打开 https://user.tikhub.io → 用邮箱注册账号。

  2. 登录后务必先点右上角「签到」,系统会赠送当日免费额度(不签到后续可能无法调用接口)。左侧菜单进入 「API 管理 / 价格」 → 点击 「创建 API 密钥」

  3. 在弹出框里:

    • 给密钥起个名字(随意)

    • 过期日期选「永久」或自定义

    • 权限务必「全选」所有 Scopes,否则后续接口会 403

  4. 点「保存」→ 立刻复制生成的密钥(页面仅显示一次)。


✅ 步骤 3:使用密钥,创建飞书多维表格

1把密钥放到请求头即可:

Authorization: Bearer 你的密钥

2多维表格的创建

字段名 类型

标题

文本
文案 文本
作者 文本
下载地址 文本
分享链接 文本
发布时间 文本
点赞 数字
分享 数字
评论 数字
收藏 数字
封面图 文本
时长 数字

 

二、整体流程概览

开始节点(输入关键词/博主链接)
   ↓
TikHub 插件获取笔记数据
   ↓
循环处理每条笔记
   ↓
写入飞书多维表格
   ↓
结束节点(返回成功信息)

1.创建工作流

2.tikhub文档调试

点击Apofox UI,点击📚 Apifox UIhttps://docs.tikhub.io

在左侧找到Douyin-Web-API,选择获取用户主页作品数据

进行调试(之前博客有提)

https://blog.csdn.net/2301_81893110?spm=1011.2480.3001.10640

3.添加代码节点

IDE中编辑如下字段,输入输出见图片

// 在这里,您可以通过 'params'  获取节点中的输入变量,并通过 'ret' 输出结果

// 'params' 已经被正确地注入到环境中

// 下面是一个示例,获取节点输入中参数名为'input'的值:

// const input = params.input;

// 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:

// const ret = { "name": '小明', "hobbies": ["看书", "旅游"] };

async function main({ params }: Args): Promise<Output> {

    // 构建输出对象

    const ret = {

        "seclD": params.homeurl ,// 返回网址中的第二段路径

        "BearerToken": "Bearer "+params.token, // 返回一个加前缀Bearer的token

    };

    return ret;

}

function getSecondPathSegment(url) {

    try {

      const urlObj = new URL(url);

      const segments = urlObj.pathname.split('/').filter(Boolean); // 过滤空字符串

      return segments.length >= 2 ? segments[1] : null;

    } catch (e) {

      return null; // 处理非法 URL

    }

  }

  // 测试

  const url = "https://www.douyin.com/user/MS4wLjABAAAAfs8uL2emoFXPJHWhiQDan6hj1Fhg_E4SPNn6O4R453A?from_tab_name=main";

  console.log(getSecondPathSegment(url)); // 输出: user

4.添加插件(之前建好的,没建可以见之前的博客)

插件输入输出参数如下:

插件输入如下:

5.添加IF选择器

6.增加批处理

批处理体设置如下:

IDE代码如下:

// 在这里,您可以通过 'params'  获取节点中的输入变量,并通过 'ret' 输出结果

// 'params' 已经被正确地注入到环境中

// 下面是一个示例,获取节点输入中参数名为'input'的值:

// const input = params.input;

// 下面是一个示例,输出一个包含多种数据类型的 'ret' 对象:

// const ret = { "name": '小明', "hobbies": ["看书", "旅游"] };

async function main({ params }: Args): Promise<Output> {

    // 构建输出对象

    const ret = {

      "fields": {

        "标题": params.video.desc,

        "文案": params.caption,

        "作者": params.video.author.nickname,

        "下载地址": params.video.video.bit_rate[0].play_addr.url_list.pop(), // 最后一个视频地址

        "分享链接": params.video.share_info.share_url,

        "发布时间": params.video.create_time,

        "点赞": params.video.statistics.digg_count,

        "分享": params.video.statistics.share_count,

        "评论": params.video.statistics.comment_count,

        "收藏": params.video.statistics.collect_count,

        "封面图": params.video.video.cover.url_list[0],

        "时长": params.video.duration//毫秒时长转换成分秒模式

      }

    };

    return ret;

  }

  function timestampToDateTime(timestamp) {

    // 处理秒级时间戳(如果小于1e12,视为秒,转换为毫秒)

    const msTimestamp = timestamp < 1e12 ? timestamp * 1000 : timestamp;

   

    const date = new Date(msTimestamp);

   

    // 获取年月日时,不足两位补零

    const year = date.getFullYear();

    const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始

    const day = String(date.getDate()).padStart(2, '0');

    const hour = String(date.getHours()).padStart(2, '0');

   

    // 拼接为 "年月日时" 格式(可根据需要调整分隔符)

    return `${year}年${month}月${day}日${hour}时`;

}

// 测试示例

const timestamp1 = 1730188800; // 秒级时间戳

const timestamp2 = 1730188800000; // 毫秒级时间戳

console.log(timestampToDateTime(timestamp1)); // 输出示例:2024年10月30日00时

console.log(timestampToDateTime(timestamp2)); // 输出示例:2024年10月30日00时

function msToMinSec(milliseconds) {

    // 处理非数字或负数情况

    if (typeof milliseconds !== 'number' || milliseconds < 0) {

        return '00:00';

    }

   

    // 转换为总秒数(向下取整)

    const totalSeconds = Math.floor(milliseconds / 1000);

   

    // 计算分钟和剩余秒数

    const minutes = Math.floor(totalSeconds / 60);

    const seconds = totalSeconds % 60;

   

    // 补零并拼接为 "分:秒" 格式

    return `${String(minutes).padStart(2, '0')}:${String(seconds).padStart(2, '0')}`;

}

// 测试示例

console.log(msToMinSec(63000));    // 1分3秒 → "01:03"

console.log(msToMinSec(125000));   // 2分5秒 → "02:05"

console.log(msToMinSec(59000));    // 0分59秒 → "00:59"

console.log(msToMinSec(3661000));  // 61分1秒 → "61:01"(超过60分钟也能正确处理)

console.log(msToMinSec(-5000));    // 无效值 → "00:00"

7.工作流的最终节点:

输出提示信息,如:飞书表格{{output}}写入了{{records}}\n

三、测试与运行

  • 点击「试运行」,运行成功如图所示

成功写入飞书:

四、结语

通过 Coze 工作流,我们可以轻松实现 TikHub → 飞书多维表格 的数据自动化同步,大幅提升内容运营效率。无论是做小红书对标分析、选题策划,还是内容库建设,这套流程都能为你节省大量时间。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐