sitemap.js 39 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691
  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 sitemapPath = __dirname + '/../../dist/sitemap.xml';
  10. const sitemapTempPath = __dirname + '/../../dist/sitemap.xml.temp';
  11. // 生成站点地图
  12. async function generateSitemap() {
  13. let date = datefns.format(Date.now(), 'yyyy-MM-dd');
  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. ' <url>',
  382. ' <loc>https://art.pcoloring.com/zh/info</loc>',
  383. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  384. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  385. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  386. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  387. ` <lastmod>${date}</lastmod>`,
  388. ' </url>',
  389. ' <url>',
  390. ' <loc>https://art.pcoloring.com/es/info</loc>',
  391. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  392. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  393. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  394. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  395. ` <lastmod>${date}</lastmod>`,
  396. ' </url>',
  397. ' <url>',
  398. ' <loc>https://art.pcoloring.com/pt/info</loc>',
  399. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  400. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  401. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  402. ' <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/info" />',
  403. ` <lastmod>${date}</lastmod>`,
  404. ' </url>',
  405. ' <url>',
  406. ' <loc>https://art.pcoloring.com/ja/info</loc>',
  407. ' <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/info" />',
  408. ' <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/info" />',
  409. ' <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/info" />',
  410. ' <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/info" />',
  411. ` <lastmod>${date}</lastmod>`,
  412. ' </url>',
  413. ];
  414. // tags
  415. let tagsXml = [];
  416. let newtags = tags.filter(e => e.count && e.count > 0);
  417. newtags.forEach(e => {
  418. tagsXml = tagsXml.concat([
  419. ' <url>',
  420. ` <loc>https://art.pcoloring.com/en/tag/${e.tag}</loc>`,
  421. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  422. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  423. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  424. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  425. ` <lastmod>${date}</lastmod>`,
  426. ' </url>',
  427. ' <url>',
  428. ` <loc>https://art.pcoloring.com/zh/tag/${e.tag}</loc>`,
  429. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  430. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  431. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  432. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  433. ` <lastmod>${date}</lastmod>`,
  434. ' </url>',
  435. ' <url>',
  436. ` <loc>https://art.pcoloring.com/es/tag/${e.tag}</loc>`,
  437. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  438. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  439. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  440. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  441. ` <lastmod>${date}</lastmod>`,
  442. ' </url>',
  443. ' <url>',
  444. ` <loc>https://art.pcoloring.com/pt/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="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  448. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/tag/${e.tag}" />`,
  449. ` <lastmod>${date}</lastmod>`,
  450. ' </url>',
  451. ' <url>',
  452. ` <loc>https://art.pcoloring.com/ja/tag/${e.tag}</loc>`,
  453. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/tag/${e.tag}" />`,
  454. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/tag/${e.tag}" />`,
  455. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/tag/${e.tag}" />`,
  456. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/tag/${e.tag}" />`,
  457. ` <lastmod>${date}</lastmod>`,
  458. ' </url>',
  459. ]);
  460. });
  461. console.log(tagsXml);
  462. // albums
  463. let albums = await models.ArtAlbum
  464. .find({ pid: 'art', enabled: true })
  465. .sort({ order: 'asc' })
  466. .select('_id')
  467. .lean()
  468. .exec();
  469. let albumsXml = [];
  470. albums.forEach(e => {
  471. albumsXml = albumsXml.concat([
  472. ' <url>',
  473. ` <loc>https://art.pcoloring.com/en/coloring-page-album/${e._id}</loc>`,
  474. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/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/zh/coloring-page-album/${e._id}</loc>`,
  482. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  483. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/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/es/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="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  492. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/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/pt/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="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  501. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page-album/${e._id}" />`,
  502. ` <lastmod>${date}</lastmod>`,
  503. ' </url>',
  504. ' <url>',
  505. ` <loc>https://art.pcoloring.com/ja/coloring-page-album/${e._id}</loc>`,
  506. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page-album/${e._id}" />`,
  507. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page-album/${e._id}" />`,
  508. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page-album/${e._id}" />`,
  509. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page-album/${e._id}" />`,
  510. ` <lastmod>${date}</lastmod>`,
  511. ' </url>',
  512. ])
  513. });
  514. console.log(albumsXml);
  515. // designers
  516. let designers = await models.Art.aggregate([
  517. // 首先,过滤出 status = 9000 的文档
  518. { $match: { open: true, status: 9000 } },
  519. // 首先,根据 user 字段进行分组,并计算每个 user 出现的次数
  520. { $group: { _id: '$user', count: { $sum: 1 } } },
  521. // 然后,按照 count 字段进行降序排列
  522. { $sort: { count: -1 } },
  523. // 接着,与 users 集合进行连接,以获取用户的详细信息
  524. {
  525. $lookup: {
  526. from: 'users', // 要连接的集合名称
  527. localField: '_id', // 本地字段(即上一步分组后的 _id 字段)
  528. foreignField: '_id', // 要连接的集合中的字段
  529. as: 'userDetails' // 连接后结果存储在新字段 userDetails 中
  530. }
  531. },
  532. // 展开 userDetails 数组,以便将用户信息提升到顶层
  533. { $unwind: '$userDetails' },
  534. // 调整输出格式,只保留需要的字段
  535. { $project: { _id: 1, user: '$_id', count: 1, username: '$userDetails.username', name: '$userDetails.name' } },
  536. // 限制返回的记录数量
  537. { $limit: 40 }
  538. ]);
  539. let designersXml = [];
  540. designers.forEach(e => {
  541. designersXml = designersXml.concat([
  542. ' <url>',
  543. ` <loc>https://art.pcoloring.com/en/artist/${e._id}</loc>`,
  544. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/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/zh/artist/${e._id}</loc>`,
  552. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  553. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/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/es/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="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  562. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/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/pt/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="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  571. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/artist/${e._id}" />`,
  572. ` <lastmod>${date}</lastmod>`,
  573. ' </url>',
  574. ' <url>',
  575. ` <loc>https://art.pcoloring.com/ja/artist/${e._id}</loc>`,
  576. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/artist/${e._id}" />`,
  577. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/artist/${e._id}" />`,
  578. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/artist/${e._id}" />`,
  579. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/artist/${e._id}" />`,
  580. ` <lastmod>${date}</lastmod>`,
  581. ' </url>',
  582. ])
  583. });
  584. console.log(designersXml);
  585. // details
  586. let detailsXml = [];
  587. const cursor = await models.Art
  588. .find({ open: true, status: 9000 })
  589. .select('name title')
  590. .sort({ publishTime: -1 }).cursor(); // 使用cursor,避免一次查询太多记录内存受不了
  591. // 遍历游标中的每个文档
  592. for await (const doc of cursor) {
  593. let uriTitle = doc.name;
  594. if (doc.title) {
  595. try {
  596. let titleJson = JSON.parse(doc.title);
  597. if (titleJson.en) uriTitle = titleJson.en; // URL 里还是尽量用英文title
  598. } catch (e) {
  599. console.error(e.message);
  600. }
  601. }
  602. let utf8name = encodeURIComponent(uriTitle.replace(/[\s_]+/g, '-')).toLowerCase();
  603. detailsXml = detailsXml.concat([
  604. // ' <url>',
  605. // ` <loc>https://art.pcoloring.com/en/coloring-page/${utf8name}-${doc._id}</loc>`,
  606. // ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${utf8name}-${doc._id}" />`,
  607. // ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${utf8name}-${doc._id}" />`,
  608. // ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${utf8name}-${doc._id}" />`,
  609. // ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${utf8name}-${doc._id}" />`,
  610. // ` <lastmod>${date}</lastmod>`,
  611. // ' </url>',
  612. ' <url>',
  613. ` <loc>https://art.pcoloring.com/en/coloring-page/${doc._id}</loc>`,
  614. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/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/zh/coloring-page/${doc._id}</loc>`,
  622. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  623. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/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/es/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="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  632. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/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/pt/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="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  641. ` <xhtml:link rel="alternate" hreflang="ja" href="https://art.pcoloring.com/ja/coloring-page/${doc._id}" />`,
  642. ` <lastmod>${date}</lastmod>`,
  643. ' </url>',
  644. ' <url>',
  645. ` <loc>https://art.pcoloring.com/ja/coloring-page/${doc._id}</loc>`,
  646. ` <xhtml:link rel="alternate" hreflang="zh" href="https://art.pcoloring.com/zh/coloring-page/${doc._id}" />`,
  647. ` <xhtml:link rel="alternate" hreflang="es" href="https://art.pcoloring.com/es/coloring-page/${doc._id}" />`,
  648. ` <xhtml:link rel="alternate" hreflang="pt" href="https://art.pcoloring.com/pt/coloring-page/${doc._id}" />`,
  649. ` <xhtml:link rel="alternate" hreflang="en" href="https://art.pcoloring.com/en/coloring-page/${doc._id}" />`,
  650. ` <lastmod>${date}</lastmod>`,
  651. ' </url>',
  652. ]);
  653. console.log(`process detail ${doc._id} url done`);
  654. }
  655. let endXml = ['</urlset>'];
  656. let sitemapXml = [...commonXml, ...tagsXml, ...albumsXml, ...designersXml, ...detailsXml, ...endXml];
  657. let sitemapXmlStr = sitemapXml.join('\n');
  658. fs.writeFileSync(sitemapTempPath, sitemapXmlStr); // 先写入临时文件
  659. fs.renameSync(sitemapTempPath, sitemapPath); // 再重命名
  660. console.log('生成sitemap成功');
  661. }
  662. function run() {
  663. generateSitemap();
  664. }
  665. module.exports = { run }
  666. if (require.main == module) {
  667. run();
  668. }