mirror of
https://github.com/lyz05/danmaku.git
synced 2026-02-02 17:59:53 +08:00
feat: 增加删除三个月以前数据库记录的功能
This commit is contained in:
@@ -1,7 +1,7 @@
|
||||
FROM node:16.18.0-alpine
|
||||
ENV TZ Asia/Shanghai
|
||||
|
||||
RUN apk add tzdata && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||
RUN apk add tzdata sqlite sqlite-dev && cp /usr/share/zoneinfo/${TZ} /etc/localtime \
|
||||
&& echo ${TZ} > /etc/timezone \
|
||||
&& apk del tzdata
|
||||
|
||||
|
||||
@@ -73,7 +73,7 @@ async function resolve(req, res) {
|
||||
res.type("application/xml");
|
||||
}
|
||||
// 记录视频信息
|
||||
db.videoinfoInsert({url,title:ret.title})
|
||||
db.videoInfoInsert({url,title:ret.title})
|
||||
//B站视频,直接重定向
|
||||
if (ret.url)
|
||||
res.redirect(ret.url);
|
||||
@@ -86,8 +86,8 @@ async function resolve(req, res) {
|
||||
async function index(req, res) {
|
||||
const urls = [mgtv.example_urls[0], bilibili.example_urls[0], tencentvideo.example_urls[0], youku.example_urls[0], iqiyi.example_urls[0]];
|
||||
const path = req.protocol + "://" + req.headers.host + req.originalUrl;
|
||||
const resolve_info = await db.accesscountquery()
|
||||
const hotlist = await db.hotlistquery()
|
||||
const resolve_info = await db.accessCountQuery()
|
||||
const hotlist = await db.hotlistQuery()
|
||||
res.render("danmaku", {
|
||||
path,
|
||||
urls,
|
||||
@@ -107,4 +107,9 @@ router.get("/", async function (req, res) {
|
||||
if (!req.query.url) index(req, res); else resolve(req, res);
|
||||
});
|
||||
|
||||
router.get("/delete", async function (req, res) {
|
||||
const rows = await db.deleteAccess();
|
||||
res.send(`删除三个月以前的记录,删除了${rows}条记录`);
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
|
||||
135
utils/db.js
135
utils/db.js
@@ -1,19 +1,28 @@
|
||||
const sqlite3 = require('sqlite3').verbose()
|
||||
const sqlite3 = require('sqlite3').verbose();
|
||||
|
||||
let db = new sqlite3.Database(
|
||||
'./db/danmaku.db',
|
||||
sqlite3.OPEN_READWRITE,
|
||||
function (err) {
|
||||
let dbConnected = true; // 连接状态
|
||||
let db;
|
||||
|
||||
if (dbConnected) {
|
||||
db = new sqlite3.Database(
|
||||
'./db/danmaku.db',
|
||||
sqlite3.OPEN_READWRITE,
|
||||
function (err) {
|
||||
if (err) {
|
||||
console.log(err.message)
|
||||
db = null;
|
||||
console.log(err.message);
|
||||
dbConnected = false; // 更新连接状态
|
||||
} else {
|
||||
console.log('Connected to the database successfully');
|
||||
}
|
||||
console.log('connect database successfully')
|
||||
}
|
||||
)
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 封装一个异步的 SQL 查询函数
|
||||
function query(sql, params = []) {
|
||||
function all(sql, params = []) {
|
||||
if (!dbConnected) return []; // 返回默认值
|
||||
return new Promise((resolve, reject) => {
|
||||
db.all(sql, params, (err, rows) => {
|
||||
if (err) {
|
||||
@@ -25,7 +34,8 @@ function query(sql, params = []) {
|
||||
});
|
||||
}
|
||||
|
||||
function insert(sql, params = []) {
|
||||
function run(sql, params = []) {
|
||||
if (!dbConnected) return null; // 返回默认值
|
||||
return new Promise((resolve, reject) => {
|
||||
db.run(sql, params, function(err) {
|
||||
if (err) {
|
||||
@@ -38,79 +48,100 @@ function insert(sql, params = []) {
|
||||
}
|
||||
|
||||
async function errorInsert(record) {
|
||||
if (!dbConnected) return null; // 返回默认值
|
||||
try {
|
||||
const rows = await insert("INSERT INTO Error(ip, url, err, created_at) VALUES(?, ?, ?, datetime('now'))",
|
||||
[record.ip,record.url,record.err]
|
||||
)
|
||||
return rows
|
||||
}catch (err) {
|
||||
const rows = await run("INSERT INTO Error(ip, url, err, created_at) VALUES(?, ?, ?, datetime('now'))",
|
||||
[record.ip, record.url, record.err]
|
||||
);
|
||||
return rows;
|
||||
} catch (err) {
|
||||
console.error('Error during data insertion:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function accessInsert(record) {
|
||||
if (!dbConnected) return null; // 返回默认值
|
||||
try {
|
||||
const rows = await insert("INSERT INTO Access(ip, url, UA, created_at) VALUES(?, ?, ?, datetime('now'))",
|
||||
[record.ip,record.url,record.UA]
|
||||
)
|
||||
return rows
|
||||
}catch (err) {
|
||||
const rows = await run("INSERT INTO Access(ip, url, UA, created_at) VALUES(?, ?, ?, datetime('now'))",
|
||||
[record.ip, record.url, record.UA]
|
||||
);
|
||||
return rows;
|
||||
} catch (err) {
|
||||
console.error('Error during data insertion:', err.message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
async function accesscountquery() {
|
||||
async function accessCountQuery() {
|
||||
if (!dbConnected) return {'today_visited': "null", 'lastday_visited': "null", 'month_visited': "null"}; // 返回默认值
|
||||
try {
|
||||
const ret = await query("SELECT * FROM AccessStatistics");
|
||||
const ret = await all("SELECT * FROM AccessStatistics");
|
||||
return ret[0];
|
||||
} catch (err) {
|
||||
console.error('Error during data query:', err.message);
|
||||
return {'today_visited':"null",'lastday_visited':"null",'month_visited':"null"};
|
||||
return {'today_visited': "null", 'lastday_visited': "null", 'month_visited': "null"};
|
||||
}
|
||||
}
|
||||
|
||||
async function videoinfoInsert(record) {
|
||||
async function videoInfoInsert(record) {
|
||||
if (!dbConnected) return null; // 返回默认值
|
||||
try {
|
||||
const rows = await insert("INSERT INTO videoinfo(url, title) VALUES(?, ?)",
|
||||
[record.url,record.title]
|
||||
)
|
||||
return rows
|
||||
}catch (err) {
|
||||
const rows = await run("INSERT INTO videoinfo(url, title) VALUES(?, ?)",
|
||||
[record.url, record.title]
|
||||
);
|
||||
return rows;
|
||||
} catch (err) {
|
||||
console.error('Error during data insertion:', err.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function hotlistquery() {
|
||||
async function hotlistQuery() {
|
||||
if (!dbConnected) return []; // 返回默认值
|
||||
try {
|
||||
return await query("SELECT * FROM YesterdayHotlist;");
|
||||
return await all("SELECT * FROM YesterdayHotlist;");
|
||||
} catch (err) {
|
||||
console.error('Error during data query:', err.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// 删除三个月以前的记录Access,Error
|
||||
async function deleteAccess() {
|
||||
if (!dbConnected) return null; // 返回默认值
|
||||
try {
|
||||
// vacuum
|
||||
await run("vacuum");
|
||||
let result,changes = 0;
|
||||
result = await run("DELETE FROM Access WHERE created_at < datetime('now', '-3 month')");
|
||||
changes += result.changes;
|
||||
result = await run("DELETE FROM Error WHERE created_at < datetime('now', '-3 month')");
|
||||
changes += result.changes;
|
||||
// vacuum
|
||||
await run("vacuum");
|
||||
return changes; // 提取删除的行数
|
||||
} catch (err) {
|
||||
console.error('Error during data deletion:', err.message);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const ret = await hotlistquery()
|
||||
console.log(ret)
|
||||
const ret = await deleteAccess();
|
||||
console.log(ret);
|
||||
}
|
||||
|
||||
if (!module.parent) {
|
||||
accessInsert(
|
||||
{
|
||||
'ip': '127.0.0.1',
|
||||
'url': 'https://www.mgtv.com/b/336727/8087768.html',
|
||||
'UA': 'PostmanRuntime/7.37.3'
|
||||
}
|
||||
)
|
||||
|
||||
videoinfoInsert(
|
||||
{
|
||||
'url': 'https://www.mgtv.com/b/336727/8087768.html',
|
||||
'title': '婚前21天'
|
||||
}
|
||||
)
|
||||
main()
|
||||
accessInsert({
|
||||
'ip': '127.0.0.1',
|
||||
'url': 'https://www.mgtv.com/b/336727/8087768.html',
|
||||
'UA': 'PostmanRuntime/7.37.3'
|
||||
});
|
||||
|
||||
videoInfoInsert({
|
||||
'url': 'https://www.mgtv.com/b/336727/8087768.html',
|
||||
'title': '婚前21天'
|
||||
});
|
||||
|
||||
main();
|
||||
}
|
||||
|
||||
module.exports = { errorInsert, accessInsert, accesscountquery, videoinfoInsert, hotlistquery};
|
||||
module.exports = { errorInsert, accessInsert, accessCountQuery, videoInfoInsert, hotlistQuery, deleteAccess };
|
||||
|
||||
Reference in New Issue
Block a user