jacquesh / foo_openlyrics

An open-source lyric display panel for foobar2000
MIT License
402 stars 24 forks source link

Source request: songlyrics.com #151

Open jacquesh opened 1 year ago

jacquesh commented 1 year ago

https://www.songlyrics.com

Requested at https://www.reddit.com/r/foobar2000/comments/mm70rb/i_made_an_opensource_alternative_to/igxi2m1/

Rexadev commented 1 year ago

In progress

// Include necessary headers
#include <iostream>
#include <string>
#include "foo_openlyrics.h"
#include "songlyrics_source.h"

// Function to retrieve the artist and song title from metadata
bool getMetadata(std::string& artist, std::string& title) {
    // Implement your logic to retrieve the artist and title from metadata
    // Replace this comment with your actual implementation

    // Example implementation:
    // Assuming you have a function to fetch the metadata from a file or another source
    // You need to replace the following line with your actual implementation

    // Fetch the metadata using your desired method and assign the values to the artist and title variables
    // For example, if you are using foobar2000's API, you might have a function like GetMetadataFromFile() to retrieve the metadata from a file

    // Example usage:
    // artist = GetMetadataFromFile("path_to_file", "artist");
    // title = GetMetadataFromFile("path_to_file", "title");

    // For demonstration purposes, using a simple hardcoded example
    artist = "ArtistName";
    title = "SongTitle";

    return true;
}

// Function to search for a song on SongLyrics.com and retrieve its lyrics
std::string searchSongLyrics(const std::string& artist, const std::string& title) {
    // Create the search URL by encoding the artist and title
    std::string searchURL = "https://www.songlyrics.com/search.php?song=" + artist + " " + title;

    // Create an instance of the SongLyricsSource class
    SongLyricsSource songLyricsSource;

    // Initialize the source and retrieve lyrics
    bool initializeSuccess = songLyricsSource.Initialize(searchURL);
    if (initializeSuccess) {
        std::string lyrics = songLyricsSource.GetLyrics();

        // Check if lyrics were successfully fetched
        if (!lyrics.empty()) {
            return lyrics;
        } else {
            // Handle the scenario when no lyrics are found
            return "No lyrics found for the provided artist and title.";
        }
    } else {
        // Handle the failure of the lyrics source initialization
        return "Failed to initialize the lyrics source.";
    }
}

int main() {
    // Variables to store the artist and song title
    std::string artist, title;

    // Retrieve the artist and song title from metadata
    bool metadataSuccess = getMetadata(artist, title);
    if (!metadataSuccess) {
        std::cout << "Failed to retrieve metadata." << std::endl;
        return 1;
    }

    // Search for the song and retrieve the lyrics
    std::string lyrics = searchSongLyrics(artist, title);

    // Display the lyrics or error message
    std::cout << "=== Lyrics for '" << title << "' by " << artist << " ===\n";
    std::cout << lyrics << "\n";
    std::cout << "========================================" << std::endl;

    return 0;
}