]> code.delx.au - webdl/blobdiff - iview.py
Send user-agent when downloading HLS videos (fixes #106)
[webdl] / iview.py
index 55101d1f4950b5607aed928b74fd8435094a5eb8..50395cfc2bb0c18dc997dd8b10381cd2e7a1d347 100644 (file)
--- a/iview.py
+++ b/iview.py
@@ -2,8 +2,8 @@ from common import grab_json, grab_xml, Node, download_hls
 import requests_cache
 import urllib.parse
 
-API_URL = "http://iview.abc.net.au/api"
-AUTH_URL = "http://iview.abc.net.au/auth"
+API_URL = "https://iview.abc.net.au/api"
+AUTH_URL = "https://iview.abc.net.au/auth"
 
 def format_episode_title(series, ep):
     if ep:
@@ -53,6 +53,8 @@ class IviewEpisodeNode(Node):
 
     def download(self):
         info = grab_json(API_URL + "/programs/" + self.video_key)
+        if "playlist" not in info:
+            return False
         video_url = self.find_hls_url(info["playlist"])
         token, token_hostname= self.get_auth_details()
         video_url = self.add_auth_token_to_url(video_url, token, token_hostname)
@@ -67,9 +69,10 @@ class IviewIndexNode(Node):
     def fill_children(self):
         info = grab_json(self.url)
         for key in ["carousels", "collections", "index"]:
-            for collection_list in info[key]:
-                for ep_info in collection_list["episodes"]:
-                    self.add_series(ep_info)
+            for collection_list in info.get(key, None):
+                if isinstance(collection_list, dict):
+                    for ep_info in collection_list.get("episodes", []):
+                        self.add_series(ep_info)
 
     def add_series(self, ep_info):
         title = ep_info["seriesTitle"]
@@ -89,7 +92,7 @@ class IviewSeriesNode(Node):
         series_slug = ep_info["href"].split("/")[1]
         series_url = API_URL + "/series/" + series_slug + "/" + ep_info["seriesHouseNumber"]
         info = grab_json(series_url)
-        for ep_info in info["episodes"]:
+        for ep_info in info.get("episodes", []):
             add_episode(self, ep_info)
 
 class IviewFlatNode(Node):
@@ -117,6 +120,7 @@ class IviewRootNode(Node):
         category("Lifestyle", "lifestyle")
         category("News & Current Affairs", "news")
         category("Panel & Discussion", "panel")
+        category("Regional Australia", "regional")
         category("Sport", "sport")
 
     def load_channels(self):