///|
pub struct CrawlProfile {
name : String
agent : String
seed_urls : Array[String]
max_urls : Int
} derive(Debug, Eq)
///|
pub fn profile(
name : String,
agent : String,
seed_urls : Array[String],
max_urls : Int,
) -> CrawlProfile {
{ name, agent, seed_urls, max_urls }
}
///|
pub fn profile_plan(text : String, p : CrawlProfile) -> Array[String] {
next_batch(text, p.agent, p.seed_urls, p.max_urls)
}
///|
pub fn profile_report(text : String, p : CrawlProfile) -> String {
let planned = profile_plan(text, p)
"profile=" +
p.name +
"\nagent=" +
p.agent +
"\nseeds=" +
p.seed_urls.length().to_string() +
"\nplanned=" +
planned.length().to_string()
}
///|
pub fn profile_markdown(text : String, p : CrawlProfile) -> String {
"# Crawl profile: " +
p.name +
"\n\n" +
fenced(profile_report(text, p)) +
"\n\n" +
markdown_decision_table(parse(text), p.agent, url_paths(p.seed_urls))
}
///|
pub fn url_paths(urls : Array[String]) -> Array[String] {
let paths : Array[String] = []
for url in urls {
paths.push(url_path(url))
}
paths
}