package com.camilstaps.taize; import android.content.Context; import android.preference.PreferenceManager; import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.Response; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; /** * Use the Bible API of getbible.net * * @author Camil Staps */ public class Bible { /** * Base URL of the API */ private static final String BASE_URL = "https://getbible.net/json?"; /** * Request data from the API * @param context context to handle from * @param query_string Query string with parameters for the API * @param listener listener; passed on to Volley, for processing the result * @param errorListener errorListener for when some error occurs */ private static void request(Context context, String query_string, Response.Listener listener, Response.ErrorListener errorListener) { RequestQueue queue = Volley.newRequestQueue(context); StringRequest request = new StringRequest(Request.Method.GET, BASE_URL + "v=" + getVersion(context) + "&" + query_string, listener, errorListener); queue.add(request); } /** * Get the Bible version (i.e., the translation) from the preferences of the user * @param context context to handle from * @return the version from the preferences */ public static String getVersion(Context context) { return PreferenceManager.getDefaultSharedPreferences(context).getString(SettingsActivity.SettingsFragment.PREF_VERSION_BIBLE, context.getResources().getString(R.string.pref_version_bible_default)); } /** * Get a passage from the API * @param context context to handle from * @param passage indicator for the passage, using English full book names (i.e. "Mark 7:13-18") * @param listener listener; passed on to Volley, for processing the result * @param errorListener errorListener for when some error occurs */ public static void getPassage(Context context, String passage, final Response.Listener listener, final Response.ErrorListener errorListener) { request(context, "p=" + URLEncoder.encode(passage), new Response.Listener() { @Override public void onResponse(String s) { StringBuilder passage = new StringBuilder(); try { JSONObject response = new JSONObject(s.substring(1, s.length() - 2)); JSONArray books = response.getJSONArray("book"); for (int b = 0; b < books.length(); b++) { JSONObject chapter = books.getJSONObject(b).getJSONObject("chapter"); List sortedKeys = new ArrayList(); Iterator verses = chapter.keys(); while (verses.hasNext()) { String verse_number = (String) verses.next(); sortedKeys.add(verse_number); } Collections.sort(sortedKeys); for (String verse_number : sortedKeys) { JSONObject verse = chapter.getJSONObject(verse_number); passage.append(verse.getString("verse")).append(" "); } } } catch (JSONException e) { try { JSONObject response = new JSONObject(s.substring(1, s.length() - 2)); JSONObject chapter = response.getJSONObject("chapter"); List sortedKeys = new ArrayList(); Iterator verses = chapter.keys(); while (verses.hasNext()) { String verse_number = (String) verses.next(); sortedKeys.add(verse_number); } Collections.sort(sortedKeys); for (String verse_number : sortedKeys) { JSONObject verse = chapter.getJSONObject(verse_number); passage.append(verse.getString("verse")).append(" "); } } catch (JSONException e2) { errorListener.onErrorResponse(null); } } listener.onResponse(passage.toString()); } }, errorListener); } }