1pub mod meta_error;
2mod site;
3pub mod meta;
4
5use select::document::Document;
6use site::{Site, Website, find_manual_meta, find_og_meta, find_tw_meta};
7
8pub fn get_meta(url: &str) -> Result<meta::Meta, meta_error::MetaError>{
9 let mut site = Site::new(url);
10 site.check_type()?;
11 let doc = Document::from(site.content.as_ref());
12 let default_meta = meta::Meta::new("kosong", "kosong", "kosong");
13 let result: meta::Meta = match site.meta_type {
14 meta::MetaType::Og => find_og_meta(&doc).unwrap_or(default_meta),
15 meta::MetaType::Tw => find_tw_meta(&doc).unwrap_or(default_meta),
16 meta::MetaType::Manual => find_manual_meta(&doc).unwrap_or(default_meta),
17 meta::MetaType::Facebook => find_manual_meta(&doc).unwrap_or(default_meta),
18 meta::MetaType::Twitter => return Err(meta_error::MetaError::SomeError("twitter site is not available at this momment")),
19 meta::MetaType::Instagram => find_og_meta(&doc).unwrap_or(default_meta),
20 };
21 return Ok(result);
22}
23
24#[cfg(test)]
25mod tests {
26 use super::*;
27 #[test]
28 fn get_meta_test() {
29 let mymeta = get_meta("https://github.com/miqbalrr/grab-meta").unwrap();
30 assert_eq!(mymeta.title, "miqbalrr/grab-meta");
31 }
32}