+ IviewNode(episode_title, self, self.params, vpath)
+
+class IviewRootNode(Node):
+ def __init__(self, parent):
+ Node.__init__(self, "ABC iView", parent)
+ self.sort_children = True
+
+ def fill_children(self):
+ config_doc = grab_xml(CONFIG_URL, 24*3600)
+ params = dict((p.attrib["name"], p.attrib["value"]) for p in config_doc.xpath("/config/param"))
+
+ categories_doc = grab_xml(BASE_URL + params["categories"], 24*3600)
+ categories_map = {}
+ for category in categories_doc.xpath("//category[@genre='true']"):
+ cid = category.attrib["id"]
+ category_name = category.xpath("name/text()")[0]
+ category_node = Node(category_name, self)
+ category_node.sort_children = True
+ categories_map[cid] = category_node
+
+ # Create a duplicate of each series within each category that it appears
+ series_list_doc = grab_json(params["api"] + "seriesIndex", 3600)
+ for series in series_list_doc:
+ categories = series["e"].split()
+ sid = series["a"]
+
+ series_title = series["b"].replace("&", "&")
+ for cid in categories:
+ category_node = categories_map.get(cid, None)
+ if category_node:
+ IviewSeriesNode(series_title, category_node, params, sid)