From: Jan-Pascal van Best Date: Mon, 4 Mar 2013 12:22:06 +0000 (+0100) Subject: Horizon fetcher does something, but incorrect and imcomplete X-Git-Tag: 1.2.0~2 X-Git-Url: http://www.vanbest.org/gitweb/?a=commitdiff_plain;h=cd9b2cafc0c084140475c039290856b35348b3e1;p=tv_grab_nl_java Horizon fetcher does something, but incorrect and imcomplete --- diff --git a/src/main/java/org/vanbest/xmltv/Horizon.java b/src/main/java/org/vanbest/xmltv/Horizon.java index a513228..70f714f 100644 --- a/src/main/java/org/vanbest/xmltv/Horizon.java +++ b/src/main/java/org/vanbest/xmltv/Horizon.java @@ -49,7 +49,6 @@ public class Horizon extends AbstractEPGSource implements EPGSource { 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"; @@ -69,18 +68,19 @@ public class Horizon extends AbstractEPGSource implements EPGSource { 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()); } @@ -107,7 +107,7 @@ public class Horizon extends AbstractEPGSource implements EPGSource { 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"); @@ -116,11 +116,16 @@ public class Horizon extends AbstractEPGSource implements EPGSource { // 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); @@ -129,12 +134,6 @@ public class Horizon extends AbstractEPGSource implements EPGSource { return result; } - private JSONObject fetchJSON(URL url) throws Exception { - String json = fetchURL(url); - logger.debug(json); - return JSONObject.fromObject(json); - } - /* * (non-Javadoc) * @@ -149,34 +148,18 @@ public class Horizon extends AbstractEPGSource implements EPGSource { 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); } } @@ -184,31 +167,53 @@ public class Horizon extends AbstractEPGSource implements EPGSource { } /* - * {"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")); @@ -228,19 +233,12 @@ public class Horizon extends AbstractEPGSource implements EPGSource { } // 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) { @@ -267,7 +265,7 @@ public class Horizon extends AbstractEPGSource implements EPGSource { writer.writeCharacters("\n"); writer.writeStartElement("tv"); // List my_channels = channels; - List my_channels = channels.subList(0, 15); + List my_channels = channels.subList(0, 5); for (Channel c : my_channels) { c.serialize(writer); }