///|
pub fn sitemap_urls_allowed(
xml : String,
robots_text : String,
agent : String,
) -> Array[String] {
filter_urls(robots_text, agent, sitemap_urls(xml))
}
///|
pub fn sitemap_urls_blocked(
xml : String,
robots_text : String,
agent : String,
) -> Array[String] {
let robots = parse(robots_text)
let result : Array[String] = []
for url in sitemap_urls(xml) {
if !decide_url(robots, agent, url).allowed ||
!host_matches_robots(robots, url) {
result.push(url)
}
}
result
}
///|
pub fn sitemap_coverage_report(
xml : String,
robots_text : String,
agent : String,
) -> String {
let all = sitemap_urls(xml)
let allowed = sitemap_urls_allowed(xml, robots_text, agent)
let blocked = sitemap_urls_blocked(xml, robots_text, agent)
"total=" +
all.length().to_string() +
"\nallowed=" +
allowed.length().to_string() +
"\nblocked=" +
blocked.length().to_string()
}
///|
pub fn sitemap_by_extension(xml : String, ext : String) -> Array[String] {
let result : Array[String] = []
for url in sitemap_urls(xml) {
if path_has_extension(url_path_without_query(url), ext) {
result.push(url)
}
}
result
}
///|
pub fn sitemap_same_host(xml : String, host : String) -> Array[String] {
let result : Array[String] = []
for url in sitemap_urls(xml) {
if same_host(url, host) {
result.push(url)
}
}
result
}
///|
pub fn same_host(url : String, host : String) -> Bool {
match url_host(url) {
Some(found) => lower_ascii(found) == lower_ascii(host)
None => false
}
}
///|
pub fn sitemap_inventory(xml : String) -> String {
let lines : Array[String] = []
for entry in sitemap_entries(xml) {
lines.push(
entry.loc +
" " +
entry.lastmod +
" " +
entry.changefreq +
" " +
entry.priority,
)
}
if lines.is_empty() {
"empty"
} else {
join_lines(lines)
}
}