UNPKG

use-on-demand

Version:
210 lines 11 kB
import { __assign } from "tslib"; import request from 'request'; import path from 'path'; import { LowDB_Helper } from '../../base/lowdb/LowDB_Helper'; import { PythonShell } from 'python-shell'; var fetch = require('node-fetch'); var write = LowDB_Helper.write, read = LowDB_Helper.read; export function bind_other_routes(r_db) { // 测试 r_db.get('/', function (req, res, next) { res.send(read.db.getAll()); }); /** * MP4文件 * 1. 参考资料:[node.js - Using Nodejs to Serve an MP4 Video File - Stack Overflow](https://stackoverflow.com/a/60303389/6264260) */ r_db.get('/video/Alternate-Realities.mp4', function (req, res, next) { res.setHeader('Content-Type', 'video/mp4'); var mp4_filename = 'Alternate Realities.mp4'; res.status(200).sendFile(path.join("I:\\Steam\\steamapps\\workshop\\content\\431960\\2516087390\\" + mp4_filename), function (err) { if (err) { console.log('第一次发送失败'); res.status(200).sendFile(path.join(__dirname, "../../assets/video/ar/" + mp4_filename), function (err) { if (err) { console.log('第二次发送失败'); } else { console.log('第二次发送成功'); } }); } else { console.log('第一次发送成功'); } }); }); /** * 微博热搜条目 * 1. 参考资料: * 1. 汇总:(https://www.zhihu.com/question/38155682) * 2. 目前所使用的【源】:(https://weibo.zhaoyizhe.com/) * * * 出现的一些问题: * 1. 中间有一段时间,出现了【乱码】 * 1. 原因: * 1. 后来猜测,应该是【gzip】这个环节,进行了编码的原因。 * 1. 我本地,之前一开始,并没有做解码操作。 * 2. 解决方案: * 1. 后来,使用【node-fetch】+【resp.text()的Promise】,解决了这个问题。 */ r_db.get('/resou/weibo', function (req, res, next) { var query = req.query; console.log('query', query); var _date = query.date || '2021-08-07'; var use_fetch = true; var convert = function (from, to) { return (function (str) { return (Buffer.from(str, from).toString(to)); }); }; var utf8ToHex = convert('utf8', 'hex'); var hexToUtf8 = convert('hex', 'utf8'); if (use_fetch) { // 其实,就是从下面,粘贴过来的 var 从其它地方_粘过来的配置_似乎可行 = { Host: 'google-api.zhaoyizhe.com', Connection: 'keep-alive', // 'sec-ch-ua' : `" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"`, Accept: "application/json, text/plain, */*", // 'sec-ch-ua-mobile': `?0`, 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", 'Origin': "https://weibo.zhaoyizhe.com", 'Sec-Fetch-Site': "same-site", 'Sec-Fetch-Mode': "cors", 'Sec-Fetch-Dest': "empty", 'Referer': "https://weibo.zhaoyizhe.com/", 'Accept-Encoding': "gzip, deflate, br", 'Accept-Language': "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7", }; // 从【Chrome】copy而来的。 fetch("https://google-api.zhaoyizhe.com/google-api/index/mon/sec?date=" + _date, { 'headers': __assign({ 'accept': 'application/json, text/plain, */*', 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', 'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"', 'sec-ch-ua-mobile': '?0', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-site' }, 从其它地方_粘过来的配置_似乎可行), 'referrer': 'https://weibo.zhaoyizhe.com/', 'referrerPolicy': 'strict-origin-when-cross-origin', 'body': null, 'method': 'GET', 'mode': 'cors', }).then(function (resp) { console.log('resp', resp); console.log('返回body', resp.body); // // // resp.text().then(function (text) { console.log('返回text()', text); res.send(text); }); }, function (err) { console.error('err', err); }); } else { // 自己写的。 request({ uri: "https://google-api.zhaoyizhe.com/google-api/index/mon/sec?date=" + _date, method: 'GET', headers: { Host: 'google-api.zhaoyizhe.com', Connection: 'keep-alive', 'sec-ch-ua': "\" Not;A Brand\";v=\"99\", \"Google Chrome\";v=\"91\", \"Chromium\";v=\"91\"", Accept: "application/json, text/plain, */*", 'sec-ch-ua-mobile': "?0", 'User-Agent': "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36", 'Origin': "https://weibo.zhaoyizhe.com", 'Sec-Fetch-Site': "same-site", 'Sec-Fetch-Mode': "cors", 'Sec-Fetch-Dest': "empty", 'Referer': "https://weibo.zhaoyizhe.com/", 'Accept-Encoding': "gzip, deflate, br", 'Accept-Language': "en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7", }, }, function (err, resp) { // WARN 之所以损坏,是不是因为【GZIP】了??? console.log('resp', resp); console.log('body', resp.body); var utf8_str = hexToUtf8(resp.body); console.log('utf8_str', utf8_str); res.send(utf8_str); }); } }); // // // // // // /** * * * */ r_db.get('/resou/douyu', function (req, res, next) { fetch('https://www.douyu.com/japi/search/api/getHotList', { 'headers': { 'accept': 'application/json, text/plain, */*', 'accept-language': 'en-US,en;q=0.9,zh-CN;q=0.8,zh;q=0.7', 'sec-ch-ua': '" Not;A Brand";v="99", "Google Chrome";v="91", "Chromium";v="91"', 'sec-ch-ua-mobile': '?0', 'sec-fetch-dest': 'empty', 'sec-fetch-mode': 'cors', 'sec-fetch-site': 'same-origin', 'x-requested-with': 'XMLHttpRequest', 'cookie': 'acf_did=86bad5d72d712a599efc551700071501; dy_did=86bad5d72d712a599efc551700071501; PHPSESSID=qvkk473g5g69qgnvs8cts6dt86; acf_avatar=https%3A%2F%2Fapic.douyucdn.cn%2Fupload%2Favatar%2Fdefault%2F12_; Hm_lvt_e99aee90ec1b2106afe7ec3b199020a7=1626241567; ext=1%257C1258%257C341%257Czb-jc; frm=zb-jc; fdata=zbj%7C%7C%3Bzb-jc%7C%7C%3B%7C%7C%3B4853748529lynx0702zl%7C%7C%3B5079%7C%7C%3B27050%7C%7C%3B1%7C1258%7C341%7Czb-jc; Hm_lpvt_e99aee90ec1b2106afe7ec3b199020a7=1626751087; _dys_lastPageCode=page_studio_normal,page_studio_normal; acf_auth=8693LkBpj3%2BhYvnaL8bOPQc16LS52K3vT4m6mkTfl5LFlhz%2Bjldusxx7itoPGsSig%2BOYzAeoPc4CXD35USprXAw%2BQFXZHwxOErreJYPEDttQTFB3uLWJ; dy_auth=bd19r%2FoXRoX1kSOpTC2OAh7dwPLfcgSgVfHhCMsqycjXhFzlUBMNzZ7tq%2FcG%2BC1xdaFF2XHNVdYzp3XJA0l2WXsmhW73nkdX5CgZI1TzsT6p7girCImy; wan_auth37wan=9b9a5c57b757sSjBadI1X8NhH65c6S09rcBqsbGncxMDP%2BW4iWGu2Btl4LTL7WYeB5NbrFis1HqpmpjuAxgBooLXyDX3oEh%2BJCXWdwHXTnCAgx%2Bh4w; acf_uid=54911929; acf_username=54911929; acf_nickname=%E5%93%AD%E5%90%A7%E5%96%8A%E5%90%A7%E7%84%B6%E5%90%8E%E5%8E%BB%E6%AD%BB%E5%90%A7; acf_own_room=1; acf_groupid=1; acf_phonestatus=1; acf_ct=0; acf_ltkid=11153443; acf_biz=1; acf_stk=7e322b9d140f17f4; acf_ccn=2aa4b40f64aa630c4aee8ff0351fb894', }, 'referrer': 'https://www.douyu.com/', 'referrerPolicy': 'strict-origin-when-cross-origin', 'body': null, 'method': 'GET', 'mode': 'cors', }).then(function (resp) { console.log('resp', resp); console.log('返回body', resp.body); // // // resp.text().then(function (text) { console.log('返回text()', text); res.send(text); }); }, function (err) { console.error('err', err); }); }); /** * 发送邮件 * 1. 使用【Python-Shell】。 * 1. 报错【找不到目录或文件】 * 1. 很明显,因为【相对路径】所处的目录,错了 * 2. 官网的【scriptPath】选项,并不能解决问题。 * 1. [](https://github.com/extrabacon/python-shell#pythonshellscript-options-constructor) * 3. 有人,提出了【working directory】的选项设置 * 1. [](https://github.com/extrabacon/python-shell/pull/61) * 2. 但是,这个功能,一直没被理会。 * 4. 最后,我从另一处得到了灵感,并解决了问题。 * 1. 灵感来源:[](https://github.com/extrabacon/python-shell/issues/54) * 2. 解决方案: * 1. 我在Python脚本中,将所有的【相对路径】,都修改为了【绝对路径】,才解决了这个问题。 */ r_db.get('/email/daily-task', function (req, res, next) { var query = req.query; console.log('query', query); var msg = query['msg']; // var dir__path = 'D:\\Program_Files\\JetBrains\\projects\\WebStorm\\WangPan\\小工具-Python\\projects\\发送邮件'; var py_script = 'send_email.py'; PythonShell.run(py_script, { scriptPath: dir__path, args: [ msg, ], }, function (err, results) { if (err) { console.error('发送邮件出错', err); } else { console.log('结果', results); res.send(results); } }); }); } //# sourceMappingURL=others.js.map