1. 准备阶段:账户注册与环境搭建

    • 注册Tikhub账户
    • 安装Apifox:进入apifox界面,进入你想要实现的接口的界面(本文以获取用户主页作品数据为例)。 
      链接地址:
      TikHub.io - Your Ultimate Social Media Data & API Marketplace
      在这一步中获取GET后面的接口信息:/api/v1/douyin/web/fetch_user_post_videos
    • 注册扣子工作台账户
      • 访问字节跳动官方开发者平台(扣子工作台),注册开发者账户
      • 创建新插件,插件URL填写https://api.tikhub.dev

2. API设置:获取和配置API密钥

现在回到apifox里面,页面上有文档和调试,可以切换

3.接口调试

我们先进入文档来了解这个接口的基本信息,然后再切回调试,填写相关参数
sec_user_id字段需要填写抖音用户的id,我们可以在网页端打开抖音,然后进入用户界面,在网址栏我们可以得到如下一段:
https://www.douyin.com/user/   {USER_ID}   ?from_tab_name=main
复制黄色的那一栏,填到下图的sec_user_id的参数值中,其他按照图中默认写即可

然后我们进入Auth,在中填入我们第一步在TikHub申请的密钥。

接下来我们就可以点击发送,下面会获取json信息。点击下载在vscode中打开查看json,或者使用在线json查看的网页。

在vscode中右键格式化json文件,然后找到如图所示的位置

4.填写扣子的插件工具设置

对照着apifox中的文档内容,以及json的字段,我们来填写扣子的插件工具设置

编写完毕以后点击右上角试运行,通过测试以后返回扣子,新建一个工作流

5.工作流

新建一代码块,写入解析抖音用户id的脚本

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

        const url = params.homeurl //获取输入

        // 移除查询参数部分
        const path = url.split('?')[0];

        // 按'/'分割路径
        const parts = path.split('/');

        // 找到'user'的索引并提取后面的内容
        const userIndex = parts.indexOf('user');
        const userPath = userIndex !== -1 ? parts.slice(userIndex + 1).join('/') : '';

        //console.log(userPath); // 输出:MS4wLjABAAAA9JqcOs1tMgVrOaxuMw3tfArAQObY_jp5PaLGjd9H8lU


        // 构建输出对象
        const ret = {
                "sec_id":  userPath, // 输出用户的sec_id
             
        };

        return ret;
}

6.然后插入自己刚刚写的插件并编写

6.通过ali生成弹幕加入多维表格

        请确保已拥有阿里云账号并开通相关服务。多维表格需支持API接入(如飞书多维表格或Airtable等)。请保存该文档URL作为tableurl输入,并设置权限为所有人可编辑。获取API教程,开通服务后创建获取APIKey用于鉴权-大模型服务平台百炼-阿里云

6.1创建一个ai工具初步提取文字。

6.2添加判断和阿里云的语音识别插件

6.3添加一个变量聚合来收集两个工具生成的字幕:

6.4对获取结果进行格式修正

// 在这里,您可以通过 '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,
            "发布时间": timestampToDateTime(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],
            "时长": msToMinSec(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"
6.5添加输入文档的插件来接收输出的内容。

然后就可以试运行了
在我们的飞书上面就可以看见已经写入了(注意飞书的标题要跟输出的内容匹配)

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