5 个版本

0.2.1 2024 年 2 月 7 日
0.2.0 2022 年 11 月 8 日
0.1.2 2022 年 9 月 10 日
0.1.1 2022 年 9 月 6 日
0.1.0 2022 年 9 月 3 日

#1#country-code

Download history 240/week @ 2024-04-22 257/week @ 2024-04-29 233/week @ 2024-05-06 194/week @ 2024-05-13 260/week @ 2024-05-20 398/week @ 2024-05-27 308/week @ 2024-06-03 158/week @ 2024-06-10 207/week @ 2024-06-17 152/week @ 2024-06-24 179/week @ 2024-07-01 108/week @ 2024-07-08 241/week @ 2024-07-15 229/week @ 2024-07-22 266/week @ 2024-07-29 191/week @ 2024-08-05

937 每月下载量

MIT 许可证

75KB
972

sitemap-rs

Version Docs License

一个用于生成 URL、索引、图像、视频和新闻网站的 Rust 库。

特性

生成网站地图

验证网站地图数据

关于网站地图可以包含哪些数据,存在一些限制。这个库在结构体实例化时表面这些验证问题。现在您不必等待Google Search ConsoleBing Webmaster Tools 提醒您在修复数据问题之前网站地图问题。

验证

  • URL 网站地图
    • TooManyUrls
      • 只能包含最多 50,000<url>
    • TooMuchNews
      • 只能包含最多 1,000<news: news>
    • PriorityTooLowPriorityTooHigh
      • <priority> 必须介于 0.01.0 (包含) 之间。
    • TooManyImages
      • 只能包含最多 1,000<image: image>
  • 索引网站地图
    • TooManySitemaps
      • 只能包含最多 50,000<sitemap>
  • 视频网站地图
    • 描述过长
      • <description> 必须不超过 2048 个字符。
    • DurationTooShortDurationTooLong
      • <duration> 必须在 128,800 秒之间(包含)。
    • RatingTooLowRatingTooHigh
      • <rating> 必须在 0.05.0 之间(包含)。
    • 上传者名字过长
      • <uploader><name> 必须不超过 255 个字符。
    • 标签过多
      • 必须包含不超过 32<tag>

限制

这个库 无法 解析任何类型的网站地图(目前尚不能!- 欢迎提交拉取请求!请参阅下方的功能请求部分)。

示例

以下示例应与每个网站地图类型在线文档中的示例完全一致。

URL 网站地图

cargorun --examplegenerate_url_sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <url>
    <loc>http://www.example.com/</loc>
    <lastmod>2005-01-01T09:10:11+00:00</lastmod>
    <changefreq>monthly</changefreq>
    <priority>0.8</priority>
  </url>
</urlset>

索引网站地图

cargorun --examplegenerate_index_sitemap

<?xml version="1.0" encoding="UTF-8"?>
<sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
  <sitemap>
    <loc>http://www.example.com/sitemap1.xml.gz</loc>
    <lastmod>2004-10-01T18:23:17+00:00</lastmod>
  </sitemap>
  <sitemap>
    <loc>http://www.example.com/sitemap2.xml.gz</loc>
    <lastmod>2005-01-01T00:00:00+00:00</lastmod>
  </sitemap>
</sitemapindex>

图像网站地图

cargorun --examplegenerate_image_sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1">
  <url>
    <loc>http://example.com/sample1.html</loc>
    <image:image>
      <image:loc>http://example.com/image.jpg</image:loc>
    </image:image>
    <image:image>
      <image:loc>http://example.com/photo.jpg</image:loc>
    </image:image>
  </url>
  <url>
    <loc>http://example.com/sample2.html</loc>
    <image:image>
      <image:loc>http://example.com/picture.jpg</image:loc>
    </image:image>
  </url>
</urlset>

视频网站地图

cargorun --examplegenerate_video_sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1">
  <url>
    <loc>http://www.example.com/videos/some_video_landing_page.html</loc>
    <video:video>
      <video:thumbnail_loc>http://www.example.com/thumbs/123.jpg</video:thumbnail_loc>
      <video:title>Grilling steaks for summer</video:title>
      <video:description>Alkis shows you how to get perfectly done steaks every time</video:description>
      <video:content_loc>http://streamserver.example.com/video123.mp4</video:content_loc>
      <video:player_loc>http://www.example.com/videoplayer.php?video=123</video:player_loc>
      <video:duration>600</video:duration>
      <video:expiration_date>2021-11-05T19:20:30+08:00</video:expiration_date>
      <video:rating>4.2</video:rating>
      <video:view_count>12345</video:view_count>
      <video:publication_date>2007-11-05T19:20:30+08:00</video:publication_date>
      <video:family_friendly>yes</video:family_friendly>
      <video:restriction relationship="allow">IE GB US CA</video:restriction>
      <video:platform relationship="allow">web tv</video:platform>
      <video:requires_subscription>yes</video:requires_subscription>
      <video:uploader info="http://www.example.com/users/grillymcgrillerson">GrillyMcGrillserson</video:uploader>
      <video:live>no</video:live>
      <video:tag>steak</video:tag>
      <video:tag>meat</video:tag>
      <video:tag>summer</video:tag>
      <video:tag>outdoor</video:tag>
    </video:video>
  </url>
