chore: refresh internal release package
This commit is contained in:
parent
37f7e0b5e6
commit
db95a1f565
@ -26,9 +26,10 @@
|
||||
}
|
||||
|
||||
// src/background/auth/state.ts
|
||||
function createLoggedOutAuthState(config) {
|
||||
function createLoggedOutAuthState(config, lastError) {
|
||||
return {
|
||||
isAuthenticated: false,
|
||||
lastError: lastError ?? null,
|
||||
resource: config?.apiResource ?? null
|
||||
};
|
||||
}
|
||||
@ -64,6 +65,14 @@
|
||||
if (!isAuthenticated) {
|
||||
return createLoggedOutAuthState(config);
|
||||
}
|
||||
try {
|
||||
await options.authClient.getAccessToken(config.apiResource);
|
||||
} catch (error) {
|
||||
return createLoggedOutAuthState(
|
||||
config,
|
||||
error instanceof Error ? error.message : String(error)
|
||||
);
|
||||
}
|
||||
const claims = await options.authClient.getIdTokenClaims();
|
||||
return createLoggedInAuthState(claims, config);
|
||||
},
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@ -37,9 +37,9 @@
|
||||
|
||||
4. 点击左上角出现的 **"加载已解压的扩展程序"**
|
||||
|
||||
5. 选择刚才解压出来的文件夹里的 **`dist-release`** 文件夹
|
||||
5. 选择刚才解压出来的插件文件夹
|
||||
|
||||
⚠️ **重要**:必须选择 `dist-release` 这个子文件夹,不要选外层文件夹
|
||||
⚠️ **重要**:如果文件夹里能看到 `manifest.json`、`content`、`background`、`popup` 这些文件和文件夹,说明选对了。
|
||||
|
||||
6. 看到绿色的插件卡片出现,就装好了!
|
||||
|
||||
@ -72,14 +72,43 @@ https://xingtu.cn/ad/creator/market
|
||||
|
||||
## 📝 主要功能
|
||||
|
||||
### 1️⃣ 导出 Excel 表格
|
||||
### 1️⃣ 导出基础数据(基础CSV)
|
||||
|
||||
- 勾选你想导出的达人(不勾就选全部)
|
||||
- 选择范围:当前页 / 前5页 / 全部
|
||||
- 点击 **"导出CSV"**
|
||||
- 文件自动下载到电脑的"下载"文件夹
|
||||
|
||||
### 2️⃣ 提交批次
|
||||
### 2️⃣ 导出画像数据(画像CSV)
|
||||
|
||||
当你需要导出达人的画像、内容数据、效果预估时使用:
|
||||
|
||||
- 先勾选你想导出画像的达人
|
||||
- 选择范围:当前页 / 前5页 / 全部
|
||||
- 点击 **"导出画像CSV"**
|
||||
- 等待下载完成
|
||||
- 文件自动下载到电脑的"下载"文件夹
|
||||
|
||||
⚠️ **重要**:画像导出必须先勾选达人,因为它会额外请求达人详情页数据,不能默认导出全部。
|
||||
|
||||
**画像CSV包含**:
|
||||
- 观众画像、粉丝画像、铁粉画像
|
||||
- 内容数据:个人视频/星图视频的播放量中位数、完播率、互动率、发布作品、平均时长、平均点赞、平均评论、平均转发
|
||||
- 效果预估:不同视频时长的预期CPM、预期CPE、预期播放量、爆文率
|
||||
- 秒思api数据:看后搜率、看后搜数、新增A3数、新增A3率、CPA3、cp_search
|
||||
|
||||
### 3️⃣ 按ID导出画像数据
|
||||
|
||||
当你想批量查询特定达人ID的画像数据时使用:
|
||||
|
||||
- 点击 **"按ID导出画像CSV"**
|
||||
- 在弹出的对话框中输入达人ID(每行一个)
|
||||
- 点击确认
|
||||
- 等待下载完成
|
||||
|
||||
**适用场景**:已知一批达人星图ID,需要批量导出这些达人的画像CSV。
|
||||
|
||||
### 4️⃣ 提交批次
|
||||
|
||||
- 勾选你想提交的达人
|
||||
- 点击 **"提交批次"**
|
||||
@ -100,7 +129,7 @@ https://xingtu.cn/ad/creator/market
|
||||
⚠️ **如果重新加载后还是旧版本**:
|
||||
- 先点击插件卡片的 **"移除"** 删除旧版本
|
||||
- 然后重新点击 **"加载已解压的扩展程序"**
|
||||
- 再次选择 `dist-release` 文件夹
|
||||
- 再次选择新解压出来的插件文件夹
|
||||
|
||||
---
|
||||
|
||||
@ -136,4 +165,4 @@ A: 重新解压压缩包,然后到 `chrome://extensions` 点"重新加载"
|
||||
2. 页面截图
|
||||
3. 扩展 ID(从 chrome://extensions 里看)
|
||||
|
||||
**记住正确的 ID:`**pkjopdibdnomhogjheclhnknmejccffg**`
|
||||
**记住正确的 ID:`pkjopdibdnomhogjheclhnknmejccffg`**
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@ -68,6 +68,9 @@ const BUSINESS_VIDEO_METRIC_LAYOUTS: Array<{
|
||||
{ key: "averageShare", label: "平均转发" }
|
||||
];
|
||||
|
||||
const BUSINESS_VIDEO_SECTION_LABEL = "内容数据";
|
||||
const BUSINESS_ESTIMATE_SECTION_LABEL = "效果预估";
|
||||
|
||||
const BUSINESS_ESTIMATE_LAYOUTS: Array<{
|
||||
key: BusinessAbilityDurationKind;
|
||||
label: string;
|
||||
@ -108,14 +111,14 @@ function buildBusinessAbilityColumns(): AudienceProfileCsvColumn[] {
|
||||
return [
|
||||
...BUSINESS_VIDEO_LAYOUTS.flatMap((videoLayout) =>
|
||||
BUSINESS_VIDEO_METRIC_LAYOUTS.map((metricLayout) => ({
|
||||
header: `商业能力-${videoLayout.label}-${metricLayout.label}`,
|
||||
header: `${BUSINESS_VIDEO_SECTION_LABEL}-${videoLayout.label}-${metricLayout.label}`,
|
||||
readValue: (row: AudienceProfileExportRow) =>
|
||||
readBusinessVideoValue(row, videoLayout.key, metricLayout.key)
|
||||
}))
|
||||
),
|
||||
...BUSINESS_ESTIMATE_LAYOUTS.flatMap((durationLayout) =>
|
||||
BUSINESS_ESTIMATE_METRIC_LAYOUTS.map((metricLayout) => ({
|
||||
header: `商业能力-${durationLayout.label}-${metricLayout.label}`,
|
||||
header: `${BUSINESS_ESTIMATE_SECTION_LABEL}-${durationLayout.label}-${metricLayout.label}`,
|
||||
readValue: (row: AudienceProfileExportRow) =>
|
||||
readBusinessEstimateValue(row, durationLayout.key, metricLayout.key)
|
||||
}))
|
||||
|
||||
@ -45,31 +45,31 @@ const RATE_COLUMNS: CsvColumn[] = [
|
||||
|
||||
const BACKEND_METRIC_COLUMNS: CsvColumn[] = [
|
||||
{
|
||||
header: "看后搜率",
|
||||
header: "秒思api-看后搜率",
|
||||
readValue: (record: MarketRecord) =>
|
||||
record.backendMetrics?.afterViewSearchRate ?? ""
|
||||
},
|
||||
{
|
||||
header: "看后搜数",
|
||||
header: "秒思api-看后搜数",
|
||||
readValue: (record: MarketRecord) =>
|
||||
record.backendMetrics?.afterViewSearchCount ?? ""
|
||||
},
|
||||
{
|
||||
header: "新增A3数",
|
||||
header: "秒思api-新增A3数",
|
||||
readValue: (record: MarketRecord) =>
|
||||
record.backendMetrics?.a3IncreaseCount ?? ""
|
||||
},
|
||||
{
|
||||
header: "新增A3率",
|
||||
header: "秒思api-新增A3率",
|
||||
readValue: (record: MarketRecord) =>
|
||||
record.backendMetrics?.newA3Rate ?? ""
|
||||
},
|
||||
{
|
||||
header: "CPA3",
|
||||
header: "秒思api-CPA3",
|
||||
readValue: (record: MarketRecord) => record.backendMetrics?.cpa3 ?? ""
|
||||
},
|
||||
{
|
||||
header: "cp_search",
|
||||
header: "秒思api-cp_search",
|
||||
readValue: (record: MarketRecord) => record.backendMetrics?.cpSearch ?? ""
|
||||
}
|
||||
];
|
||||
|
||||
@ -91,11 +91,13 @@ 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).toContain("效果预估-1-20s视频-预期CPM");
|
||||
expect(headerLine).toContain("效果预估-20-60s视频-爆文率");
|
||||
expect(headerLine).toContain("效果预估-60s以上视频-预期播放量");
|
||||
expect(headerLine).not.toContain("商业能力-个人视频-播放量中位数");
|
||||
expect(headerLine).not.toContain("商业能力-20-60s视频-预期CPM");
|
||||
expect(headerLine).toContain("观众画像-男性占比");
|
||||
expect(headerLine).toContain("粉丝画像-女性占比");
|
||||
expect(headerLine).not.toContain("铁粉画像-男性占比");
|
||||
@ -110,10 +112,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.0");
|
||||
expect(readCsvValue(csv, "商业能力-20-60s视频-爆文率")).toBe("缺失");
|
||||
expect(readCsvValue(csv, "内容数据-个人视频-播放量中位数")).toBe("3738.4w");
|
||||
expect(readCsvValue(csv, "内容数据-星图视频-平均转发")).toBe("68.4w");
|
||||
expect(readCsvValue(csv, "效果预估-1-20s视频-预期CPM")).toBe("120.0");
|
||||
expect(readCsvValue(csv, "效果预估-20-60s视频-爆文率")).toBe("缺失");
|
||||
});
|
||||
|
||||
test("leaves distribution cells empty when profile loading fails", () => {
|
||||
|
||||
@ -16,12 +16,12 @@ describe("csv-exporter", () => {
|
||||
"21-60s报价",
|
||||
"单视频看后搜率",
|
||||
"个人视频看后搜率",
|
||||
"看后搜率",
|
||||
"看后搜数",
|
||||
"新增A3数",
|
||||
"新增A3率",
|
||||
"CPA3",
|
||||
"cp_search"
|
||||
"秒思api-看后搜率",
|
||||
"秒思api-看后搜数",
|
||||
"秒思api-新增A3数",
|
||||
"秒思api-新增A3率",
|
||||
"秒思api-CPA3",
|
||||
"秒思api-cp_search"
|
||||
].join(",")
|
||||
);
|
||||
});
|
||||
@ -61,12 +61,12 @@ describe("csv-exporter", () => {
|
||||
"21-60s报价",
|
||||
"单视频看后搜率",
|
||||
"个人视频看后搜率",
|
||||
"看后搜率",
|
||||
"看后搜数",
|
||||
"新增A3数",
|
||||
"新增A3率",
|
||||
"CPA3",
|
||||
"cp_search"
|
||||
"秒思api-看后搜率",
|
||||
"秒思api-看后搜数",
|
||||
"秒思api-新增A3数",
|
||||
"秒思api-新增A3率",
|
||||
"秒思api-CPA3",
|
||||
"秒思api-cp_search"
|
||||
].join(",")
|
||||
);
|
||||
expect(rowLine).toBe(
|
||||
@ -96,12 +96,12 @@ describe("csv-exporter", () => {
|
||||
"粉丝数",
|
||||
"单视频看后搜率",
|
||||
"个人视频看后搜率",
|
||||
"看后搜率",
|
||||
"看后搜数",
|
||||
"新增A3数",
|
||||
"新增A3率",
|
||||
"CPA3",
|
||||
"cp_search"
|
||||
"秒思api-看后搜率",
|
||||
"秒思api-看后搜数",
|
||||
"秒思api-新增A3数",
|
||||
"秒思api-新增A3率",
|
||||
"秒思api-CPA3",
|
||||
"秒思api-cp_search"
|
||||
].join(",")
|
||||
);
|
||||
expect(rowLine).toBe("Alice,100w,,,,,,,,");
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user