| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213 |
- /**
- * 每天运行一次,生成站点地图
- */
- const fs = require("fs");
- const datefns = require("date-fns");
- const models = require("../../models");
- const sitemapPath = __dirname + "/../../dist/sitemap.xml";
- const sitemapTempPath = __dirname + "/../../dist/sitemap.xml.temp";
- // 生成站点地图
- async function generateSitemap() {
- let commonXml = [
- '<?xml version="1.0" encoding="UTF-8"?>',
- // '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
- "<urlset",
- ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
- ' xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"',
- ' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"',
- ' xmlns:xhtml="http://www.w3.org/1999/xhtml"',
- ">",
- " <url>",
- " <loc>https://art.pcoloring.com</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/coloring-page-gallery</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/coloring-page-albums</loc>",
- ` <lastmod>2025-07-22</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/video-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/mandala-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/zentangle-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/zen-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/flower-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/cat-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/butterfly-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/architecture-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/simple-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/girl-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/fantasy-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/christmas-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/patterns-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/peacock-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/dragon-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/unicorn-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/food-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/how-to-color-online</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/how-to-color-mandala-coloring-page</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/benefit-of-coloring-pages</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/choose-the-right-coloring-tools</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/color-combinations-guide</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/tips-tricks/coloring-techniques-for-beginners</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/app</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/contact</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/about</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/faq</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/privacy-policy</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- " <url>",
- " <loc>https://art.pcoloring.com/terms-of-service</loc>",
- ` <lastmod>2026-05-13</lastmod>`,
- " </url>",
- ];
- // albums
- let albumsXml = [];
- let albums = await models.ArtAlbum.find({ pid: "art", enabled: true })
- .sort({ order: "asc" })
- .select("_id timeLastModify")
- .lean()
- .exec();
- albums.forEach((e) => {
- albumsXml = albumsXml.concat([
- " <url>",
- ` <loc>https://art.pcoloring.com/coloring-page-album/${e._id}</loc>`,
- ` <lastmod>${datefns.format(e.timeLastModify, "yyyy-MM-dd")}</lastmod>`,
- " </url>",
- ]);
- });
- // details
- let detailsXml = [];
- const cursor = await models.Art.find({ status: 9000 })
- .select("name title publishTime")
- .sort({ publishTime: -1 })
- .cursor(); // 使用cursor,避免一次查询太多记录内存受不了
- // 遍历游标中的每个文档
- for await (const doc of cursor) {
- detailsXml = detailsXml.concat([
- " <url>",
- ` <loc>https://art.pcoloring.com/coloring-page/${doc._id}</loc>`,
- ` <lastmod>${datefns.format(doc.publishTime, "yyyy-MM-dd")}</lastmod>`,
- " </url>",
- ]);
- }
- let endXml = ["</urlset>"];
- let sitemapXml = [...commonXml, ...albumsXml, ...detailsXml, ...endXml];
- let sitemapXmlStr = sitemapXml.join("\n");
- fs.writeFileSync(sitemapTempPath, sitemapXmlStr); // 先写入临时文件
- fs.renameSync(sitemapTempPath, sitemapPath); // 再重命名
- console.log("生成sitemap成功");
- }
- function run() {
- generateSitemap();
- }
- module.exports = { run };
- if (require.main == module) {
- run();
- }
|