static String listings_url = "https://www.horizon.tv/oesp/api/NL/nld/web/listings";
// ?byStationId=28070126&sort=startTime&range=1-100&byStartTime=1362000000000~1362100000000";
- private static final int MAX_PROGRAMMES_PER_DAY = 9999;
private static final int MAX_DAYS_AHEAD_SUPPORTED_BY_HORIZON = 3;
public static String NAME = "horizon.tv";
StringBuilder s = new StringBuilder(listings_url);
s.append("?byStationId=");
s.append(channel.id);
+ s.append("&sort=startTime&range=1-100");
Calendar startTime=Calendar.getInstance();
startTime.set(Calendar.HOUR_OF_DAY, 0);
startTime.set(Calendar.MINUTE, 0);
startTime.set(Calendar.SECOND, 0);
startTime.set(Calendar.MILLISECOND, 0);
+ startTime.add(Calendar.DAY_OF_MONTH, 1);
Calendar endTime = (Calendar) startTime.clone();
endTime.add(Calendar.DAY_OF_MONTH, 1);
s.append("&byStartTime=");
s.append(startTime.getTimeInMillis());
s.append("~");
s.append(endTime.getTimeInMillis());
- s.append("&sort=startTime&range=1-100");
return new URL(s.toString());
}
e1.printStackTrace();
return result;
}
- logger.info("horizon channels json: " + channels.toString());
+ logger.debug("horizon channels json: " + channels.toString());
int numChannels = Integer.parseInt(channels.getString("totalResults"));
JSONArray jsonArray = channels.getJSONArray("channels");
// System.out.println( "id: " + zender.getString("id"));
// System.out.println( "name: " + zender.getString("name"));
- int id = zender.getInt("id");
- String name = org.apache.commons.lang.StringEscapeUtils
- .unescapeHtml(zender.getString("name"));
- String icon = "http://horizonassets.nl/img/channels/53x27/" + id
- + ".png";
+ JSONArray stationSchedules=zender.getJSONArray("stationSchedules");
+ assert(1 == stationSchedules.size());
+
+ JSONObject firstSchedule = stationSchedules.getJSONObject(0);
+ JSONObject station = firstSchedule.getJSONObject("station");
+ logger.info("firstschedule: " + firstSchedule.toString());
+ int id = station.getInt("id");
+ String name = station.getString("title");
+ JSONArray images = station.getJSONArray("images");
+ String icon = "";
Channel c = Channel.getChannel(getId(), Integer.toString(id), name,
icon);
result.add(c);
return result;
}
- private JSONObject fetchJSON(URL url) throws Exception {
- String json = fetchURL(url);
- logger.debug(json);
- return JSONObject.fromObject(json);
- }
-
/*
* (non-Javadoc)
*
return result; // empty list
}
-
for (Channel c : channels) {
URL url = programmeUrl(c, day);
+ logger.info("Programme url:" + url);
JSONObject jsonObject = fetchJSON(url);
- JSON ps = (JSON) jsonObject.get(c.id);
- if (ps.isArray()) {
- JSONArray programs = (JSONArray) ps;
- for (int i = 0; i < programs.size()
- && i < MAX_PROGRAMMES_PER_DAY; i++) {
- JSONObject programme = programs.getJSONObject(i);
- Programme p = programmeFromJSON(programme,
- config.fetchDetails);
- p.channel = c.getXmltvChannelId();
- result.add(p);
- }
- } else {
- JSONObject programs = (JSONObject) ps;
- int count = 0;
- for (Object o : programs.keySet()) {
- if (count > MAX_PROGRAMMES_PER_DAY)
- break;
- JSONObject programme = programs.getJSONObject(o.toString());
- Programme p = programmeFromJSON(programme,
- config.fetchDetails);
- p.channel = c.getXmltvChannelId();
- result.add(p);
- count++;
- }
+ logger.info(jsonObject.toString());
+ JSONArray listings = jsonObject.getJSONArray("listings");
+ for (int i = 0; i < listings.size(); i++) {
+ JSONObject listing = listings.getJSONObject(i);
+ Programme p = programmeFromJSON(listing,
+ config.fetchDetails);
+ p.channel = c.getXmltvChannelId();
+ result.add(p);
}
}
}
/*
- * {"4": [{"db_id":"12436404", "titel":"RTL Boulevard", "genre":"Amusement",
- * "soort":"Amusementsprogramma", "kijkwijzer":"", "artikel_id":null,
- * "datum_start":"2012-03-30 23:45:00", "datum_end":"2012-03-31 00:40:00"},
- * {"db_id":"12436397","titel":"Teleshop 4","genre":"Overige","soort":
- * "Homeshopping"
- * ,"kijkwijzer":"","artikel_id":null,"datum_start":"2012-03-31 00:40:00"
- * ,"datum_end":"2012-03-31 00:41:00"},
- * {"db_id":"12436398","titel":"Cupido TV"
- * ,"genre":"Overige","soort":"","kijkwijzer"
- * :"","artikel_id":null,"datum_start"
- * :"2012-03-31 00:41:00","datum_end":"2012-03-31 04:30:00"},
- * {"db_id":"12436399"
- * ,"titel":"Morning chat","genre":"Overige","soort":"","kijkwijzer"
- * :"","artikel_id"
- * :null,"datum_start":"2012-03-31 04:30:00","datum_end":"2012-03-31 06:00:00"
- * }, ....... ]}
+ * {"id":"crid:~~2F~~2Feventis.nl~~2F00000000-0000-1000-0004-00000189B7F0-imi:001017B90000FCD2",
+ * "countryCode":"NL",
+ * "languageCode":"nld",
+ * "deviceCode":"web",
+ * "locationId":"15332128",
+ * "startTime":1362399000000,
+ * "endTime":1362399300000,
+ * "stationId":"28070126",
+ * "imi":"imi:001017B90000FCD2",
+ * "program":{"id":"crid:~~2F~~2Feventis.nl~~2F00000000-0000-1000-0004-00000189B7F0",
+ * "mediaGroupId":"crid:~~2F~~2Feventis.nl~~2F00000000-0000-1000-0008-000000007784",
+ * "title":"NOS Sportjournaal (Ned1) - 13:10",
+ * "secondaryTitle":"NOS Sportjournaal",
+ * "description":"Aandacht voor het actuele sportnieuws.",
+ * "shortDescription":"Aandacht voor het actuele sportnieuws.",
+ * "longDescription":"Aandacht voor het actuele sportnieuws.",
+ * "countryCode":"NL",
+ * "languageCode":"nld",
+ * "deviceCode":"web",
+ * "medium":"TV",
+ * "categories":[{"id":"13946291","title":"sports","scheme":"urn:tva:metadata:cs:UPCEventGenreCS:2009"},
+ * {"id":"13946352","title":"sports/sports","scheme":"urn:tva:metadata:cs:UPCEventGenreCS:2009"}],
+ * "mediaType":"Episode",
+ * "isAdult":false,
+ * "seriesEpisodeNumber":"50108216",
+ * "cast":[],
+ * "directors":[],
+ * "videos":[],
+ * "images":[{"assetType":"tva-boxcover","width":180,"height":260,"url":"https://www.horizon.tv/static-images/926/511/36654624.p.jpg"},
+ * {"assetType":"boxart-xlarge","width":210,"height":303,"url":"https://www.horizon.tv/static-images/926/511/36654624.p_210x303_34273348255.jpg"},
+ * {"assetType":"boxart-large","width":180,"height":260,"url":"https://www.horizon.tv/static-images/926/511/36654624.p_180x260_34273348256.jpg"},
+ * {"assetType":"boxart-medium","width":110,"height":159,"url":"https://www.horizon.tv/static-images/926/511/36654624.p_110x159_34273348257.jpg"},
+ * {"assetType":"boxart-small","width":75,"height":108,"url":"https://www.horizon.tv/static-images/926/511/36654624.p_75x108_34273348258.jpg"}]}}
*/
- private Programme programmeFromJSON(JSONObject programme,
+ private Programme programmeFromJSON(JSONObject json,
boolean fetchDetails) throws Exception {
- String id = programme.getString("db_id");
+ String id = json.getString("id");
Programme result = cache.get(getId(), id);
boolean cached = (result != null);
if (result == null) {
stats.cacheMisses++;
result = new Programme();
+ result.startTime = new Date(json.getLong("startTime"));
+ result.endTime = new Date(json.getLong("endTime"));
+ JSONObject prog = json.getJSONObject("program");
+ result.addTitle(prog.getString("title"));
+ /*
// Do this here, because we can only add to these fields. Pity if
// they're updated
result.addTitle(programme.getString("titel"));
}
// TODO add icon from HTML detail page
}
+ */
} else {
// System.out.println("From cache: " +
// programme.getString("titel"));
stats.cacheHits++;
}
- logger.trace(" titel:" + programme.getString("titel"));
- logger.trace("datum_start:" + programme.getString("datum_start"));
- logger.trace(" datum_end:" + programme.getString("datum_end"));
- logger.trace(" genre:" + programme.getString("genre"));
- SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss",
- new Locale("nl"));
- result.startTime = df.parse(programme.getString("datum_start"));
- result.endTime = df.parse(programme.getString("datum_end"));
// TODO other fields
if (!cached) {
writer.writeCharacters("\n");
writer.writeStartElement("tv");
// List<Channel> my_channels = channels;
- List<Channel> my_channels = channels.subList(0, 15);
+ List<Channel> my_channels = channels.subList(0, 5);
for (Channel c : my_channels) {
c.serialize(writer);
}