package com.progscrape.data; import android.util.Log; import com.grack.nanojson.JsonObject; import com.grack.nanojson.JsonParser; import com.octo.android.robospice.request.okhttp.OkHttpSpiceRequest; import com.squareup.okhttp.OkUrlFactory; import java.io.InputStream; import java.net.HttpURLConnection; import java.net.URL; import java.net.URLEncoder; import java.util.concurrent.TimeUnit; public class FeedRequest extends OkHttpSpiceRequest<JsonObject> implements Request { private String query; public FeedRequest(String query) { super(JsonObject.class); this.query = query; } public String getCacheKey() { return query == null ? "feed" : "feed-" + query; } @Override public long getCacheDuration() { if (query == null) return TimeUnit.MILLISECONDS.convert(5, TimeUnit.MINUTES); // Shorter cache for tag queries return TimeUnit.MILLISECONDS.convert(1, TimeUnit.MINUTES); } @Override public JsonObject loadDataFromNetwork() throws Exception { URL baseUrl = new URL("http://www.progscrape.com/feed.json" + (query == null ? "" : "?search=" + URLEncoder.encode(query, "UTF-8"))); Log.d("feed", "Making request to " + baseUrl); HttpURLConnection conn = getUrlFactory().open(baseUrl); try (InputStream in = conn.getInputStream()) { JsonObject rawFeed = JsonParser.object().from(in); Log.d("feed", "Successfully retrieved feed"); return rawFeed; } } private OkUrlFactory getUrlFactory() { return new OkUrlFactory(getOkHttpClient()); } }