# 02影刀rpa成就值监控-定时任务编写
第一步是创建数据库来存放数据,使用AI Ware创建了两张表。省事的是影刀支持使用AI创建,复制提示词粘贴即可。接下来要用工作流创建定时任务,自动获取监控数据。在开始搭建前,需要先准备好数据表,同时要用工作流来完成定时任务。这样每天凌晨3点自动获取数据,手动查看历史数据的问题就解决了。注意核对下字段名和类型,后面写查询和做搜索都需要用到。接着创建一个工作流,这是数据获取的核心。注意核对下字段名,后
为什么要准备数据表
上篇文章介绍了选型,现在开始实际搭建。
在开始搭建前,需要先准备好数据表,同时要用工作流来完成定时任务。设置每天定时运行来抓取数据。
这样每天凌晨3点自动获取数据,手动查看历史数据的问题就解决了。
3个步骤,轻松完成数据准备
步骤1:创建用户表
第一步是创建数据库来存放数据,使用AI Ware创建了两张表。省事的是影刀支持使用AI创建,复制提示词粘贴即可。

创建ac_user表,用来存放待监控的影刀ID。AI提示词如下:
创建一个影刀id和用户信息表(表名:ac_user)存放带监控的影刀id, 包含影刀用户id(personal_id),系统登陆用户(login_user),用户类型(user_type)和创建时间
注意核对下字段名,后面写查询和做搜索都需要用到。

步骤2:创建数据表
创建ac_his_data表,用来存放监控的历史数据。AI提示词如下:
创建一个影刀成就值监控表(表名ac_his_data)用来存放历史的成就数据, 包含
影刀用户名(yd_username/varchar)
等级(level/varchar)
使用天数(use_days/int)
我开发的应用数(app_count/int)
累计开发的指令行数(developed_lines/int)
我开发的应用运行时间(小时)(app_runtime_hours/decimal)
回答问题(answered_questions/int)
回复被采纳(adopted_replies/int)
发表文章(published_articles/int)
当前成就值(current_achievement/int)
升级所需成就值(achievement_to_upgrade/int)
等级所需成就值(achievement_for_level/int)
原始json(origin_json/json)
影刀用户id(personal_id/varchar)
绑定登陆用户(login_user/varchar)
备注(remark/varchar)
创建/更新时间
注意核对下字段名和类型,后面写查询和做搜索都需要用到。

步骤3:添加测试数据
接下来要用工作流创建定时任务,自动获取监控数据。创建之前需要向ac_user表手动添加一条数据做测试。

点击右上角插入数据,填写数据:
-
personal_id:是成就页面登陆后地址栏最后面的一串数字
-
login_user:建议填你账号的手机号
-
user_type:可以填普通
创建工作流:5步搞定数据采集
接着创建一个工作流,这是数据获取的核心。流程图如下:

