aboutsummaryrefslogtreecommitdiff
path: root/src/lyrics_engine/mod.rs
blob: 05c108d06401573cb06e7d2671c65975023c8541 (plain)
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
use percent_encoding::{NON_ALPHANUMERIC, utf8_percent_encode};
use std::io::Result;

mod genius;

use crate::Track;
use genius::{get_lyrics, search};

const GENIUS_CLIENT_TOKEN: &str = env!("LYRICLI_GENIUS_TOKEN");
const GENIUS_API_URL: &str = "https://api.genius.com/search";

pub async fn print_lyrics(track: Track, show_title: bool) -> Result<()> {
    if show_title {
        println!("{} - {}", track.artist, track.name);
    }

    let artist = utf8_percent_encode(&track.artist, NON_ALPHANUMERIC).to_string();
    let name = utf8_percent_encode(&track.name, NON_ALPHANUMERIC).to_string();
    let url = format!("{GENIUS_API_URL}?access_token={GENIUS_CLIENT_TOKEN}&q={artist}%20{name}");

    let song_url = search(&url).await?;
    let lyrics = get_lyrics(&song_url).await?;

    println!("{lyrics}");
    Ok(())
}