Skip to content

Commit f6dfbf5

Browse files
committed
Fixed: Vier/Play.tv channel (Fixes #1921).
1 parent dd7f81b commit f6dfbf5

File tree

4 files changed

+36
-44
lines changed

4 files changed

+36
-44
lines changed

changelog.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,5 @@ _None_
1010

1111
[B]Channel related[/B]
1212
* Fixed: TV4 Recents.
13-
* Fixed: NPO TV programmes (See #1931).
13+
* Fixed: NPO TV programmes (See #1931).
14+
* Fixed: Vier/Play.tv channel (Fixes #1921).

channels/channel.be/vier/chn_vier.py

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,9 @@ def __call__(self, data: str) -> Tuple[Union[JsonHelper, str], List[MediaItem]]:
4040
elif self._key:
4141
result_data = JsonHelper.find_dict_by_key_from(result_data, self._key)
4242

43-
if result_data:
43+
if result_data and isinstance(result_data, str):
44+
return result_data, []
45+
elif result_data:
4446
return JsonHelper(result_data), []
4547

4648
Logger.warning("Could not find NextJs data for key: %s, value: %s", self._key, self._value)
@@ -49,6 +51,7 @@ def __call__(self, data: str) -> Tuple[Union[JsonHelper, str], List[MediaItem]]:
4951
def __str__(self):
5052
return f"NextJsParser(key={self._key}, value={self._value})"
5153

54+
5255
class Channel(chn_class.Channel):
5356
"""
5457
main class from resources.lib.which all channels inherit
@@ -89,6 +92,10 @@ def __init__(self, channel_info):
8992
parser=[-1], creator=self.create_season_item,
9093
postprocessor=self.show_single_season)
9194

95+
self._add_data_parser("https://www.play.tv/tv-gids/", json=True, name="TV Guide parser",
96+
preprocessor=NextJsParser(key="className", value="bg-gray-background w-full pt-8"),
97+
parser=["children"], creator=self.create_epg_item)
98+
9299
# self._add_data_parser("https://www.play.tv/", json=True, name="Main show parser without children",
93100
# preprocessor=NextJsParser(r"[A-F0-9]+:(\[[^\n\r]+playlists[^\n\r]+)"),
94101
# parser=[-1, "playlists", -1], creator=self.create_season_item,
@@ -375,7 +382,7 @@ def create_epg_item(self, result_set: dict) -> MediaItemResult:
375382
if isinstance(result_set, str):
376383
return None
377384

378-
data = result_set["program"]
385+
data = result_set[-1]["program"]
379386
if not data["video"]:
380387
return None
381388

@@ -508,10 +515,10 @@ def update_video_item(self, item: MediaItem) -> MediaItem:
508515

509516
def update_video_item_from_nextjs(self, item: MediaItem) -> MediaItem:
510517
data = UriHandler.open(item.url, additional_headers=self.httpHeaders)
511-
json_data = Regexer.do_regex(r"({\"video\":{[^\n\r]+})]]}", data)[0]
512-
nextjs_json = JsonHelper(json_data)
513-
video_id = nextjs_json.get_value("videoId")
514-
item.metaData["whatsonId"] = nextjs_json.get_value("video", "tracking", "whatsonId")
518+
video_id, _ = NextJsParser("videoId")(data)
519+
whats_on_id, _ = NextJsParser("whatsonId")(data)
520+
521+
item.metaData["whatsonId"] = whats_on_id
515522
item.url = f"https://api.play.tv/web/v1/videos/long-form/{video_id}"
516523
return self.update_video_item_with_id(item)
517524

resources/lib/helpers/jsonhelper.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,8 @@ def get_value(self, *args, **kwargs):
127127
def find_dict_by_key_value(self, key: str, value: Any) -> Optional[Dict]:
128128
return JsonHelper.find_dict_by_key_value_from(self.json, key, value)
129129

130-
def find_dict_by_key(self, key: str, value: Any) -> Optional[Dict]:
131-
return JsonHelper.find_dict_by_key_from(self.json, key, value)
130+
def find_dict_by_key(self, key: str) -> Optional[Dict]:
131+
return JsonHelper.find_dict_by_key_from(self.json, key)
132132

133133
@staticmethod
134134
def find_dict_by_key_value_from(data: Union[List, Dict], key: str, value: Any) -> Optional[Dict]:

tests/channel_tests/test_chn_vier.py

Lines changed: 19 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
import os
44
import unittest
55

6+
from resources.lib.addonsettings import AddonSettings
67
from . channeltest import ChannelTest
78

89

9-
@unittest.skipIf("CI" in os.environ, "Skipping in CI due to broken api")
1010
class TestVierBeChannel(ChannelTest):
1111
# noinspection PyPep8Naming
1212
def __init__(self, methodName): # NOSONAR
13-
super(TestVierBeChannel, self).__init__(methodName, "channel.be.vier", None)
13+
super(TestVierBeChannel, self).__init__(methodName, "channel.be.vier", "playtv")
1414

1515
def test_channel_exists(self):
1616
self.assertIsNotNone(self.channel)
@@ -19,41 +19,25 @@ def test_main_list_vier(self):
1919
items = self.channel.process_folder_list(None)
2020
self.assertGreaterEqual(len(items), 20, "No items found in mainlist")
2121

22-
def test_tv4_tv_shows(self):
23-
url = "https://www.goplay.be/programmas/"
24-
items = self._test_folder_url(url, 20)
25-
# Should be significantly less than the total list of about 500.
26-
self.assertLess(len(items), 150)
22+
def test_go_play_tv_show(self):
23+
url = "https://www.play.tv/vik-gert"
24+
self._test_folder_url(url, 5)
2725

28-
def test_go_play_tv_shows(self):
29-
self._switch_channel("goplay")
30-
url = "https://www.goplay.be/programmas/"
31-
self._test_folder_url(url, 200)
26+
def test_recent_day_list(self):
27+
yesterday = datetime.datetime.now() - datetime.timedelta(days=1)
28+
url = f"https://www.play.tv/tv-gids/play/{yesterday.year}-{yesterday.month:02d}-{yesterday.day:02d}"
29+
self._test_folder_url(url, 5)
3230

33-
def test_search(self):
34-
media_items = self.channel.search_site(needle="cops")
35-
self.assertGreater(len(media_items), 5)
36-
37-
def test_show_seasons_listing(self):
38-
url = "https://www.goplay.be/komen-eten-celebs"
39-
self._test_folder_url(url, 1)
40-
41-
def test_season_listing(self):
42-
url = "https://www.goplay.be/bake-off-vlaanderen-kerst"
43-
self._test_folder_url(url, 1)
44-
45-
@unittest.skip("Requires a log in.")
46-
def test_resolve_via_url(self):
47-
url = "https://www.goplay.be/video/hetisingewikkeld/hetisingewikkeld-seizoen-1/hetisingewikkeld-s1-aflevering-8"
31+
@unittest.skipIf("PLAY_TV_TOKEN" not in os.environ, "Not testing updating without credentials")
32+
def test_go_play_video_in_main_list(self):
33+
token = os.environ["PLAY_TV_TOKEN"]
34+
AddonSettings.set_setting("viervijfzes_refresh_token", token)
35+
url = "https://www.play.tv/video/killer-in-law"
4836
self._test_video_url(url)
4937

50-
@unittest.skip("Requires a log in.")
51-
def test_resolve_via_url_2(self):
52-
url = "https://www.goplay.be/video/junior-bake-off-vlaanderen/junior-bake-off-vlaanderen-s5/junior-bake-off-vlaanderen-s5-aflevering-6"
38+
@unittest.skipIf("PLAY_TV_TOKEN" not in os.environ, "Not testing updating without credentials")
39+
def test_video_url(self):
40+
token = os.environ["PLAY_TV_TOKEN"]
41+
AddonSettings.set_setting("viervijfzes_refresh_token", token)
42+
url = "https://www.play.tv/video/vik-gert/vik-gert-s1/vik-gert-s1-aflevering-12"
5343
self._test_video_url(url)
54-
55-
def test_epg_listing(self):
56-
day = datetime.datetime.now() - datetime.timedelta(days=2)
57-
url = "https://www.goplay.be/tv-gids/vier/{:04d}-{:02d}-{:02d}".format(
58-
day.year, day.month, day.day)
59-
self._test_folder_url(url, 2)

0 commit comments

Comments
 (0)