1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
| const nodeAjax = require('ajax-for-node'); const fs = require('hexo-fs');
const site = `https://loli.fj.cn`;
const site_map = `${site}/sitemap.txt`;
const reg = /\d{4}\/\d{2}\/\d{2}/;
const start_data = new Date("2019-11-22");
let data_list = [];
let data_map = new Map();
let data_map_year = new Map();
let file_content = ""
nodeAjax({ url: site_map, type: "GET", processData: false, contentType: false, success: function (result) { const lines = result.split("\n"); for (let line of lines) { if (reg.test(line)) { line = line.substr(19, 10); line = line.replaceAll("/", "-"); data_list.push(line); } } for (const item of data_list) { if (data_map.get(item)) { data_map.set(item, data_map.get(item) + 1); } else { data_map.set(item, 1); } } let current_data = new Date(`${start_data.getFullYear()}-01-01`); const end_data = new Date(`${new Date().getFullYear() + 1}-01-01`); while (current_data.getTime() < end_data.getTime()) { const year = current_data.getFullYear(); const month = current_data.getMonth() + 1 < 10 ? '0' + (current_data.getMonth() + 1) : current_data.getMonth() + 1; const day = current_data.getDate().toString().length === 1 ? "0" + current_data.getDate() : current_data.getDate(); const current = `${year}-${month}-${day}` if (data_map.get(current) === undefined) { data_map.set(current, 0); } current_data.setDate(current_data.getDate() + 1); } for (let currentYear = start_data.getFullYear(); currentYear < end_data.getFullYear(); currentYear++) { if (!data_map_year.get(currentYear)) { data_map_year.set(currentYear, []) } data_map.forEach((value, key) => { if (key.indexOf(currentYear) !== -1) { const data = [key, value]; data_map_year.get(currentYear).push(data); } }) } file_content += `---\ntitle: 贡献\n---\n`; for (let currentYear = start_data.getFullYear(); currentYear < end_data.getFullYear(); currentYear++) { file_content += `\n## ${currentYear}年度\n\n{% echarts 700 100 %}\n{\n // 悬浮窗\n tooltip: {\n padding: 10,\n borderColor: "#FFF",\n borderWidth: 1,\n formatter: function (a) {\n var b = a.value;\n return \`<div style="font-size: 14px;">\${b[0]}: \${b[1]}</div>\`;\n }\n },\n visualMap: {\n show: false,\n min: 1,\n max: 5,\n minOpen: true,\n maxOpen: true,\n calculable: false,\n inRange: {\n symbol: "rect",\n color: ["#ebedf0", "#c6e48b", "#7bc96f", "#239a3b", "#196127"]\n },\n itemWidth: 12,\n itemHeight: 12,\n type: "piecewise",\n orient: "horizontal",\n left: "center",\n top: 0\n },\n // 主体\n calendar: {\n top: 0,\n range: "${currentYear}",\n left: "center",\n cellSize: [13, 13],\n splitLine: {\n // 月份分割线\n show: false\n },\n name: {\n textStyle: {\n color: "#3C4858"\n }\n },\n itemStyle: {\n borderColor: "#fff",\n borderWidth: 2\n },\n yearLabel: {\n // 左侧年份\n show: false\n },\n monthLabel: {\n // 上面月份\n show: false\n },\n dayLabel: {\n // 左侧星期\n show: false\n }\n },\n series: {\n type: "heatmap",\n coordinateSystem: "calendar",\n calendarIndex: 0,\n data: ${JSON.stringify(data_map_year.get(currentYear))}\n }\n}\n{% endecharts %}\n`; } fs.writeFile("./source/contribute/index.md", file_content); } });
|