Files
ggl/scripts/redistribute-videos.cjs
2025-09-23 07:35:11 +00:00

124 lines
3.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

const sqlite3 = require('sqlite3').verbose();
// 数据库连接
const db = new sqlite3.Database('goguryeo_video.db');
// 重新分配视频到不同分类
const redistributionPlan = [
// 将一些动物视频重新分类为传统艺术(表演类)
{
videoIds: [17], // 巨肺狗子(表演性质)
newCategory: 2, // 传统艺术
reason: '表演性质的内容'
},
// 将一些动物视频重新分类为语言学习(教育性质)
{
videoIds: [11, 15], // 小牛叫妈妈、水獭
newCategory: 3, // 语言学习
reason: '教育和学习性质的内容'
},
// 将一些动物视频重新分类为考古发现(自然探索)
{
videoIds: [9, 18], // 小老虎、小象
newCategory: 4, // 考古发现
reason: '自然探索和发现类内容'
},
// 将一些动物视频重新分类为其他
{
videoIds: [16, 20], // 小肥啾、小猫咪
newCategory: 6, // 其他
reason: '综合性内容'
}
];
// 更新视频分类
function updateVideoCategory(videoId, newCategory) {
return new Promise((resolve, reject) => {
const sql = 'UPDATE videos SET category = ? WHERE id = ?';
db.run(sql, [newCategory, videoId], function(err) {
if (err) {
reject(err);
} else {
resolve(this.changes);
}
});
});
}
// 获取视频信息
function getVideoInfo(videoId) {
return new Promise((resolve, reject) => {
const sql = 'SELECT id, title, category FROM videos WHERE id = ?';
db.get(sql, [videoId], (err, row) => {
if (err) {
reject(err);
} else {
resolve(row);
}
});
});
}
// 主函数
async function main() {
try {
console.log('开始重新分配视频分类...');
for (const plan of redistributionPlan) {
console.log(`\n重新分配到分类 ${plan.newCategory}: ${plan.reason}`);
for (const videoId of plan.videoIds) {
try {
// 获取视频信息
const videoInfo = await getVideoInfo(videoId);
if (!videoInfo) {
console.log(`视频 ID ${videoId} 不存在`);
continue;
}
console.log(` ${videoInfo.title} (ID: ${videoId}) 从分类 ${videoInfo.category} -> ${plan.newCategory}`);
// 更新分类
await updateVideoCategory(videoId, plan.newCategory);
} catch (error) {
console.error(`更新视频 ${videoId} 失败:`, error.message);
}
}
}
console.log('\n重新分配完成');
// 显示最终的分类统计
console.log('\n=== 最终分类统计 ===');
const sql = `
SELECT c.name, COUNT(v.id) as video_count
FROM categories c
LEFT JOIN videos v ON c.id = v.category
GROUP BY c.id, c.name
ORDER BY c.id
`;
db.all(sql, [], (err, rows) => {
if (err) {
console.error('查询统计失败:', err);
} else {
rows.forEach(row => {
console.log(`${row.name}: ${row.video_count} 个视频`);
});
}
db.close();
});
} catch (error) {
console.error('重新分配失败:', error);
db.close();
}
}
// 运行脚本
if (require.main === module) {
main();
}
module.exports = { main };