sitemap.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683
  1. /**
  2. * 每天运行一次,生成站点地图
  3. */
  4. const fs = require('fs');
  5. const datefns = require('date-fns');
  6. const models = require('../../models');
  7. const categories = require('../../config/category');
  8. const { tags } = require('../../config/tag');
  9. const date = datefns.format(Date.now(), 'yyyy-MM-dd');
  10. const sitemapPath = __dirname + '/../../dist/sitemap.xml';
  11. const sitemapTempPath = __dirname + '/../../dist/sitemap.xml.temp';
  12. // 生成站点地图
  13. async function generateSitemap() {
  14. let commonXml = [
  15. '<?xml version="1.0" encoding="UTF-8"?>',
  16. // '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">',
  17. '<urlset',
  18. ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"',
  19. ' 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"',
  20. ' xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"',
  21. ' xmlns:xhtml="http://www.w3.org/1999/xhtml"',
  22. '>',
  23. ' <url>',
  24. ' <loc>https://art.pcoloring.com/en</loc>',
  25. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh" />',
  26. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es" />',
  27. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt" />',
  28. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja" />',
  29. ` <lastmod>${date}</lastmod>`,
  30. ' <changefreq>daily</changefreq>',
  31. ' <priority>1.0</priority>',
  32. ' </url>',
  33. ' <url>',
  34. ' <loc>https://art.pcoloring.com/zh</loc>',
  35. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en" />',
  36. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es" />',
  37. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt" />',
  38. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja" />',
  39. ` <lastmod>${date}</lastmod>`,
  40. ' <changefreq>daily</changefreq>',
  41. ' <priority>1.0</priority>',
  42. ' </url>',
  43. ' <url>',
  44. ' <loc>https://art.pcoloring.com/es</loc>',
  45. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en" />',
  46. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh" />',
  47. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt" />',
  48. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja" />',
  49. ` <lastmod>${date}</lastmod>`,
  50. ' <changefreq>daily</changefreq>',
  51. ' <priority>1.0</priority>',
  52. ' </url>',
  53. ' <url>',
  54. ' <loc>https://art.pcoloring.com/pt</loc>',
  55. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en" />',
  56. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es" />',
  57. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh" />',
  58. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja" />',
  59. ` <lastmod>${date}</lastmod>`,
  60. ' <changefreq>daily</changefreq>',
  61. ' <priority>1.0</priority>',
  62. ' </url>',
  63. ' <url>',
  64. ' <loc>https://art.pcoloring.com/ja</loc>',
  65. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en" />',
  66. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es" />',
  67. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt" />',
  68. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh" />',
  69. ` <lastmod>${date}</lastmod>`,
  70. ' <changefreq>daily</changefreq>',
  71. ' <priority>1.0</priority>',
  72. ' </url>',
  73. ' <url>',
  74. ' <loc>https://art.pcoloring.com/en/gallery</loc>',
  75. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/gallery" />',
  76. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/gallery" />',
  77. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/gallery" />',
  78. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/gallery" />',
  79. ` <lastmod>${date}</lastmod>`,
  80. ' <changefreq>weekly</changefreq>',
  81. ' <priority>0.8</priority>',
  82. ' </url>',
  83. ' <url>',
  84. ' <loc>https://art.pcoloring.com/zh/gallery</loc>',
  85. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/gallery" />',
  86. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/gallery" />',
  87. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/gallery" />',
  88. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/gallery" />',
  89. ` <lastmod>${date}</lastmod>`,
  90. ' <changefreq>weekly</changefreq>',
  91. ' <priority>0.8</priority>',
  92. ' </url>',
  93. ' <url>',
  94. ' <loc>https://art.pcoloring.com/es/gallery</loc>',
  95. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/gallery" />',
  96. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/gallery" />',
  97. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/gallery" />',
  98. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/gallery" />',
  99. ` <lastmod>${date}</lastmod>`,
  100. ' <changefreq>weekly</changefreq>',
  101. ' <priority>0.8</priority>',
  102. ' </url>',
  103. ' <url>',
  104. ' <loc>https://art.pcoloring.com/pt/gallery</loc>',
  105. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/gallery" />',
  106. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/gallery" />',
  107. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/gallery" />',
  108. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/gallery" />',
  109. ` <lastmod>${date}</lastmod>`,
  110. ' <changefreq>weekly</changefreq>',
  111. ' <priority>0.8</priority>',
  112. ' </url>',
  113. ' <url>',
  114. ' <loc>https://art.pcoloring.com/ja/gallery</loc>',
  115. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/gallery" />',
  116. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/gallery" />',
  117. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/gallery" />',
  118. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/gallery" />',
  119. ` <lastmod>${date}</lastmod>`,
  120. ' <changefreq>weekly</changefreq>',
  121. ' <priority>0.8</priority>',
  122. ' </url>',
  123. ' <url>',
  124. ' <loc>https://art.pcoloring.com/en/videos</loc>',
  125. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/videos" />',
  126. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/videos" />',
  127. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/videos" />',
  128. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/videos" />',
  129. ` <lastmod>${date}</lastmod>`,
  130. ' <changefreq>weekly</changefreq>',
  131. ' <priority>0.8</priority>',
  132. ' </url>',
  133. ' <url>',
  134. ' <loc>https://art.pcoloring.com/zh/videos</loc>',
  135. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/videos" />',
  136. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/videos" />',
  137. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/videos" />',
  138. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/videos" />',
  139. ` <lastmod>${date}</lastmod>`,
  140. ' <changefreq>weekly</changefreq>',
  141. ' <priority>0.8</priority>',
  142. ' </url>',
  143. ' <url>',
  144. ' <loc>https://art.pcoloring.com/es/videos</loc>',
  145. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/videos" />',
  146. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/videos" />',
  147. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/videos" />',
  148. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/videos" />',
  149. ` <lastmod>${date}</lastmod>`,
  150. ' <changefreq>weekly</changefreq>',
  151. ' <priority>0.8</priority>',
  152. ' </url>',
  153. ' <url>',
  154. ' <loc>https://art.pcoloring.com/pt/videos</loc>',
  155. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/videos" />',
  156. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/videos" />',
  157. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/videos" />',
  158. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/videos" />',
  159. ` <lastmod>${date}</lastmod>`,
  160. ' <changefreq>weekly</changefreq>',
  161. ' <priority>0.8</priority>',
  162. ' </url>',
  163. ' <url>',
  164. ' <loc>https://art.pcoloring.com/ja/videos</loc>',
  165. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/videos" />',
  166. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/videos" />',
  167. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/videos" />',
  168. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/videos" />',
  169. ` <lastmod>${date}</lastmod>`,
  170. ' <changefreq>weekly</changefreq>',
  171. ' <priority>0.8</priority>',
  172. ' </url>',
  173. ' <url>',
  174. ' <loc>https://art.pcoloring.com/en/tag</loc>',
  175. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag" />',
  176. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag" />',
  177. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag" />',
  178. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag" />',
  179. ` <lastmod>${date}</lastmod>`,
  180. ' <changefreq>daily</changefreq>',
  181. ' <priority>0.8</priority>',
  182. ' </url>',
  183. ' <url>',
  184. ' <loc>https://art.pcoloring.com/zh/tag</loc>',
  185. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag" />',
  186. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag" />',
  187. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag" />',
  188. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag" />',
  189. ` <lastmod>${date}</lastmod>`,
  190. ' <changefreq>daily</changefreq>',
  191. ' <priority>0.8</priority>',
  192. ' </url>',
  193. ' <url>',
  194. ' <loc>https://art.pcoloring.com/es/tag</loc>',
  195. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag" />',
  196. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag" />',
  197. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag" />',
  198. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag" />',
  199. ` <lastmod>${date}</lastmod>`,
  200. ' <changefreq>daily</changefreq>',
  201. ' <priority>0.8</priority>',
  202. ' </url>',
  203. ' <url>',
  204. ' <loc>https://art.pcoloring.com/pt/tag</loc>',
  205. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag" />',
  206. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag" />',
  207. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag" />',
  208. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag" />',
  209. ` <lastmod>${date}</lastmod>`,
  210. ' <changefreq>daily</changefreq>',
  211. ' <priority>0.8</priority>',
  212. ' </url>',
  213. ' <url>',
  214. ' <loc>https://art.pcoloring.com/ja/tag</loc>',
  215. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag" />',
  216. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag" />',
  217. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag" />',
  218. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag" />',
  219. ` <lastmod>${date}</lastmod>`,
  220. ' <changefreq>daily</changefreq>',
  221. ' <priority>0.8</priority>',
  222. ' </url>',
  223. ' <url>',
  224. ' <loc>https://art.pcoloring.com/en/albums</loc>',
  225. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/albums" />',
  226. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/albums" />',
  227. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/albums" />',
  228. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/albums" />',
  229. ` <lastmod>${date}</lastmod>`,
  230. ' <changefreq>weekly</changefreq>',
  231. ' <priority>0.8</priority>',
  232. ' </url>',
  233. ' <url>',
  234. ' <loc>https://art.pcoloring.com/zh/albums</loc>',
  235. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/albums" />',
  236. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/albums" />',
  237. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/albums" />',
  238. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/albums" />',
  239. ` <lastmod>${date}</lastmod>`,
  240. ' <changefreq>weekly</changefreq>',
  241. ' <priority>0.8</priority>',
  242. ' </url>',
  243. ' <url>',
  244. ' <loc>https://art.pcoloring.com/es/albums</loc>',
  245. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/albums" />',
  246. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/albums" />',
  247. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/albums" />',
  248. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/albums" />',
  249. ` <lastmod>${date}</lastmod>`,
  250. ' <changefreq>weekly</changefreq>',
  251. ' <priority>0.8</priority>',
  252. ' </url>',
  253. ' <url>',
  254. ' <loc>https://art.pcoloring.com/pt/albums</loc>',
  255. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/albums" />',
  256. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/albums" />',
  257. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/albums" />',
  258. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/albums" />',
  259. ` <lastmod>${date}</lastmod>`,
  260. ' <changefreq>weekly</changefreq>',
  261. ' <priority>0.8</priority>',
  262. ' </url>',
  263. ' <url>',
  264. ' <loc>https://art.pcoloring.com/ja/albums</loc>',
  265. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/albums" />',
  266. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/albums" />',
  267. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/albums" />',
  268. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/albums" />',
  269. ` <lastmod>${date}</lastmod>`,
  270. ' <changefreq>weekly</changefreq>',
  271. ' <priority>0.8</priority>',
  272. ' </url>',
  273. ' <url>',
  274. ' <loc>https://art.pcoloring.com/en/special</loc>',
  275. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/special" />',
  276. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/special" />',
  277. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/special" />',
  278. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/special" />',
  279. ` <lastmod>${date}</lastmod>`,
  280. ' <changefreq>daily</changefreq>',
  281. ' <priority>0.8</priority>',
  282. ' </url>',
  283. ' <url>',
  284. ' <loc>https://art.pcoloring.com/zh/special</loc>',
  285. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/special" />',
  286. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/special" />',
  287. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/special" />',
  288. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/special" />',
  289. ` <lastmod>${date}</lastmod>`,
  290. ' <changefreq>daily</changefreq>',
  291. ' <priority>0.8</priority>',
  292. ' </url>',
  293. ' <url>',
  294. ' <loc>https://art.pcoloring.com/es/special</loc>',
  295. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/special" />',
  296. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/special" />',
  297. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/special" />',
  298. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/special" />',
  299. ` <lastmod>${date}</lastmod>`,
  300. ' <changefreq>daily</changefreq>',
  301. ' <priority>0.8</priority>',
  302. ' </url>',
  303. ' <url>',
  304. ' <loc>https://art.pcoloring.com/pt/special</loc>',
  305. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/special" />',
  306. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/special" />',
  307. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/special" />',
  308. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/special" />',
  309. ` <lastmod>${date}</lastmod>`,
  310. ' <changefreq>daily</changefreq>',
  311. ' <priority>0.8</priority>',
  312. ' </url>',
  313. ' <url>',
  314. ' <loc>https://art.pcoloring.com/ja/special</loc>',
  315. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/special" />',
  316. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/special" />',
  317. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/special" />',
  318. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/special" />',
  319. ` <lastmod>${date}</lastmod>`,
  320. ' <changefreq>daily</changefreq>',
  321. ' <priority>0.8</priority>',
  322. ' </url>',
  323. ' <url>',
  324. ' <loc>https://art.pcoloring.com/en/artists</loc>',
  325. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artists" />',
  326. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artists" />',
  327. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artists" />',
  328. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artists" />',
  329. ` <lastmod>${date}</lastmod>`,
  330. ' <changefreq>monthly</changefreq>',
  331. ' <priority>0.8</priority>',
  332. ' </url>',
  333. ' <url>',
  334. ' <loc>https://art.pcoloring.com/zh/artists</loc>',
  335. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artists" />',
  336. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artists" />',
  337. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artists" />',
  338. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artists" />',
  339. ` <lastmod>${date}</lastmod>`,
  340. ' <changefreq>monthly</changefreq>',
  341. ' <priority>0.8</priority>',
  342. ' </url>',
  343. ' <url>',
  344. ' <loc>https://art.pcoloring.com/es/artists</loc>',
  345. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artists" />',
  346. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artists" />',
  347. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artists" />',
  348. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artists" />',
  349. ` <lastmod>${date}</lastmod>`,
  350. ' <changefreq>monthly</changefreq>',
  351. ' <priority>0.8</priority>',
  352. ' </url>',
  353. ' <url>',
  354. ' <loc>https://art.pcoloring.com/pt/artists</loc>',
  355. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artists" />',
  356. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artists" />',
  357. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artists" />',
  358. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artists" />',
  359. ` <lastmod>${date}</lastmod>`,
  360. ' <changefreq>monthly</changefreq>',
  361. ' <priority>0.8</priority>',
  362. ' </url>',
  363. ' <url>',
  364. ' <loc>https://art.pcoloring.com/ja/artists</loc>',
  365. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artists" />',
  366. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artists" />',
  367. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artists" />',
  368. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artists" />',
  369. ` <lastmod>${date}</lastmod>`,
  370. ' <changefreq>monthly</changefreq>',
  371. ' <priority>0.8</priority>',
  372. ' </url>',
  373. ' <url>',
  374. ' <loc>https://art.pcoloring.com/en/info</loc>',
  375. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  376. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  377. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  378. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  379. ` <lastmod>${date}</lastmod>`,
  380. ' </url>',
  381. ' <loc>https://art.pcoloring.com/zh/info</loc>',
  382. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  383. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  384. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  385. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  386. ` <lastmod>${date}</lastmod>`,
  387. ' </url>',
  388. ' <loc>https://art.pcoloring.com/es/info</loc>',
  389. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  390. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  391. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  392. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  393. ` <lastmod>${date}</lastmod>`,
  394. ' </url>',
  395. ' <loc>https://art.pcoloring.com/pt/info</loc>',
  396. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  397. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  398. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  399. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  400. ` <lastmod>${date}</lastmod>`,
  401. ' </url>',
  402. ' <loc>https://art.pcoloring.com/ja/info</loc>',
  403. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  404. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  405. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  406. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  407. ` <lastmod>${date}</lastmod>`,
  408. ' </url>',
  409. ];
  410. // tags
  411. let tagsXml = [];
  412. let newtags = tags.filter(e => e.count && e.count > 0);
  413. newtags.forEach(e => {
  414. tagsXml = tagsXml.concat([
  415. ' <url>',
  416. ` <loc>https://art.pcoloring.com/en/tag/${e.tag}</loc>`,
  417. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  418. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  419. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  420. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  421. ` <lastmod>${date}</lastmod>`,
  422. ' </url>',
  423. ` <loc>https://art.pcoloring.com/zh/tag/${e.tag}</loc>`,
  424. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  425. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  426. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  427. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  428. ` <lastmod>${date}</lastmod>`,
  429. ' </url>',
  430. ` <loc>https://art.pcoloring.com/es/tag/${e.tag}</loc>`,
  431. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  432. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  433. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  434. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  435. ` <lastmod>${date}</lastmod>`,
  436. ' </url>',
  437. ` <loc>https://art.pcoloring.com/pt/tag/${e.tag}</loc>`,
  438. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  439. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  440. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  441. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  442. ` <lastmod>${date}</lastmod>`,
  443. ' </url>',
  444. ` <loc>https://art.pcoloring.com/ja/tag/${e.tag}</loc>`,
  445. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  446. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  447. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  448. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  449. ` <lastmod>${date}</lastmod>`,
  450. ' </url>',
  451. ]);
  452. });
  453. console.log(tagsXml);
  454. // albums
  455. let albums = await models.ArtAlbum
  456. .find({ pid: 'art', enabled: true })
  457. .sort({ order: 'asc' })
  458. .select('_id')
  459. .lean()
  460. .exec();
  461. let albumsXml = [];
  462. albums.forEach(e => {
  463. albumsXml = albumsXml.concat([
  464. ' <url>',
  465. ` <loc>https://art.pcoloring.com/en/coloring-page-album/${e._id}</loc>`,
  466. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page-album/${e._id}" />`,
  467. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page-album/${e._id}" />`,
  468. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page-album/${e._id}" />`,
  469. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page-album/${e._id}" />`,
  470. ` <lastmod>${date}</lastmod>`,
  471. ' </url>',
  472. ' <url>',
  473. ` <loc>https://art.pcoloring.com/zh/coloring-page-album/${e._id}</loc>`,
  474. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  475. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page-album/${e._id}" />`,
  476. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page-album/${e._id}" />`,
  477. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page-album/${e._id}" />`,
  478. ` <lastmod>${date}</lastmod>`,
  479. ' </url>',
  480. ' <url>',
  481. ` <loc>https://art.pcoloring.com/es/coloring-page-album/${e._id}</loc>`,
  482. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page-album/${e._id}" />`,
  483. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  484. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page-album/${e._id}" />`,
  485. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page-album/${e._id}" />`,
  486. ` <lastmod>${date}</lastmod>`,
  487. ' </url>',
  488. ' <url>',
  489. ` <loc>https://art.pcoloring.com/pt/coloring-page-album/${e._id}</loc>`,
  490. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page-album/${e._id}" />`,
  491. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page-album/${e._id}" />`,
  492. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  493. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page-album/${e._id}" />`,
  494. ` <lastmod>${date}</lastmod>`,
  495. ' </url>',
  496. ' <url>',
  497. ` <loc>https://art.pcoloring.com/ja/coloring-page-album/${e._id}</loc>`,
  498. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page-album/${e._id}" />`,
  499. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page-album/${e._id}" />`,
  500. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page-album/${e._id}" />`,
  501. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  502. ` <lastmod>${date}</lastmod>`,
  503. ' </url>',
  504. ])
  505. });
  506. console.log(albumsXml);
  507. // designers
  508. let designers = await models.Art.aggregate([
  509. // 首先,过滤出 status = 9000 的文档
  510. { $match: { open: true, status: 9000 } },
  511. // 首先,根据 user 字段进行分组,并计算每个 user 出现的次数
  512. { $group: { _id: '$user', count: { $sum: 1 } } },
  513. // 然后,按照 count 字段进行降序排列
  514. { $sort: { count: -1 } },
  515. // 接着,与 users 集合进行连接,以获取用户的详细信息
  516. {
  517. $lookup: {
  518. from: 'users', // 要连接的集合名称
  519. localField: '_id', // 本地字段(即上一步分组后的 _id 字段)
  520. foreignField: '_id', // 要连接的集合中的字段
  521. as: 'userDetails' // 连接后结果存储在新字段 userDetails 中
  522. }
  523. },
  524. // 展开 userDetails 数组,以便将用户信息提升到顶层
  525. { $unwind: '$userDetails' },
  526. // 调整输出格式,只保留需要的字段
  527. { $project: { _id: 1, user: '$_id', count: 1, username: '$userDetails.username', name: '$userDetails.name' } },
  528. // 限制返回的记录数量
  529. { $limit: 40 }
  530. ]);
  531. let designersXml = [];
  532. designers.forEach(e => {
  533. designersXml = designersXml.concat([
  534. ' <url>',
  535. ` <loc>https://art.pcoloring.com/en/artist/${e._id}</loc>`,
  536. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artist/${e._id}" />`,
  537. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artist/${e._id}" />`,
  538. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artist/${e._id}" />`,
  539. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artist/${e._id}" />`,
  540. ` <lastmod>${date}</lastmod>`,
  541. ' </url>',
  542. ' <url>',
  543. ` <loc>https://art.pcoloring.com/zh/artist/${e._id}</loc>`,
  544. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  545. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artist/${e._id}" />`,
  546. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artist/${e._id}" />`,
  547. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artist/${e._id}" />`,
  548. ` <lastmod>${date}</lastmod>`,
  549. ' </url>',
  550. ' <url>',
  551. ` <loc>https://art.pcoloring.com/es/artist/${e._id}</loc>`,
  552. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artist/${e._id}" />`,
  553. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  554. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artist/${e._id}" />`,
  555. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artist/${e._id}" />`,
  556. ` <lastmod>${date}</lastmod>`,
  557. ' </url>',
  558. ' <url>',
  559. ` <loc>https://art.pcoloring.com/pt/artist/${e._id}</loc>`,
  560. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artist/${e._id}" />`,
  561. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artist/${e._id}" />`,
  562. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  563. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artist/${e._id}" />`,
  564. ` <lastmod>${date}</lastmod>`,
  565. ' </url>',
  566. ' <url>',
  567. ` <loc>https://art.pcoloring.com/ja/artist/${e._id}</loc>`,
  568. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artist/${e._id}" />`,
  569. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artist/${e._id}" />`,
  570. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artist/${e._id}" />`,
  571. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  572. ` <lastmod>${date}</lastmod>`,
  573. ' </url>',
  574. ])
  575. });
  576. console.log(designersXml);
  577. // details
  578. let detailsXml = [];
  579. const cursor = await models.Art
  580. .find({ open: true, status: 9000 })
  581. .select('name title')
  582. .sort({ publishTime: -1 }).cursor(); // 使用cursor,避免一次查询太多记录内存受不了
  583. // 遍历游标中的每个文档
  584. for await (const doc of cursor) {
  585. let uriTitle = doc.name;
  586. if (doc.title) {
  587. try {
  588. let titleJson = JSON.parse(doc.title);
  589. if (titleJson.en) uriTitle = titleJson.en; // URL 里还是尽量用英文title
  590. } catch (e) {
  591. console.error(e.message);
  592. }
  593. }
  594. let utf8name = encodeURIComponent(uriTitle.replace(/[\s_]+/g, '-')).toLowerCase();
  595. detailsXml = detailsXml.concat([
  596. // ' <url>',
  597. // ` <loc>https://art.pcoloring.com/en/coloring-page/${utf8name}-${doc._id}</loc>`,
  598. // ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${utf8name}-${doc._id}" />`,
  599. // ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${utf8name}-${doc._id}" />`,
  600. // ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${utf8name}-${doc._id}" />`,
  601. // ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${utf8name}-${doc._id}" />`,
  602. // ` <lastmod>${date}</lastmod>`,
  603. // ' </url>',
  604. ' <url>',
  605. ` <loc>https://art.pcoloring.com/en/coloring-page/${doc._id}</loc>`,
  606. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${doc._id}" />`,
  607. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${doc._id}" />`,
  608. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${doc._id}" />`,
  609. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${doc._id}" />`,
  610. ` <lastmod>${date}</lastmod>`,
  611. ' </url>',
  612. ' <url>',
  613. ` <loc>https://art.pcoloring.com/zh/coloring-page/${doc._id}</loc>`,
  614. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  615. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${doc._id}" />`,
  616. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${doc._id}" />`,
  617. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${doc._id}" />`,
  618. ` <lastmod>${date}</lastmod>`,
  619. ' </url>',
  620. ' <url>',
  621. ` <loc>https://art.pcoloring.com/es/coloring-page/${doc._id}</loc>`,
  622. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${doc._id}" />`,
  623. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  624. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${doc._id}" />`,
  625. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${doc._id}" />`,
  626. ` <lastmod>${date}</lastmod>`,
  627. ' </url>',
  628. ' <url>',
  629. ` <loc>https://art.pcoloring.com/pt/coloring-page/${doc._id}</loc>`,
  630. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${doc._id}" />`,
  631. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${doc._id}" />`,
  632. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  633. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${doc._id}" />`,
  634. ` <lastmod>${date}</lastmod>`,
  635. ' </url>',
  636. ' <url>',
  637. ` <loc>https://art.pcoloring.com/ja/coloring-page/${doc._id}</loc>`,
  638. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${doc._id}" />`,
  639. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${doc._id}" />`,
  640. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${doc._id}" />`,
  641. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  642. ` <lastmod>${date}</lastmod>`,
  643. ' </url>',
  644. ]);
  645. console.log(`process detail ${doc._id} url done`);
  646. }
  647. let endXml = ['</urlset>'];
  648. let sitemapXml = [...commonXml, ...tagsXml, ...albumsXml, ...designersXml, ...detailsXml, ...endXml];
  649. let sitemapXmlStr = sitemapXml.join('\n');
  650. fs.writeFileSync(sitemapTempPath, sitemapXmlStr); // 先写入临时文件
  651. fs.renameSync(sitemapTempPath, sitemapPath); // 再重命名
  652. console.log('生成sitemap成功');
  653. }
  654. function run() {
  655. generateSitemap();
  656. }
  657. module.exports = { run }
  658. if (require.main == module) {
  659. run();
  660. }