工作流程:
定时触发器 → 查询数据 → 数据去重 → 获取成就值 → 数据入库
步骤1:定时触发器
设置触发器为每天凌晨3点触发。
成就值刷新时间是每天凌晨,所以只需要配置一个时间就行。
步骤2:查询数据
从ac_user表查询所有状态为普通并且影刀ID不为空的用户。
SQL查询代码:
select ac.personal_id, ac.login_user
from ac_user ac
where ac.user_type ='普通' and ac.personal_id is not null
步骤3:数据去重
通过JS对上一步的结果进行去重,避免重复查询。
JS代码:
// 如果查询结果为空,返回空数组
if(!get_all_yd_id.data || get_all_yd_id.data.length === 0){
return []
}
// 核心去重逻辑
const uniqueUserList = Array.from(
// 用Map存储,key为personal_id,value为对应对象(自动去重)
new Map(get_all_yd_id.data.map(item => [item.personal_id, item])).values()
);
return uniqueUserList;
步骤4:获取成就值
使用循环处理,对每条数据查询成就值。
JS代码:
const BASE_URL = 'https://api.yingdao.com/api/eco/noauth/v1/achieve/info/query';
const headers = {
'accept': '*/*'
};
async function fetchAchievementData(item) {
const personalId = item.personal_id;
let result = {
'登陆用户': item.login_user,
'影刀id': personalId,
'用户名': '',
'等级': '',
'使用天数': null,
'我开发的应用数': null,
'累计开发的指令行数': null,
'我开发的应用运行时间': null,
'回答问题': null,
'回复被采纳': null,
'发表文章': null,
'当前成就值': null,
'升级所需成就值': null,
'等级所需成就值': null,
'备注': ''
}
try {
// 获取用户基本信息
const infoResponse = await fetch(`${BASE_URL}/info?personalId=${personalId}`, {headers});
const infoData = await infoResponse.json();
// 获取应用和社交数据
const appSnsResponse = await fetch(`${BASE_URL}/appSnsData?personalId=${personalId}`, {headers});
const appSnsData = await appSnsResponse.json();
// 获取成就值升级信息
const equityResponse = await fetch(`${BASE_URL}/personalEquity?personalId=${personalId}`, {headers});
const equityData = await equityResponse.json();
const runTime = Number.parseFloat((appSnsData.data.appDevelopStat.ownerAppRunTimeStat.totalStatVal / 3600).toFixed(2))
// 提取数据
result['用户名'] = infoData.data.nickName.trim();
result['等级'] = infoData.data.achieveLevelInfo.achieveLevelName;
result['使用天数'] = infoData.data.accountDays;
result['我开发的应用数'] = appSnsData.data.appDevelopStat.developAppStat.totalStatVal;
result['累计开发的指令行数'] = appSnsData.data.appDevelopStat.developBlockStat.totalStatVal;
result['我开发的应用运行时间'] = runTime;
result['回答问题'] = appSnsData.data.snsStat.answerStat.totalStatVal;
result['回复被采纳'] = appSnsData.data.snsStat.acceptedStat.totalStatVal;
result['发表文章'] = appSnsData.data.snsStat.questionStat.totalStatVal;
result['当前成就值'] = equityData.data.achieveGrowthValInfo.currentGrowthVal;
result['升级所需成就值'] = equityData.data.achieveGrowthValInfo.diffNextLevelGrowthVal;
result['等级所需成就值'] = equityData.data.achieveGrowthValInfo.nextLevelGrowthVal;
result['备注'] = '成功'
} catch (error) {
console.error('获取数据失败:', error);
result['备注'] = '失败'
}
return result;
}
return await fetchAchievementData(item)
步骤5:数据入库
还是使用循环处理,对查询数据进行入库。
SQL插入代码:
INSERT INTO
ac_his_data (
yd_username,
level,
use_days,
app_count,
developed_lines,
app_runtime_hours,
answered_questions,
adopted_replies,
published_articles,
current_achievement,
achievement_to_upgrade,
achievement_for_level,
personal_id,
login_user,
remark
)
VALUES
({{item.用户名}}, {{item.等级}}, {{item.使用天数}}, {{item.我开发的应用数}},
{{item.累计开发的指令行数}}, {{item.我开发的应用运行时间}}, {{item.回答问题}},
{{item.回复被采纳}}, {{item.发表文章}}, {{item.当前成就值}}, {{item.升级所需成就值}},
{{item.等级所需成就值}}, {{item.影刀id}}, {{item.登陆用户}}, {{item.备注}});
模拟运行
点击右上角运行,没有报错则运行成功。
查看数据库可以看到数据已经入库了。

工作流发版
工作流页面点击右上角发版,发版成功。

发版后,工作流就会按照设定的时间自动运行了。
下一步
数据采集已经完成,每天凌晨3点自动获取数据并入库。
下一篇会介绍如何创建应用界面,把数据可视化展示出来。
更多推荐



所有评论(0)