package com.sdsmdg.harjot.MusicDNA.lyrics; import com.sdsmdg.harjot.MusicDNA.annotations.Reflection; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import org.jsoup.parser.Parser; import java.io.IOException; import java.net.URLEncoder; @Reflection public class Lololyrics { private static final String baseUrl = "http://api.lololyrics.com/0.5/getLyric?artist=%1s&track=%1s&rawutf8=1"; public static final String domain = "www.lololyrics.com/"; @Reflection public static Lyrics fromMetaData(String artist, String song) { if ((artist == null) || (song == null)) return new Lyrics(Lyrics.ERROR); try { String encodedArtist = URLEncoder.encode(artist, "UTF-8"); String encodedSong = URLEncoder.encode(song, "UTF-8"); String url = String.format(baseUrl, encodedArtist, encodedSong); String body = Jsoup.connect(url).execute().body(); Document lololyrics = Jsoup.parse(body.replaceAll("(\\n)", "<br />")); Element loloResult = lololyrics.select("result").first(); if (loloResult == null || loloResult.select("status") == null || !"OK".equals(loloResult.select("status").text())) return new Lyrics(Lyrics.NO_RESULT); if (loloResult.select("response").hasText()) { Lyrics lyrics = new Lyrics(Lyrics.POSITIVE_RESULT); lyrics.setArtist(artist); lyrics.setTitle(song); String text = Parser.unescapeEntities(loloResult.select("response").html(), true); lyrics.setText(text); lyrics.setSource(domain); if (loloResult.select("cover").hasText()) lyrics.setCoverURL(loloResult.select("cover").text()); String weburl = loloResult.select("url").html(); lyrics.setURL(weburl); return lyrics; } else { return new Lyrics(Lyrics.NO_RESULT); } } catch (IOException e) { e.printStackTrace(); return new Lyrics(Lyrics.ERROR); } } // TODO handle lololyrics.com url public static Lyrics fromURL(String url, String artist, String song) { /** We can't transform generic lololyrics url to API url. Also we can't get artist name and song title from Lololyrics API. **/ return new Lyrics(Lyrics.NO_RESULT); } }