Nim 递归搜索目录,生成 Markdon 链接和 sitemap

  • 函数一,生成 Markdown 链接列表

    在指定路径下递归搜索 .md 文件,读取文件,以文件内容的第一行文字作为标题,生成 Markdown 格式链接列表,然后如下打印出来:

  • 函数二,生成 sitemap.xml

在指定路径下递归搜索 .md 文件,然后生成如下格式的 sitemap.xml

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>https://tuenhai.com/relative-path-1/file-name.html</loc>
    <lastmod>2024-09-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1</priority>
  </url>
  <url>
    <loc>https://tuenhai.com/relative-path-2/file-name.html</loc>
    <lastmod>2024-09-01</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1</priority>
  </url>
</urlset>

然后把 sitemap.xml 的内容打印出来

Nim 代码

# 海云青飞 https://www.tuenhai.com
# 2024-09-02

import std/[os, strutils, times]

proc generateMarkdownLinkList(path: string) =
  for file in walkDirRec(path):
    if file.endsWith(".md"):
      let
        relativePath = file.relativePath(path)
        content = readFile(file)
        title = content.splitLines()[0].strip()
      echo "- [", title, "](", relativePath, ")"

proc generateSitemap(path: string) =
  let currentDate = now().format("yyyy-MM-dd")
  echo """<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">"""
  for file in walkDirRec(path):
    if file.endsWith(".md"):
      let
        relativePath = file.relativePath(path)
        htmlPath = relativePath.changeFileExt("html")
      echo """  <url>
    <loc>https://tuenhai.com/""", htmlPath, """</loc>
    <lastmod>""", currentDate, """</lastmod>
    <changefreq>monthly</changefreq>
    <priority>1</priority>
  </url>"""
  echo "</urlset>"

# 使用示例
let path = r"C:\Users\tuenhai.com\src"
echo "Markdown Link List:"
generateMarkdownLinkList(path)
echo "\nSitemap XML:"
generateSitemap(path)

2024-09-02


独立思考最难得,赞赏支持是美德!(微信扫描下图)