1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
use kuchiki; use kuchiki::traits::ParserExt; use parser; use data::{ToStaticStr, Category, State, Item}; const ITEMS_PER_PAGE: usize = 24; pub fn get_items<C>(username: &str, category: Category, state: State, callback: C) -> Vec<Item> where C: Fn(usize) { let category_str = category.to_static_str(); let state_str = state.to_static_str(); let mut result = vec![]; for page in 1.. { callback(page); let url = format!("https://bgm.tv/{}/list/{}/{}?page={}", category_str, username, state_str, page); let doc = kuchiki::parse_html().from_http(&url).unwrap(); let items = parser::get_all_items(doc); let count = items.len(); result.extend(items); if count < ITEMS_PER_PAGE { break; } } result }