]> www.vanbest.org Git - tv_grab_nl_java/commitdiff
Horizon fetcher does something, but incorrect and imcomplete
authorJan-Pascal van Best <janpascal@vanbest.org>
Mon, 4 Mar 2013 12:22:06 +0000 (13:22 +0100)
committerJan-Pascal van Best <janpascal@vanbest.org>
Mon, 4 Mar 2013 12:22:06 +0000 (13:22 +0100)
src/main/java/org/vanbest/xmltv/Horizon.java

index a5132285bbfda1eab24eeaeb5a60f8f56446c0ad..70f714f8b6303f3305a50449bec440e41e2fb8c3 100644 (file)
@@ -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<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);
                        }