]> code.delx.au - webdl/blobdiff - ten.py
Failsafe in case channel 10 returns bad results again
[webdl] / ten.py
diff --git a/ten.py b/ten.py
index 557b6733afa8eee3176c6a42d0122002a0e8825d..59d673cbf95c0f09d9b1cefaa751cff05b422a67 100644 (file)
--- a/ten.py
+++ b/ten.py
@@ -1,6 +1,7 @@
+import logging
 from common import grab_json, download_hls, Node, append_to_qs
 
-SERIES_LIST_URL = "https://vod.ten.com.au/config/android-v2"
+SERIES_LIST_URL = "https://vod.ten.com.au/config/android-v4"
 SERIES_DETAIL_URL = "https://v.tenplay.com.au/api/videos/bcquery"
 
 class TenVideoNode(Node):
@@ -14,25 +15,17 @@ class TenVideoNode(Node):
         return download_hls(filename, self.video_url)
 
 class TenSeriesNode(Node):
-    def __init__(self, title, parent, query, clean_name):
+    def __init__(self, title, parent, query, expected_tv_show):
         Node.__init__(self, title, parent)
         self.title = title
         self.query = query
-        self.clean_name = clean_name
+        self.expected_tv_show = expected_tv_show
         self.video_ids = set()
 
     def fill_children(self):
-        self.fill_children_with_query(self.query)
-
-        if "&none" not in self.query:
-            # Some videos are not categorised correctly, so try looking up by the cleanname as well.
-            # Only do this if they haven't tried to filter out similarly named shows.
-            self.fill_children_with_query("&all=tv_show_group:" + self.clean_name)
-
-    def fill_children_with_query(self, query):
         page_number = 0
         while page_number < 100:
-            url = self.get_page_url(query, page_number)
+            url = self.get_page_url(self.query, page_number)
             page_number += 1
 
             page = grab_json(url)
@@ -46,7 +39,6 @@ class TenSeriesNode(Node):
     def get_page_url(self, query, page_number):
         return append_to_qs(SERIES_DETAIL_URL, {
             "command": "search_videos",
-            "all": "video_type_long_form:Full+Episode",
             "page_size": "30",
             "page_number": str(page_number),
         }) + query
@@ -54,10 +46,14 @@ class TenSeriesNode(Node):
     def process_video(self, video_desc):
         video_id = video_desc["id"]
         video_url = video_desc["HLSURL"]
+        tv_show = video_desc["customFields"]["tv_show"]
         title = video_desc["name"]
 
         if video_id in self.video_ids:
             return
+        if tv_show != self.expected_tv_show:
+            logging.warn("Skipping unexpected video: %s != %s", tv_show, self.expected_tv_show)
+            return
         self.video_ids.add(video_id)
 
         TenVideoNode(title, self, video_url)
@@ -68,10 +64,10 @@ class TenRootNode(Node):
 
         for series in doc["Browse TV"]["Shows"]:
             title = series["title"]
-            query = series["query"]
-            clean_name = series["cleanname"]
+            query = series["query"] + series["episodefilter"]
+            expected_tv_show = series["tv_show"]
 
-            TenSeriesNode(title, self, query, clean_name)
+            TenSeriesNode(title, self, query, expected_tv_show)
 
 def fill_nodes(root_node):
     TenRootNode("Ten", root_node)