package nl.pascaldevink.intellij.thesaurus.downloader;
import org.apache.commons.httpclient.HttpException;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;
import java.util.List;
public class MashapeDownloader extends AbstractDownloader
{
private static final String endpoint = "https://wikisynonyms.p.mashape.com/";
public MashapeDownloader(String apiKey)
{
super(apiKey);
}
protected String download(String originalWord) throws IOException
{
URL serverAddress = new URL(buildUrl(originalWord));
HttpURLConnection connection = (HttpURLConnection)serverAddress.openConnection();
connection.setRequestProperty("X-Mashape-Key", apiKey);
connection.setRequestProperty("Accept", "application/json");
connection.connect();
int rc = connection.getResponseCode();
String line = null;
BufferedReader br = new BufferedReader(new java.io.InputStreamReader(connection.getInputStream()));
StringBuilder sb = new StringBuilder();
while ((line = br.readLine()) != null)
sb.append(line + '\n');
connection.disconnect();
if (rc != 200) {
throw new HttpException("No result found. Response body: " + sb.toString());
}
return sb.toString();
}
@Override
protected String buildUrl(String originalWord) throws UnsupportedEncodingException
{
return endpoint + originalWord;
}
@Override
protected List<String> parseRawJsonToSynonymsList(String rawJson)
{
List<String> synonyms = new ArrayList<String>();
JSONObject fullJSON = (JSONObject) JSONValue.parse(rawJson);
JSONArray arr = (JSONArray) fullJSON.get("terms");
for (int i = 0; i <arr.toArray().length; i++) {
JSONObject term = (JSONObject) arr.get(i);
synonyms.add(term.get("term").toString());
}
return synonyms;
}
}