Revision history for LyricFinder 1.00 2020/12/15 First version, released on an unsuspecting world. (Converted from David Precious's Lyric::Fetcher and friends) 1.01 2021/01/15 - LyricFinder::Musixmatch - Handle non/high/wide/utf8 ascii characters in artist and title fields, ie. accented characters - Musixmatch.com allows these in searches and encodes them in the page URL. - Add URI::Escape to prerequesites. - Small Pod/doc. tweaks. 1.02 2021/05/11 - LyricFinder::Musixmatch - Fix bug that cut off first few lines of lyrics (due to their site separating an abreviated version of the first few lines from the rest of the lyrics). Also added a "(Musixmatch status: ok|warning|error)" line at bottom indicating what Musixmatch thinks of the state of the selected song's lyrics. 1.03 2021/05/13 - Added LyricFinder::Letras (https://www.letras.mus.br). - Added optional integer 4th argument to LyricFinder->fetch() to allow limiting # of sites tried (Default is to try all (currently 5 sites installed) until lyrics are found. Use this with the 'random' option to limit the time spent searching before giving up. If zero or >= 5 (current # of sites), all 5 sites will be tried. - LyricFinder::Genius: Add conversions of accented characters to their unaccented equivalents to handle some non-English artist and song names. 1.10 2021/05/26 - Refactor all modules to combine all common methods into a separate internal module: LyricFinder::_Class (new) to greatly simplify and eliminate redundant code. This should make creating new site modules much simpler (now most if not all functions other than new(), fetch(), and the internal function _parse() should not be required in site modules unless it's necessary to override)! This better follows proper object-oriented programming standards. - LyricFinder::Genius - Fix failure to fetch lyrics due to changes in their site (to increase obfuscation, I presume). - LyricFinder::Musixmatch - Add "-nostatus" option to suppress the additional "status" message appended to Musixmatch lyrics. NOTE: this option will also be used in future to suppress any additional info. that may be offered by other sites as well (only actual lyrics will be returned, if specified). - Upgrade default user-agent to Mozilla Firefox v84. - Fixed bug preventing caching fetched lyrics if -cache directory had the ">" (write-only) option prepended. 1.11 2021/05/26 - Doc fixes, namely "-nostatus" should be "-noextra" and the effect (if specified) is to SUPPRESS the extra status message, if any! Docs implied the opposite. 1.20 2021/05/29 - Added LyricFinder option "-omit" to specify submodules that you have installed to NOT be used, ie. -omit => "AZLyrics,Genius". This can limit which submodules will be used for "all" or "random" searches. - Added image_url() function to return the cover-art image on some lyric sites (currently Genius and Musixmatch). For other sites and songs that do not provide an image, an empty string is returned. - LyricFinder::Letras - Verify that lyrics page returned matches the artist / title being searched for and fail (return no lyrics) if not. (Letras has been known to try to "guess" the song if they do not have the exact one you're asking for)! 1.21 2021/12/01 LyricFinder::Letras - Fix - Was broken due to slight change in their site (wasn't returning any lyrics due to "artist mismatch". 1.22 2022/07/29 LyricFinder::Genius - Remove spam from end of lyrics text recently added by Genius. :/ 1.23 2022/09/23 LyricFinder::Genius - It's Baaaaack! Remove more spam from end of lyrics text added by Genius, so we had to rejigger our filter. 1.30 2024/01/25 - Added LyricFinder::ChartLyrics to fetch lyrics and album-covers from api.chartlyrics.com. - Update default user-agent to Firefox 112.0. - LyricFinder::_Class: Allow http (in addition to https) - needed by LyricFinder::ChartLyrics. Also pass the artist and song title parameters back to _fetch() - also needed by LyricFinder::ChartLyrics. 1.31 2024/01/26 - LyricFinder::ChartLyrics - Polish off a cpl. rough edges. 1.32 2024/01/27 - LyricFinder::Letras - Make work again (discovered during general testing that Letras was no longer working due to aparent site changes). - LyricFinder::ChartLyrics - Shush an improper error msg. (sites don't normally "carp" an error msg. for simple "no matching lyrics found"). Also add a fix for titles and artist names that contain Perl regex special characters. - LyricFinder::Genius - Add a note in the docs about potential spam embedded in lyrics text returned. 1.40 2025/02/26 - Added LyricFinder::Lrclib (lrclib.net) - a new free open-source site Audacious audio player had recently added support for this site in their latest development release. 1.50 2025/03/01 - LyricFinder::Musixmatch - Fix failure to fetch cover-art images due to slight changes in their site. - Added "-synced" option to allow for choosing between fetching timestamped (synced) lyrics or traditional plain-text ones. Currently, only the new LyricFinder::Lrclib site supports returning synced lyrics. See the POD docs for details on this option. - Modified the argument requirements for the fetch() method to: 1) allow for specifying multiple site-modules in a string, in addition to the previous array-ref format. 2) allow the "random" choice to be included anywhere in a list of modules. This can allow for forcing certain modules to be searched in order first, then including the others in random order, and even followed up by one to be searched last (without repeating a call to a previously-searched module. - Misc. doc. touchups.