]>
code.delx.au - webdl/blob - ten.py
2 from common
import grab_json
, download_hls
, Node
, append_to_qs
4 SERIES_LIST_URL
= "https://vod.ten.com.au/config/android-v4"
5 SERIES_DETAIL_URL
= "https://v.tenplay.com.au/api/videos/bcquery"
7 class TenVideoNode(Node
):
8 def __init__(self
, title
, parent
, video_url
):
9 Node
.__init
__(self
, title
, parent
)
10 self
.can_download
= True
11 self
.video_url
= video_url
14 filename
= self
.title
+ ".ts"
15 return download_hls(filename
, self
.video_url
)
17 class TenSeriesNode(Node
):
18 def __init__(self
, title
, parent
, query
, expected_tv_show
):
19 Node
.__init
__(self
, title
, parent
)
22 self
.expected_tv_show
= expected_tv_show
23 self
.video_ids
= set()
25 def fill_children(self
):
27 while page_number
< 100:
28 url
= self
.get_page_url(self
.query
, page_number
)
36 for video_desc
in items
:
37 self
.process_video(video_desc
)
39 def get_page_url(self
, query
, page_number
):
40 return append_to_qs(SERIES_DETAIL_URL
, {
41 "command": "search_videos",
43 "page_number": str(page_number
),
46 def process_video(self
, video_desc
):
47 video_id
= video_desc
["id"]
48 video_url
= video_desc
["HLSURL"]
49 tv_show
= video_desc
["customFields"]["tv_show"]
50 title
= video_desc
["name"]
52 if video_id
in self
.video_ids
:
54 if tv_show
!= self
.expected_tv_show
:
55 logging
.warn("Skipping unexpected video: %s != %s", tv_show
, self
.expected_tv_show
)
57 self
.video_ids
.add(video_id
)
59 TenVideoNode(title
, self
, video_url
)
61 class TenRootNode(Node
):
62 def fill_children(self
):
63 doc
= grab_json(SERIES_LIST_URL
)
65 for series
in doc
["Browse TV"]["Shows"]:
66 title
= series
["title"]
67 query
= series
["query"] + series
["episodefilter"]
68 expected_tv_show
= series
["tv_show"]
70 TenSeriesNode(title
, self
, query
, expected_tv_show
)
72 def fill_nodes(root_node
):
73 TenRootNode("Ten", root_node
)