// const { createServer } = require('http') const closeWithGrace = require('close-with-grace') const dbPool = require('./src/db_pool') const apiResult = require('./src/api_result') const fs = require('fs'); const sqlFile = 'sql/sqls.sql'; console.log('Starting ...'); // const server = createServer(function (req, res) { // if (closeWithGrace.closing) { // res.statusCode = 503 // res.setHeader('Connection', 'close') // res.end('try again later') // return // } // res.end('hello world') // }) // server.listen(3000) async function doQuery() { try { // from: https://love.163.com/webapp/special/answerbook/#/ask let result = await apiResult.query({ method: 'POST', url: "https://love.163.com/open/api/activity/answerBook/generateResult", timeout: 3000, headers: { "content-type": "application/x-www-form-urlencoded", "user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/105.0.0.0 Safari/537.36 Edg/105.0.1343.42", "origin": "https://love.163.com", "referer": "https://love.163.com/webapp/special/answerbook/", }, form: { "resultPicUrl": "https://lovepicture.nosdn.127.net/-6910837894781852896?imageView" } }) let resultJSON = JSON.parse(result); // console.log(resultJSON); let data = resultJSON.data.activityVo; if (!!data.resultDetial) { let sql = `INSERT INTO answer (wy_id, text) VALUES (${data.resultCode}, '${data.resultDetial}');`; // console.log(data.resultCode, data.resultDetial, sql); console.log(data.resultCode, data.resultDetial); await dbPool.query(sql); // appendFile(sql); } } catch (e) { console.error(`[error] code: ${e.code}, message: ${e.message}`); } } async function sleep(ms) { await new Promise(function (resolve, reject) { setTimeout(resolve, ms); }); } let isExit = false; async function main() { for (let i = 0; i < 1000000; i++) { if (isExit) return; await doQuery(); await sleep(2500); } dbPool.close(); } // main(); function appendFile(string) { fs.appendFile('sqls.sql', `${string}\n`, (err) => { if (err) { console.log('出错') } else { console.log('追加内容') } }) } // 答案转sql function convertAnswerTxtToSql() { let lines = fs.readFileSync('answer.txt', 'utf8').split(/[\n\r]/); lines = Array.from(new Set(lines)).filter(s => !!s).map(s => { return `INSERT INTO answer (wy_id, text) VALUES (NULL, '${s.replace('。', '')}');`; }).sort(); fs.writeFileSync('answer.sql', lines.join('\n')); } // convertAnswerTxtToSql(); // 去重 function quchong() { let lines = fs.readFileSync(sqlFile, 'utf8').split(/[\n\r]/); lines = Array.from(new Set(lines)).filter(s => !!s).sort(); fs.writeFileSync(sqlFile, lines.join('\n')); } // 执行SQL async function readSQLAndExecute() { let lines = fs.readFileSync(sqlFile, 'utf8').split(/[\n\r]/); let count = 0; let errCount = 0; for (let i = 0; i < lines.length; i++) { const sql = lines[i].trim(); try { await dbPool.query(sql); } catch (err) { errCount++; // console.error(err); } console.log(`count: ${++count}, errCount: ${errCount}, total: ${lines.length}`); await sleep(1); } console.log("done"); } quchong(); readSQLAndExecute(); closeWithGrace({ delay: 1000 }, function (opts, cb) { console.log(opts, 'closing') isExit = true; // server.close(cb) dbPool.close(); })