Skip to content

Commit 72e02da

Browse files
committed
Add filters to list - like Seasons and Availability
1 parent f6fdf61 commit 72e02da

5 files changed

Lines changed: 47 additions & 3 deletions

File tree

addon.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
2-
<addon id="plugin.video.primaplay" name="Prima Play" version="0.1.1" provider-name="Ladislav Dokulil">
2+
<addon id="plugin.video.primaplay" name="Prima Play" version="0.1.2" provider-name="Ladislav Dokulil">
33
<requires>
44
<import addon="xbmc.python" version="2.1.0"/>
55
</requires>

changelog.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,6 @@
1+
2016-06-01 [0.1.2]
2+
* Add filter lists for Seasons and others
3+
14
2016-06-01 [0.1.1]
25
* Don't use BeautifulSoap - replaced by regexps
36

default.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,9 @@ def _toString(text):
4747
def main_menu(pageurl):
4848
page = _play_parser.get_page(pageurl)
4949
if page.player: add_player(page.player)
50+
for filter_list in page.filter_lists:
51+
add_title(filter_list)
52+
add_item_list(filter_list.item_list)
5053
for video_list in page.video_lists:
5154
if video_list.title: add_title(video_list)
5255
add_item_list(video_list.item_list)

libPrimaPlay/PrimaPlay.py

Lines changed: 32 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ def get_page(self, link):
7171
content = self.ua.get(link)
7272
return Page(
7373
self.get_page_player(content),
74-
self.get_video_lists(content, link)
74+
self.get_video_lists(content, link),
75+
self.get_filter_lists(content, link)
7576
)
7677

7778
def get_page_player(self, content):
@@ -144,6 +145,34 @@ def get_items_from_wrapper(self, content, src_link):
144145
list.append(Item(title.decode('utf-8'), link, image_url))
145146
return list
146147

148+
def get_filter_lists(self, content, src_link):
149+
list = []
150+
before_wrapper_re = re.compile('(.*)<div class="loading-wrapper">', re.S)
151+
before_content = before_wrapper_re.search(content).group(1)
152+
153+
filter_wrappers = re.split('<li class="hamburger-parent[^"]*">', before_content)
154+
155+
title_re = re.compile('<span data-jnp="[^"]+" class="hamburger-toggler">([^<]+)</span>')
156+
for filter_wrapper in filter_wrappers:
157+
title_result = title_re.search(filter_wrapper)
158+
if title_result is None: continue
159+
title = title_result.group(1)
160+
items = self.get_filter_items(filter_wrapper, src_link)
161+
if (len(items) <= 0): continue
162+
list.append(PageVideoList(title.decode('utf-8'), None, None, items))
163+
return list
164+
165+
def get_filter_items(self, content, src_link):
166+
list = []
167+
168+
filter_item_re = re.compile('<li>[^<]*<a class="tdi" href="([^"]+)"[^>]*>([^<]+)</a>[^<]*</li>', re.S)
169+
for raw_link, raw_title in filter_item_re.findall(content):
170+
link = self.make_full_link(raw_link, src_link)
171+
title = self.strip_tags(raw_title)
172+
list.append(Item(title.decode('utf-8'), link))
173+
174+
return list
175+
147176
def make_full_link(self, target_link, src_link):
148177
if target_link is None:
149178
return None
@@ -169,8 +198,9 @@ def strip_tags(self, string):
169198
return result.strip()
170199

171200
class Page:
172-
def __init__(self, player = None, video_lists = []):
201+
def __init__(self, player = None, video_lists = [], filter_lists = []):
173202
self.video_lists = video_lists
203+
self.filter_lists = filter_lists
174204
self.player = player
175205

176206
class PageVideoList:

libPrimaPlay/PrimaPlay_unittest.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,5 +101,13 @@ def test_get_page__episodes(self):
101101
self.assertEqual(page.video_lists[0].item_list[0].link,
102102
'http://play.iprima.cz/prostreno-ix-10')
103103

104+
self.assertEqual(len(page.filter_lists), 3)
105+
self.assertEqual(page.filter_lists[0].title, u'Řada')
106+
107+
self.assertEqual(len(page.filter_lists[0].item_list), 11)
108+
self.assertEqual(page.filter_lists[0].item_list[0].title, u'Sezóna 1')
109+
self.assertEqual(page.filter_lists[0].item_list[0].link,
110+
'http://play.iprima.cz/prostreno?season=p14883&sort[]=Rord&sort[]=latest')
111+
104112
if __name__ == '__main__':
105113
unittest.main()

0 commit comments

Comments
 (0)