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
937 每月下载量
75KB
972 行
sitemap-rs
一个用于生成 URL、索引、图像、视频和新闻网站的 Rust 库。
特性
生成网站地图
验证网站地图数据
关于网站地图可以包含哪些数据,存在一些限制。这个库在结构体实例化时表面这些验证问题。现在您不必等待Google Search Console 或 Bing Webmaster Tools 提醒您在修复数据问题之前网站地图问题。
验证
- URL 网站地图
TooManyUrls
- 只能包含最多
50,000
个<url>
。
- 只能包含最多
TooMuchNews
- 只能包含最多
1,000
个<news: news>
。
- 只能包含最多
PriorityTooLow
和PriorityTooHigh
<priority>
必须介于0.0
和1.0
(包含) 之间。
TooManyImages
- 只能包含最多
1,000
个<image: image>
。
- 只能包含最多
- 索引网站地图
TooManySitemaps
- 只能包含最多
50,000
个<sitemap>
。
- 只能包含最多
- 视频网站地图
描述过长
<description>
必须不超过2048
个字符。
DurationTooShort
和DurationTooLong
<duration>
必须在1
到28,800
秒之间(包含)。
RatingTooLow
和RatingTooHigh
<rating>
必须在0.0
到5.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-builder
为quick-xml
的请求lol)
编码国家代码
在视频站点图中,有一个名为<video: restriction>
的标签,其中的文本是以空格分隔的国家代码列表,格式为ISO 3166。
目前,国家代码被类型提示为只是一个HashSet<String>
。如果有一个枚举/结构体将每个ISO 3166国家代码编码为单独的实体,那么这个库就可以有额外的保证,即每个代码都是有效的。
isocountry-rs和rust_iso_3166库看起来很有前途。
由于我对HashSet<String>
对我的用例感到满意,所以还没有优先考虑这个问题。欢迎提交拉取请求!
命令
makelint
- 通过
cargo fmt
检查代码库。
- 通过
maketest
- 通过以下方式测试代码库:
cargofmt
cargocheck
cargo clippy
(具有疯狂严格的默认设置)cargotest
.
- 通过以下方式测试代码库:
致谢
由Todd Everett Griffin用🤬和🥲制作。
sitemap-rs
在MIT许可证下开源。
依赖
~1MB
~18K SLoC