</urlset>

新闻网站地图

cargorun --examplegenerate_news_sitemap

<?xml version="1.0" encoding="UTF-8"?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9">
  <url>
    <loc>http://www.example.org/business/article55.html</loc>
    <news:news>
      <news:publication>
        <news:name>The Example Times</news:name>
        <news:language>en</news:language>
      </news:publication>
      <news:publication_date>2008-12-23T09:10:11+00:00</news:publication_date>
      <news:title>Companies A, B in Merger Talks</news:title>
    </news:news>
  </url>
</urlset>

替代库

rust-sitemap》和《sitewriter》库是目前最好的替代方案。

以下优缺点列表是根据本文件最近更新后的情况。

rust-sitemap

优点

  • 支持 URL、索引网站地图
  • 支持读取文件
  • 支持写入文件

缺点

  • 不支持图像、视频、新闻网站地图
  • 只支持一些验证
  • 结构/方法文档低

sitewriter

优点

  • 支持 URL 网站地图
  • 支持写入文件
  • 支持构建者模式
  • 使用 quick-xml,因此应该相当快
  • 一些结构/方法文档

缺点

  • 不支持索引、图像、视频、新闻网站地图
  • 不支持读取文件
  • 零数据验证

sitemap-iter

优点

  • 支持 URL 网站地图
  • 支持读取文件

缺点

  • 不支持索引、图像、视频、新闻网站地图
  • 不支持写入文件
  • 零数据验证
  • 结构/方法文档低

rust-sitemap-writer

优点

  • 支持 URL 网站地图
  • 支持写入文件

缺点

  • 不支持索引、图像、视频、新闻网站地图
  • 不支持读取文件
  • 零数据验证
  • 零结构/方法文档

mdbook-sitemap-generator

优点

  • 半支持 URL 网站地图
  • 支持写入文件

缺点

  • 不是通用网站地图库
  • 不支持 URL 网站地图的所有可能标签
  • 不支持索引、图像、视频、新闻网站地图
  • 不支持读取文件
  • 零数据验证
  • 零结构/方法文档

开发者

项目正在积极维护中 - 即使没有最近的提交!如果库需要更新,请提交一个问题/错误请求!

使用以下构建:Rust 1.65

功能请求

读取站点地图文件(+可能的速度提升)

我希望这个库使用quick-xml而不是xml-builder

quick-xml库是为了速度而构建的,不仅支持写入文件,还支持读取文件。我没有对xml-builder或在这个库中的使用进行基准测试,所以无法说明quick-xml将产生的影响。

我最初选择xml-builder是因为它学习和使用起来非常简单。对于我的用例来说,它已经足够快了,所以我不需要寻找其他东西。

如果你喜欢这个库提供的内容,但只需要解析站点地图并且也可以使用速度提升 - 请考虑提交一个拉取请求!(最好是替换xml-builderquick-xml的请求lol)

编码国家代码

在视频站点图中,有一个名为<video: restriction>的标签,其中的文本是以空格分隔的国家代码列表,格式为ISO 3166

目前,国家代码被类型提示为只是一个HashSet<String>。如果有一个枚举/结构体将每个ISO 3166国家代码编码为单独的实体,那么这个库就可以有额外的保证,即每个代码都是有效的。

isocountry-rsrust_iso_3166库看起来很有前途。

由于我对HashSet<String>对我的用例感到满意,所以还没有优先考虑这个问题。欢迎提交拉取请求!

命令

  • makelint
    • 通过cargo fmt检查代码库。
  • maketest
    • 通过以下方式测试代码库:
      • cargofmt
      • cargocheck
      • cargo clippy(具有疯狂严格的默认设置)
      • cargotest.

致谢

Todd Everett Griffin用🤬和🥲制作。

sitemap-rsMIT许可证下开源。

依赖

~1MB
~18K SLoC