package org.rr.commons.net.imagefetcher;
import static org.rr.commons.utils.StringUtil.EMPTY;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.rr.commons.mufs.IResourceHandler;
import org.rr.commons.mufs.ResourceHandlerFactory;
import org.rr.commons.utils.StringUtil;
public class AbabeenImageFetcher extends AImageFetcher {
private boolean fetched = false;
@Override
public List<IImageFetcherEntry> getNextEntries() throws IOException {
if (fetched || StringUtils.isBlank(getSearchTerm())) {
return Collections.emptyList();
}
return searchImages(searchTerm, 25);
}
private List<IImageFetcherEntry> searchImages(String searchTerm, int count) throws IOException {
String encodesSearchPhrase = URLEncoder.encode(searchTerm, StringUtil.UTF_8);
String urlString = "http://api.ababeen.com/api/images.php?q=" + encodesSearchPhrase + "&count=" + count;
List<IImageFetcherEntry> result = new ArrayList<>(count);
final IResourceHandler resourceLoader = ResourceHandlerFactory.getResourceHandler(urlString);
try {
final byte[] content = resourceLoader.getContent();
try {
JSONArray json = new JSONArray(new String(content));
for (int i = 0; i < json.length(); i++) {
JSONObject jobj = (JSONObject) json.get(i);
result.add(new AbabeenImageFetcherEntry(jobj));
}
} catch (JSONException e) {
throw new IOException(e);
}
} finally {
resourceLoader.dispose();
}
return result;
}
private static class AbabeenImageFetcherEntry extends AImageFetcherEntry {
private JSONObject jobj;
AbabeenImageFetcherEntry(JSONObject jobj) {
this.jobj = jobj;
}
@Override
public URL getThumbnailURL() {
try {
return new URL(jobj.getString("tbUrl"));
} catch (Exception e) {
return null;
}
}
@Override
public URL getImageURL() {
try {
return new URL(jobj.getString("url"));
} catch (Exception e) {
return null;
}
}
@Override
public int getImageWidth() {
try {
return jobj.getInt("width");
} catch (Exception e) {
return 0;
}
}
@Override
public int getImageHeight() {
try {
return jobj.getInt("height");
} catch (Exception e) {
return 0;
}
}
@Override
public String getTitle() {
try {
return jobj.getString("title");
} catch (JSONException e) {
return EMPTY;
}
}
}
}