9b395f5cc3
E2E Headed Chrome / e2e-headed (macos-15) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (ubuntu-latest) (push) Has been cancelled
E2E Headed Chrome / e2e-headed (windows-latest) (push) Has been cancelled
CI / build (macos-latest) (push) Has been cancelled
CI / build (ubuntu-latest) (push) Has been cancelled
CI / build (windows-latest) (push) Has been cancelled
CI / unit-test (push) Has been cancelled
CI / bun-test (push) Has been cancelled
CI / adapter-test (push) Has been cancelled
CI / smoke-test (macos-latest) (push) Has been cancelled
CI / smoke-test (ubuntu-latest) (push) Has been cancelled
Security Audit / audit (push) Has been cancelled
Build Chrome Extension / build (push) Has been cancelled
Trigger Website Rebuild (Docs Updated) / dispatch (push) Has been cancelled
77 lines
3.4 KiB
JavaScript
77 lines
3.4 KiB
JavaScript
/**
|
|
* Xiaohongshu Creator Analytics — account-level metrics overview.
|
|
*
|
|
* Uses the creator.xiaohongshu.com internal API (cookie auth).
|
|
* Returns 7-day and 30-day aggregate stats: views, likes, collects,
|
|
* comments, shares, new followers, and daily trend data.
|
|
*
|
|
* Requires: logged into creator.xiaohongshu.com in Chrome.
|
|
*/
|
|
import { cli, Strategy } from '@jackwener/opencli/registry';
|
|
import { EmptyResultError } from '@jackwener/opencli/errors';
|
|
cli({
|
|
site: 'xiaohongshu',
|
|
name: 'creator-stats',
|
|
access: 'read',
|
|
description: '小红书创作者数据总览 (观看/点赞/收藏/评论/分享/涨粉,含每日趋势)',
|
|
domain: 'creator.xiaohongshu.com',
|
|
strategy: Strategy.COOKIE,
|
|
browser: true,
|
|
navigateBefore: false,
|
|
args: [
|
|
{
|
|
name: 'period',
|
|
type: 'string',
|
|
default: 'seven',
|
|
help: 'Stats period: seven or thirty',
|
|
choices: ['seven', 'thirty'],
|
|
},
|
|
],
|
|
columns: ['metric', 'total', 'trend'],
|
|
func: async (page, kwargs) => {
|
|
const period = kwargs.period || 'seven';
|
|
// Navigate to creator center for cookie context
|
|
await page.goto('https://creator.xiaohongshu.com/new/home');
|
|
const data = await page.evaluate(`
|
|
async () => {
|
|
try {
|
|
const resp = await fetch('/api/galaxy/creator/data/note_detail_new', {
|
|
credentials: 'include',
|
|
});
|
|
if (!resp.ok) return { error: 'HTTP ' + resp.status };
|
|
return await resp.json();
|
|
} catch (e) {
|
|
return { error: e.message };
|
|
}
|
|
}
|
|
`);
|
|
if (data?.error) {
|
|
throw new Error(data.error + '. Are you logged into creator.xiaohongshu.com?');
|
|
}
|
|
if (!data?.data) {
|
|
throw new Error('Unexpected response structure');
|
|
}
|
|
const stats = data.data[period];
|
|
if (!stats) {
|
|
throw new EmptyResultError('xiaohongshu creator-stats', `No data for period "${period}". Available: ${Object.keys(data.data).join(', ')}`);
|
|
}
|
|
// Format daily trend as sparkline-like summary
|
|
const formatTrend = (list) => {
|
|
if (!list || !list.length)
|
|
return '-';
|
|
return list.map((d) => d.count).join(' → ');
|
|
};
|
|
return [
|
|
{ metric: '观看数 (views)', total: stats.view_count ?? 0, trend: formatTrend(stats.view_list) },
|
|
{ metric: '平均观看时长 (avg view time ms)', total: stats.view_time_avg ?? 0, trend: formatTrend(stats.view_time_list) },
|
|
{ metric: '主页访问 (home views)', total: stats.home_view_count ?? 0, trend: formatTrend(stats.home_view_list) },
|
|
{ metric: '点赞数 (likes)', total: stats.like_count ?? 0, trend: formatTrend(stats.like_list) },
|
|
{ metric: '收藏数 (collects)', total: stats.collect_count ?? 0, trend: formatTrend(stats.collect_list) },
|
|
{ metric: '评论数 (comments)', total: stats.comment_count ?? 0, trend: formatTrend(stats.comment_list) },
|
|
{ metric: '弹幕数 (danmaku)', total: stats.danmaku_count ?? 0, trend: '-' },
|
|
{ metric: '分享数 (shares)', total: stats.share_count ?? 0, trend: formatTrend(stats.share_list) },
|
|
{ metric: '涨粉数 (new followers)', total: stats.rise_fans_count ?? 0, trend: formatTrend(stats.rise_fans_list) },
|
|
];
|
|
},
|
|
});
|