1mod helpers;
2mod search_page;
3mod song_page;
4
5#[derive(Debug, Clone, Copy, PartialEq)]
6pub enum LyricsFetchError {
7 NotFound,
8 NetworkError,
9 ParseError,
10 SelectorError,
11}
12
13pub async fn fetch_vocaloid_lyrics(title: &str) -> Result<Vec<String>, LyricsFetchError> {
14 let url = search_page::parser::search_song_url_in_atwiki(title).await?;
15 let lyrics = song_page::scraper::fetch_lyrics_from_atwiki(&url).await?;
16 Ok(lyrics)
17}
18
19pub async fn fetch_vocaloid_lyrics_html(title: &str) -> Result<Vec<String>, LyricsFetchError> {
20 let url = search_page::parser::search_song_url_in_atwiki(title).await?;
21 let lyrics = song_page::scraper::fetch_lyrics_from_atwiki_html(&url).await?;
22 Ok(lyrics)
23}
24
25#[tokio::test]
26async fn test_fetch_vocaloid_lyrics() {
27 let title = "ageha";
28 let lyrics = fetch_vocaloid_lyrics(title).await;
29 dbg!(&lyrics);
30 assert!(lyrics.is_ok());
31}
32
33
34#[tokio::test]
35async fn test_search_atwiki_with_contain_title_in_lyrics() {
36 let search_word = "ルカルカ★ナイトフィーバー";
37 let lyrics = fetch_vocaloid_lyrics_html(search_word).await;
38 dbg!(&lyrics);
39 assert!(lyrics.is_ok());
40}