forked from j62/ctbrec
1
0
Fork 0

Fix JSON parsing for CamSoda

This commit is contained in:
0xboobface 2018-12-13 16:15:08 +01:00
parent 10c0728e05
commit 540e8a8466
1 changed files with 22 additions and 11 deletions

View File

@ -4,6 +4,8 @@ import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import org.json.JSONArray; import org.json.JSONArray;
@ -56,28 +58,27 @@ public class CamsodaUpdateService extends PaginatedScheduledService {
if (response.isSuccessful()) { if (response.isSuccessful()) {
JSONObject json = new JSONObject(response.body().string()); JSONObject json = new JSONObject(response.body().string());
if(json.has("status") && json.getBoolean("status")) { if(json.has("status") && json.getBoolean("status")) {
JSONArray template = json.getJSONArray("template");
JSONArray results = json.getJSONArray("results"); JSONArray results = json.getJSONArray("results");
for (int i = 0; i < results.length(); i++) { for (int i = 0; i < results.length(); i++) {
JSONObject result = results.getJSONObject(i); JSONObject result = results.getJSONObject(i);
if(result.has("tpl")) { if(result.has("tpl")) {
JSONArray tpl = result.getJSONArray("tpl"); JSONArray tpl = result.getJSONArray("tpl");
String name = tpl.getString(0); String name = tpl.getString(getTemplateIndex(template, "username"));
String displayName = tpl.getString(1); String displayName = tpl.getString(getTemplateIndex(template, "display_name"));
// int connections = tpl.getInt(2); // int connections = tpl.getInt(2);
String streamName = tpl.getString(5); String streamName = tpl.getString(getTemplateIndex(template, "stream_name"));
String tsize = tpl.getString(6); String tsize = tpl.getString(getTemplateIndex(template, "tsize"));
String serverPrefix = tpl.getString(7); String serverPrefix = tpl.getString(getTemplateIndex(template, "server_prefix"));
CamsodaModel model = (CamsodaModel) camsoda.createModel(name); CamsodaModel model = (CamsodaModel) camsoda.createModel(name);
model.setDescription(tpl.getString(4)); model.setDescription(tpl.getString(getTemplateIndex(template, "subject_html")));
model.setSortOrder(tpl.getFloat(3)); model.setSortOrder(tpl.getFloat(getTemplateIndex(template, "sort_value")));
long unixtime = System.currentTimeMillis() / 1000; long unixtime = System.currentTimeMillis() / 1000;
String preview = "https://thumbs-orig.camsoda.com/thumbs/" String preview = "https://thumbs-orig.camsoda.com/thumbs/"
+ streamName + '/' + serverPrefix + '/' + tsize + '/' + unixtime + '/' + name + ".jpg?cb=" + unixtime; + streamName + '/' + serverPrefix + '/' + tsize + '/' + unixtime + '/' + name + ".jpg?cb=" + unixtime;
model.setPreview(preview); model.setPreview(preview);
if(result.has("edge_servers")) { JSONArray edgeServers = tpl.getJSONArray(getTemplateIndex(template, "edge_servers"));
JSONArray edgeServers = result.getJSONArray("edge_servers"); model.setStreamUrl("https://" + edgeServers.getString(0) + "/cam/mp4:" + streamName + "_h264_aac_480p/playlist.m3u8");
model.setStreamUrl("https://" + edgeServers.getString(0) + "/cam/mp4:" + streamName + "_h264_aac_480p/playlist.m3u8");
}
model.setDisplayName(displayName); model.setDisplayName(displayName);
models.add(model); models.add(model);
} else { } else {
@ -125,6 +126,16 @@ public class CamsodaUpdateService extends PaginatedScheduledService {
} }
} }
} }
private int getTemplateIndex(JSONArray template, String string) {
for (int i = 0; i < template.length(); i++) {
String s = template.getString(i);
if(Objects.equals(s, string)) {
return i;
}
}
throw new NoSuchElementException(string + " not found in template: " + template.toString());
}
}; };
} }