feat: export business ability metrics

This commit is contained in:
2026-05-18 18:27:47 +08:00
parent ca9ce02db5
commit 249e6a5971
7 changed files with 643 additions and 3 deletions
+48
View File
@@ -35,6 +35,45 @@ describe("audience-profile-csv", () => {
status: "success"
}
},
businessAbility: {
estimates: {
oneToTwenty: {
expectedCpe: "2.1",
expectedCpm: "120",
expectedPlay: "250w",
hotRate: "100%"
},
twentyToSixty: {
expectedCpe: "3.7",
expectedCpm: "212",
expectedPlay: "250w",
hotRate: "100%"
}
},
status: "success",
videos: {
personalVideo: {
averageComment: "4.5w",
averageDuration: "150s",
averageLike: "113.2w",
averageShare: "26.5w",
finishRate: "15.8%",
interactionRate: "3.9%",
medianPlay: "3738.4w",
publishedItems: "<5"
},
xingtuVideo: {
averageComment: "5.1w",
averageDuration: "170s",
averageLike: "150.3w",
averageShare: "68.4w",
finishRate: "19.9%",
interactionRate: "5.5%",
medianPlay: "4059.7w",
publishedItems: "<5"
}
}
},
record: {
authorId: "123",
authorName: "达人 A",
@@ -52,6 +91,11 @@ describe("audience-profile-csv", () => {
expect(headerLine).toContain("达人信息,连接用户数");
expect(headerLine).not.toContain("抓取状态");
expect(headerLine).not.toContain("失败原因");
expect(headerLine).toContain("商业能力-个人视频-播放量中位数");
expect(headerLine).toContain("商业能力-星图视频-平均转发");
expect(headerLine).toContain("商业能力-1-20s视频-预期CPM");
expect(headerLine).toContain("商业能力-20-60s视频-爆文率");
expect(headerLine).toContain("商业能力-60s以上视频-预期播放量");
expect(headerLine).toContain("观众画像-男性占比");
expect(headerLine).toContain("粉丝画像-女性占比");
expect(headerLine).not.toContain("铁粉画像-男性占比");
@@ -63,6 +107,10 @@ describe("audience-profile-csv", () => {
expect(headerLine).not.toContain("兴趣TOP");
expect(rowLine).toContain("71.7%");
expect(rowLine).toContain("60%");
expect(readCsvValue(csv, "商业能力-个人视频-播放量中位数")).toBe("3738.4w");
expect(readCsvValue(csv, "商业能力-星图视频-平均转发")).toBe("68.4w");
expect(readCsvValue(csv, "商业能力-1-20s视频-预期CPM")).toBe("120");
expect(readCsvValue(csv, "商业能力-20-60s视频-爆文率")).toBe("100%");
});
test("leaves distribution cells empty when profile loading fails", () => {