简介:扣子平台上的一套自动化流程,用于采集并整理抖音账号主页视频列表的关键信息,面向内容创作者、新媒体运营与数据分析人员,解决手动复制视频数据效率低、易错漏的问题。资源包内共2个文件,分别为yml与yaml格式的扣子流程配置文件,直接导入平台即可使用;压缩包仅9KB,轻量精悍。流程可定时或手动触发,抓取视频发布时间、描述、点赞量、评论量、收藏量、分享量、播放量及下载地址等核心指标,并自动同步到飞书多维表格或Excel,方便后续筛选、排序与可视化分析,帮助用户识别最佳发布时段和爆款内容规律。目前已有477人浏览学习。整个流程无需编程基础,导入配置即可运行,特别适合希望用自动化方式管理抖音账号数据、提升运营效率的入门及进阶用户。
1. 项目拆解:这个需求到底在解决什么问题
1.1 先搞清楚“统计”二字的真实含义
做自媒体运营、账号矩阵管理或者达人投放的朋友,大概率都遇过同一个麻烦:想看某个抖音账号到底发了多少视频、更新频率怎么样、各个视频的数据如何,如果手动一条条去翻主页,不仅浪费时间,还容易漏掉“仅自己可见”和“已删除”之外那些边界状态的内容。尤其当账号数量超过十个二十个之后,纯人工记录基本就是劝退项。
“扣子流程统计抖音账号主页视频列表的信息”这个项目,说白了就是搭建一个扣子(Coze)工作流,输入一个抖音账号的标识(通常是主页链接、抖音号或者sec_uid),自动拉取该账号主页的视频列表,并把视频标题、发布时间、点赞数、评论数、播放量等关键字段汇总成结构化结果。输出形态可以是表格、文本摘要,甚至可以对接后续的数据库写入或飞书文档同步。
这里有个细节值得先说明:“统计”不一定等于“做数据分析”。在这个项目里,第一步是把“数据拿到手”,也就是完成视频列表的采集和字段抽取;第二步才是基于这个列表做一些计数、排序、时间区间筛选之类的轻量聚合。很多人第一步就卡住了,其实问题往往出在数据源的选择上,而不是扣子这个平台本身。
1.2 为什么不用写代码,而是用扣子工作流
如果是两三年前,要实现类似功能通常得写个Python脚本,中间还要处理签名算法、接口参数加密、Cookie维护这些破事,光是登录态过期就能劝退一大批人。现在扣子这类低代码AI应用平台把门槛拉低了很多,它的逻辑是“把各种能力变成可拖拽的节点,用户只需要连线路由”。
我选择用扣子工作流来做这个项目,核心原因有三个。第一,扣子内置了HTTP请求节点和代码节点,既能直接调用第三方API,也能写少量Python脚本处理复杂数据解析,灵活度足够;第二,它天然适合“输入参数—执行流程—输出结果”这种场景,数据拉取、处理、聚合这些步骤可以像流水线一样拆成独立节点,每一步都能单独调试、看日志,排查问题比写脚本时代直观太多;第三,发布之后可以打包成API或者绑定到飞书、微信等渠道,让非技术同事也能在对话里直接使用,这是脚本很难做到的。
当然,扣子工作流不是万能药。如果抖音接口的调用频率非常高、数据量达到百万级别,那还是得上服务端程序加数据库。但针对“抖音账号主页视频列表统计”这个典型的中低频率场景,扣子的性能和并发能力完全够用。
2. 前置准备:抖音数据到底怎么合规地获取
2.1 数据源选型:开放平台、第三方聚合API还是页面解析
搭建工作流之前,必须先想清楚数据从哪儿来。这不是“随便接个接口就行”的问题,而是整个项目能不能跑通、跑得稳的关键决策。
方案A是使用抖音开放平台的官方接口。如果你有企业资质,可以申请开放平台应用,通过OAuth授权拿到用户的access_token,然后调用“视频列表”相关接口获取指定用户发布的视频数据。这种方式的数据最准确、字段最全,但有一个绕不开的限制:必须用户主动授权你的应用,拿到的也是“授权用户自己发布的视频列表”,换句话说,不能直接输入任意账号就拉取数据,只能统计主动授权给你的账号。对于“管理自己公司矩阵账号”的场景很合适,但对于“批量看竞品账号公开数据”的需求就不适用了。
方案B是使用第三方数据聚合API,市面上有些服务商专门提供公开数据的聚合接口,给一个主页链接就能返回视频列表和基础数据。这类接口的优点是使用门槛低、不需要逐用户授权;缺点是稳定性参差不齐、字段标准不统一,而且部分服务商的实现方式存在合规风险,选型时一定要确认服务商的数据来源是否合规,优先选有正规合作的。
方案C是自己解析抖音分享链接或主页HTML。这个方案我不推荐,而且必须明确说一句:爬虫抓取公开页面数据需要严格遵守服务协议和法律法规,绕过权限校验、批量抓取他人服务器数据可能涉及法律风险。更重要的是,抖音的前端页面结构经常变动、接口做了防爬验证,哪怕今天调通了,明天可能就失效。把项目建在这样一个不稳定的地基上,时间成本非常高。
综合下来,这个项目最稳的落地方式是:如果是给自己或公司的账号做统计,优先申请开放平台API;如果不具备开放平台条件,就找合规的第三方数据服务商,并购买其官方API权限。扣子这边负责的是“把数据串起来变成工作流”,而不是“破解接口”。
2.2 拿到一个抖音账号的唯一标识
不管选择哪种数据源,最终都要面对一个基础问题:怎么用扣子让你指定“要统计哪个账号”。
抖音账号的常见标识有三种:抖音号(例如“abc12345”)、主页短链接(例如“v.douyin.com/xxxxx”)和sec_uid(一串很长的Base64风格字符串,是抖音内部识别用户的唯一ID)。推荐的做法是让用户输入主页短链接或抖音号,工作流内部再通过解析或查询转换成数据API能识别的sec_uid。
这里我踩过一个坑:很多人直接从浏览器地址栏复制了一串URL就丢给工作流,结果里面包含了tracking参数、跳转参数等等一堆杂质。我通常会在工作流入口前加一个“输入预处理”步骤——写一个代码节点,用正则提取URL中的关键ID或把抖音号转为sec_uid的映射查询。这样即使输入的是带参数的完整链接,也能提取出最干净的账号标识,后续的API调用才不会报“参数格式错误”。
3. 工作流搭建实操:一步一步串起来
3.1 创建工作流与全局变量设计
在扣子控制台里新建一个工作流,我习惯先设计好全局输入参数。这一步很多人会忽略,直接上来拖节点,结果后面发现参数名不统一、类型对不上,调试浪费大把时间。
我这里的输入参数只设计了两个:
account_input(字符串类型):用户输入的主页链接或抖音号。max_count(整数类型,可选,默认20):最多统计多少条视频。防止一次拉取太多导致响应超时或积分消耗过快。
全局参数设计的原则是“少而明确”,不要把需要中间计算得出的值也作为输入参数。另外建议在参数描述里写清楚格式要求,因为扣子支持对话流绑定,用户在对话中提问时,大模型会根据描述引导用户补充信息。比如描述写“请输入抖音账号主页链接或抖音号”,大模型就会在用户没有提供该信息时主动追问。
3.2 账号ID解析节点:统一转成sec_uid
接下来是数据解析节点。我在项目中采用的是代码节点(Python)加一个轻量查询,逻辑分两步:
第一步判断输入类型。用正则匹配主页链接中的路径部分,如果是v.douyin.com/xxxxx短链格式,则通过HTTP请求跟随重定向拿到最终URL;如果是完整主页URL,直接提取sec_uid参数;如果是一串普通字符,则视为抖音号,进入第二步。
第二步做抖音号到sec_uid的转换。这一步如果用的是开放平台API,需要在用户授权后调用用户信息接口,拿到对应抖音号的sec_uid和aweme_count(账号视频总数)。如果用的是第三方聚合API,大多数服务商会在传入账号识别符时,自动帮你映射好,不需要你手动处理这一步。
有些第三方平台的接口支持直接传“主页URL形式”,省掉了解析的麻烦。但我的建议是哪怕平台支持,也尽量在扣子侧做一层解析和归一化。因为后续如果切换数据源供应商,输入参数层面不用改,只要改节点内部的映射逻辑就行,减少了迁移成本。
3.3 核心节点:拉取视频列表
数据源准备好后,就要接入真正的“拉取视频列表”节点。我自己用的是扣子的HTTP Request节点,来调用第三方聚合API的视频列表接口。
关键配置项如下:
- 请求方式:GET
- URL:根据你的数据供应商提供,通常是
/api/video/list之类的路径 - 请求头:
Authorization: Bearer {token},token建议放在工作流的全局变量或密钥配置中,不要硬编码在节点里 - 查询参数:
sec_uid:上一步解析出的用户IDcursor:分页游标,第一页为0count:每页数量,建议设置10或20
- 输出:将响应内容解析为结构化JSON,常见字段有
aweme_id(视频ID)、desc(标题文案)、create_time(发布时间)、statistics(内含digg_count点赞数、comment_count评论数、play_count播放量)等
我第一次配置这个节点时遇到一个典型误区:以为接口返回的数据格式是固定的,直接按文档解析。实际跑起来发现,有些视频没有播放量字段(仅自己可见或部分隐私状态),有些视频的desc是空字符串。如果代码节点里用强索引去取数据,比如item["desc"],遇到缺字段就会直接报KeyError,导致整个工作流中断。解决办法后面会细讲,核心思路是“取字段时一律用get方法并设置默认值,别用[]直接索引”。
注意:扣子的HTTP请求节点对响应体大小有一定限制,如果账号视频总量非常大(比如几千条),一次拉取全部可能会超过限制。实际项目中我建议默认只拉取最近50~100条视频做“近期数据分析”,这能覆盖绝大多数运营场景——看一个账号最近有没有稳定更新、最近内容反响如何、有没有爆款趋势。真要全部拉取的话,再用循环分页配合数据库存储,这一点在第3.4节细说。
3.4 循环分页与数据清洗
第三方API的视频列表接口通常也是分页的,一页十几条。为了在“统计最近N条视频”这个需求上做出稳定的工作流,我在项目中加了循环节点,用来逐页拉取直到满足数量条件或翻完所有页。
扣子的循环逻辑可以这样设计:
- 第一次请求的结果里会返回一个
has_more或max_cursor字段,表示是否还有下一页。 - 把当前页的视频数组追加到一个“累计列表”变量上。
- 如果累计数量已经达到
max_count,就跳出循环;否则更新cursor参数继续请求。 - 循环结束后,进入“数据清洗”代码节点。
数据清洗这一步很关键,因为原始接口返回的字段通常比较臃肿,而且部分字段缺失。我写了一段Python代码节点来做以下事情:
- 把
create_time从Unix时间戳转换成可读的YYYY-MM-DD HH:mm:ss格式; - 用
.get()方式安全地提取每条视频的标题、点赞、评论、播放、分享数等字段; - 过滤掉“已经删除”或“仅自己可见”的视频,这类视频通常没有正常的数据统计字段;
- 拼接一个
video_url字段,格式为https://www.douyin.com/video/{aweme_id},方便后续人工点开复盘。
清洗完成后的数据结构是一个标准的列表,每项对应一条视频。到这一步,项目的主干已经通了:从输入账号标识到拿到结构化的视频列表数据,全过程不需要人工干预。
3.5 结果输出与多样化展示
拿到了清洗后的视频列表,输出的形式可以根据使用场景灵活调整。
最常见的输出形式是“文本摘要”,适合直接对接扣子的对话机器人,让用户在工作流发布后像聊天一样查询。我在代码节点中对列表做了一次聚合计算:统计视频数量、时间最早与最新发布时间、总点赞数与平均点赞数、点赞数最高的单条视频。最终拼接成一个自然语言段落,例如:“该账号最近30条视频,平均点赞1.2万,最高一条《XX》获得5.6万赞,最近一次发布是在3天前。”
第二种输出形式是结构化JSON,适合给下游系统调用。比如工作流被发布成API后,外部程序可以拿到标准的JSON数组直接入库。
第三种输出形式是生成表格。扣子支持把数据发送到飞书表格或通过消息卡片展示。如果后续想把多账号监控做成自动报表,可以在工作流末尾接一个飞书发送节点,把清洗后的列表按固定模板写入表格,定时运行,实现每日自动汇总。
我在实际项目中,前两种输出形式都做了,通过一个输出节点把结果同时输出为文本和JSON两个字段。这样既保证对话端展示友好,又保留了数据处理能力。
4. 常见问题与排查技巧实录
这个项目做完之后,我陆陆续续收到了不少反馈,大家踩的坑还挺集中的。我把高频问题和排查思路整理成了一张表:
| 常见问题 | 可能原因 | 排查与解决 |
|---|---|---|
| 接口返回“用户不存在” | sec_uid解析错误或抖音号输入不完整 | 先单独调试账号解析节点,检查解析出的sec_uid是否正确;在输入预处理中增加格式校验 |
| 拉取到的视频列表为空 | 账号设置了隐私保护,或数据源不可用 | 换一个明确可见的公开账号测试;确认API服务商是否真的支持目标账号类型 |
| 代码节点报字段KeyError | 接口返回数据中有字段缺失 | 改用字典的.get()方法并设置默认值;先打印原始数据日志确认实际字段名 |
| 循环拉取只跑到第一页就停了 | 分页游标参数更新逻辑写错 | 检查每次循环是否把最新的max_cursor赋值给了请求参数;建议在循环体内加一条日志输出当前页码 |
| 工作流运行很慢 | 每页请求间隔短导致触发限流,或每次执行都重新请求全部数据 | 在HTTP节点加延时(例如每页间隔1~2秒);对于超过50条的历史数据,考虑定时缓存而非实时拉取 |
| token过期导致401 | 第三方API密钥失效 | 在密钥配置中设置有效期提醒;在HTTP节点捕获401状态码并输出明确提示 |
4.1 授权过期是稳定性的最大敌人
不管是开放平台还是第三方API,只要涉及token,迟早会遇到过期问题。我在项目上线后遇到的第一次故障就是token过期,而且因为扣子的HTTP节点默认不会告诉你“token失效”,它只会返回一个401状态码和一段错误信息,如果工作流里没有对状态码做分支判断,用户看到的只会是一句莫名其妙的“获取数据失败”。
我的处理方法是:在HTTP节点后面加一个条件分支节点,专门判断响应状态码。如果是401,直接输出提示“数据接口授权已过期,请联系管理员更新密钥”;如果是200,才进入下一步解析流程。这个分支看起来简单,但能极大提升工作流的可维护性。
另外一个习惯是:把token配置在扣子应用的密钥管理里,并且设置轮换提醒。即使工作流发布后长期没人管,也能在授权快到期时收到预警。
4.2 抽样日志习惯能救你大命
扣子平台的调试日志只保留一段时间,并且每次运行都会覆盖。这个限制导致一个很尴尬的情况:你前一天明明把接口调通了,第二天再跑发现报错,但日志已经刷新了,找不到原始响应体来对比。
我的经验是,在关键节点(特别是HTTP节点和代码节点)后面都挂一个“调试输出”分支,把原始响应体写入数据库表或者输出到一个固定字段。本地调试时可以直接看到完整响应,生产环境则能保留最近几天的现场数据。用“日志即数据”的思维,很多让人摸不着头脑的问题,往往对比两三天前的原始响应就能一眼看出差异。
4.3 “有时有数据,有时没数据”的诡异问题
还有一类问题最让人头疼:同一个工作流,同一套参数,第一次跑有结果,第二次跑数据全空,第三次又好了。这种“间歇性失效”大概率出在限流上。不少第三方API的免费套餐是按秒或按分钟限制请求次数的,扣子工作流一旦涉及循环分页,每页一次请求,短时间内连续打十几下接口很容易触发限流。
排查方法是在HTTP节点里把响应头的X-RateLimit-Remaining之类的字段值打出来,看看是不是每次执行后剩余配额极速下降。确认是限流后,解决方案就清楚了:降低请求频率(节点加延时)、增加失败重试机制、或者升级到更高额度的API套餐。注意不要用无脑重试,否则会加剧限流,我通常会设置最多重试2次,每次间隔10秒。
5. 往深走一步:从“拉列表”到“持续监控”
5.1 做成定时任务,自动生成日报
上面打通的工作流解决的是一次性统计需求。但当账号数量增加后,“我手动触发一次才能看到结果”慢慢也会变成负担。扣子平台支持定时触发,可以设定每天早上9点自动运行工作流,把统计结果推送到飞书群或者钉钉群。
这样做有个好处:账号数据的“趋势变化”比“绝对数值”更有决策价值。比如某个账号昨天发的视频一夜之间多了3万播放,定时日报可以马上捕捉到这个异动,而不是等你哪天真去查的时候才发现爆款已经过了涨粉红利期。我在实际项目中直接把输出节点接上了飞书消息卡片,每天早上群里自动推送一组“昨日视频数据简报”,团队成员不用打开任何后台就能掌握账号动态。
5.2 多账号批量处理的两种思路
如果要把多个账号一起纳入统计,一种思路是在工作流外层加“批处理入口”,接受一个账号链接列表,循环遍历执行整个工作流。扣子本身支持循环节点,把账号ID解析、视频拉取、统计这些步骤都包在循环体里即可。另一种思路是直接建多个独立的工作流任务,每个账号固定一个工作流,然后定时触发多个任务。两种方式各有侧重:前者灵活但单个任务运行时间较长,后者更稳定但配置工作量线性增加。账号数量在50以内我建议用前者,一次性配置完成,后续只需维护账号清单。
写在最后:我的实际使用心得
这个项目的核心价值不在于“代码写得多漂亮”,而在于把一件原本需要重复手工操作的事情,固化成一个可靠可复用的流程。操作中我最深的体会是:不要为了“炫技”而堆砌复杂的节点结构,扣子工作流的优势恰恰在于“简单明确”、每一步都能被看懂。你把一个节点的逻辑设计得越单一,出了问题就越容易定位;反之,一个节点里塞了太多职责,调试时的体验会非常痛苦。
最后再分享一个小技巧:工作流搭建完成后,一定要做一次“冷启动测试”——把浏览器的缓存、第三方调试工具全部关掉,只用最干净的输入重新跑一遍。很多你以为没有问题的问题,往往只有在模拟真实用户环境时才会暴露出来。测试通过后再发布到生产环境,你会省掉后面大部分夜间紧急修复的时间。
本文还有配套的精品资源,点击获取