package com.sdsmdg.harjot.MusicDNA.lyrics;
import com.sdsmdg.harjot.MusicDNA.annotations.Reflection;
import com.sdsmdg.harjot.MusicDNA.utilities.Net;
import com.google.gson.JsonArray;
import com.google.gson.JsonObject;
import com.google.gson.JsonParseException;
import com.google.gson.JsonParser;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
@Reflection
public class Bollywood {
@Reflection
public static final String domain = "api.quicklyric.be/bollywood/";
public static ArrayList<Lyrics> search(String query) {
ArrayList<Lyrics> results = new ArrayList<>();
String searchUrl = "https://api.quicklyric.be/bollywood/search?q=%s";
try {
String jsonText;
jsonText = Net.getUrlAsString(String.format(searchUrl, URLEncoder.encode(query, "utf-8")));
JsonObject jsonResponse = new JsonParser().parse(jsonText).getAsJsonObject();
JsonArray lyricsResults = jsonResponse.getAsJsonArray("lyrics");
if (lyricsResults != null)
for (int i = 0; i < lyricsResults.size(); ++i) {
JsonObject lyricsResult = lyricsResults.get(i).getAsJsonObject();
JsonArray tags = lyricsResult.get("tags").getAsJsonArray();
Lyrics lyrics = new Lyrics(Lyrics.SEARCH_ITEM);
lyrics.setTitle(lyricsResult.get("name").getAsString());
for (int j = 0; j < tags.size(); ++j) {
JsonObject tag = tags.get(j).getAsJsonObject();
if (tag.get("tag_type").getAsString().equals("Singer")) {
lyrics.setArtist(tag.get("name").getAsString().trim());
break;
}
}
lyrics.setURL("https://api.quicklyric.be/bollywood/get?id=" + lyricsResult.get("id").getAsInt());
results.add(lyrics);
}
} catch (Exception e) {
e.printStackTrace();
}
return results;
}
@Reflection
public static Lyrics fromMetaData(String artist, String title) {
ArrayList<Lyrics> searchResults = search(artist + " " + title);
for (Lyrics result : searchResults) {
if (result.getArtist() != null && artist.contains(result.getArtist())
&& result.getTrack() != null && title.equalsIgnoreCase(result.getTrack()))
return fromAPI(result.getURL(), artist, result.getTrack());
}
return new Lyrics(Lyrics.NO_RESULT);
}
// TODO handle urls
@Reflection
public static Lyrics fromURL(String url, String artist, String title) {
return fromAPI(url, artist, title);
}
public static Lyrics fromAPI(String url, String artist, String title) {
Lyrics lyrics = new Lyrics(Lyrics.POSITIVE_RESULT);
lyrics.setArtist(artist);
lyrics.setTitle(title);
// fixme no public url
try {
String jsonText = Net.getUrlAsString(url);
JsonObject lyricsJSON = new JsonParser().parse(jsonText).getAsJsonObject();
lyrics.setText(lyricsJSON.get("body").getAsString().trim());
} catch (Exception e) {
e.printStackTrace();
return new Lyrics(Lyrics.ERROR);
}
lyrics.setSource(domain);
return lyrics;
}
}