1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
|
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<String> 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<String> listener, final Response.ErrorListener errorListener) {
request(context, "p=" + URLEncoder.encode(passage), new Response.Listener<String>() {
@Override
public void onResponse(String s) {
// There are different types of API responses (one with a 'book' array, one without). We need to try both.
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<String> sortedKeys = new ArrayList<String>();
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<String> sortedKeys = new ArrayList<String>();
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);
}
}
|