def _extract_grid(doc): rtree = select_all(doc, 'li.grid__item') results = PlayItemList() for l in rtree: a = select_one(l, 'a') url = get_attr(a, 'href') if url is None: continue if url.startswith('/iplayer'): url = "http://www.bbc.co.uk" + url idiv = select_one(l, 'div.rs-image') idiv = select_one(idiv, 'img') img = get_attr(idiv, 'srcset').split()[0] sdiv = select_one(l, 'div.content-item__info__text') avail = select_one(sdiv, 'div.content-item__labels') if get_text_content(avail) == "Not available": continue title = get_text_content(select_one(sdiv, 'div.content-item__title')) subtitle = get_text_content( select_one(sdiv, 'div.content-item__description')) if title.endswith("..."): title = title[:-3] if subtitle.endswith("..."): subtitle = subtitle[:-3] item = PlayItem(title, img, url, subtitle) a = select_one(l, 'a.js-view-all-episodes') if a is not None: link = "http://bbc.co.uk" + a.get('href') item.add_action(MoreEpisodesAction(link, title)) results.add(item) return results
def search(q): q = q.replace(' ', '-') q = q.replace("'", '') doc = get_doc(_SEARCH_URL + q) rtree = select_all(doc, 'div.search-wrapper') results = PlayItemList() for l in rtree: el = select_one(l, 'div.remaining-time') if el is not None and get_text(el).strip() == 'unavailable': continue el = select_one(l, 'h4 a') url = get_attr(el, 'href') title = get_text(el) el = select_one(l, "div.search-result-image a img") img = get_attr(el, 'src') el = select_one(l, ".search-episode-count") matched = int(get_attr(el, 'data-matched_episodes')) episodes = get_text(el) episodes = int(episodes[0:episodes.find(' ')]) action = None if episodes > matched: action = MoreEpisodesAction(url, title) eps = select_all(l, ".episode") for e in eps: el = select_one(e, ".episode-title a") url = _PREFIX + get_attr(el, 'href') subtitle = get_text(el) el = select_one(e, ".description") synopsis = get_text_content(el) item = PlayItem(title, img, url, subtitle, synopsis) results.add(item) if action: item.add_action(action) break return results
def search(q): q = q.replace(' ', '-') q = q.replace("'", '') doc = get_doc(_SEARCH_URL + q) rtree = select_all(doc, 'div.search-wrapper') results = PlayItemList() for l in rtree: el = select_one(l, 'h4 a') url = get_attr(el, 'href') title = get_text(el) el = select_one(l, "div.search-result-image a img") img = get_attr(el, 'src') el = select_one(l, ".search-episode-count") matched = int(get_attr(el, 'data-matched_episodes')) episodes = get_text(el) episodes = int(episodes[0:episodes.find(' ')]) action = None if episodes > matched: action = MoreEpisodesAction(url, title) eps = select_all(l, ".episode") for e in eps: el = select_one(e, ".episode-title a") url = _PREFIX + get_attr(el, 'href') subtitle = get_text(el) el = select_one(e, ".description") synopsis = get_text_content(el) item = PlayItem(title, img, url, subtitle, synopsis) results.add(item) if action: item.add_action(action) break return results
def feed(idx): url = _FEEDLIST[idx]['url'] doc = get_doc(url) rtree = select_all(doc, "a.complex-link") results = PlayItemList() for l in rtree: url = get_attr(l, 'href') el = select_one(l, '.tout__title') if el is None: continue title = get_text(el) el = select_one(l, 'img.fluid-media__media') img = get_attr(el, 'src') el = select_one(l, 'p.tout__meta') subtitle = get_text_content(el) if subtitle == 'No episodes available': continue item = PlayItem(title, img, url, subtitle) if subtitle != '1 episode': item.add_action(MoreEpisodesAction(url, title)) results.add(item) if idx == 0: global _SHOWLIST _SHOWLIST = results return results
def showmore(link): doc = get_doc(link) rtree = select_all(doc, 'div.views-row') results = PlayItemList() for l in rtree: el = select_one(l, 'a') url = _PREFIX + get_attr(el, 'href') el = select_one(el, 'img') img = get_attr(el, 'src') el = select_one(l, 'span.date-display-single') subtitle = get_text(el) el = select_one(l, 'div.field-season-number') title1 = get_text_content(el) el = select_one(l, 'div.field-episode-number') title = title1 + " " + get_text_content(el) el = select_one(l, 'div.field-name-field-short-synopsis') synopsis = get_text_content(el) item = PlayItem(title, img, url, subtitle, synopsis) results.add(item) return results
def _extract_list(doc): rtree = select_all(doc, 'tr') results = [] for l in rtree: el = select_one(l, 'a.torrents_table__torrent_title > b') # tr is not a result if el is None: continue title = get_text(el) el = select_one(l, 'a[title="Torrent magnet link"]') # DMCA takedown if el is None: continue url = get_attr(el, 'href') img = '/img/icons/film.svg' el = select_one( l, 'span.torrents_table__upload_info > a.text--muted > strong') cat = get_text(el) if not (cat in _CAT_WHITELIST): continue if cat.endswith('Music'): img = '/img/icons/music.svg' subs = None if cat == 'Movies': subs = movie_title_year(title) elif cat == 'TV': subs = series_season_episode(title) el = select_one(l, 'td[data-title="Size"]') size = get_text_content(el) el = select_one(l, 'td[data-title="Seed"]') seeds = get_text(el) el = select_one(l, 'td[data-title="Leech"]') peers = get_text(el) result = {} result['title'] = title result['url'] = url result['img'] = img result['subs'] = subs result['size'] = size result['seeds'] = seeds result['peers'] = peers results.append(result) return results
def feed(idx): url = _FEEDLIST[idx]['url'] doc = get_doc(url) livetree = select_all(doc, "div.genie-container") results = PlayItemList() for l in livetree: img = get_attr(l, "data-video-posterframe") title = get_attr(l, "data-video-channel-id") item = PlayItem(title.upper(), img, url, 'Watch LIVE TV') results.add(item) rtree = select_all(doc, "a.complex-link") for l in rtree: url = get_attr(l, 'href') el = select_one(l, '.tout__title') if el is None: el = select_one(l, '.slice__title') if el is None: continue title = get_text(el) el = select_one(l, 'img.fluid-media__media') img = get_attr(el, 'src') el = select_one(l, 'p.tout__summary') if el is None: el = select_one(l, 'p.tout__meta') if el is None: el = select_one(l, 'p.slice__meta') subtitle = get_text_content(el) if subtitle == 'No episodes available': continue item = PlayItem(title, img, url, subtitle) if subtitle != '1 episode': item.add_action(MoreEpisodesAction(url, title)) results.add(item) return results
def _extract_grid(idx, doc): rtree = select_all(doc, 'li.grid__item') results = PlayItemList() count = 0 for l in rtree: a = select_one(l, 'a') url = get_attr(a, 'href') if url is None: continue if url.startswith('/iplayer'): url = "http://www.bbc.co.uk" + url idiv = select_one(l, 'div.rs-image') idiv = select_one(idiv, 'source') img = get_attr(idiv, 'srcset').split()[0] sdiv = select_one(l, 'div.content-item__info__text') avail = select_one(sdiv, 'div.content-item__labels') if get_text_content(avail) == "Not available": continue title = get_text_content(select_one(sdiv, 'div.content-item__title')) subtitle = get_text_content( select_one(sdiv, 'div.content-item__description')) if title.endswith("..."): title = title[:-3] if subtitle.endswith("..."): subtitle = subtitle[:-3] item = PlayItem(title, img, url, subtitle) a = select_one(l, 'a.js-view-all-episodes') if a is not None: link = "http://bbc.co.uk" + a.get('href') item.add_action(MoreEpisodesAction(link, title)) if count == 0: seriestree = select_all(doc, 'li.scrollable-nav__item') for st in seriestree: a = select_one(st, 'a') url = get_attr(a, 'href') if url is None: continue if url.startswith('/iplayer'): url = "http://www.bbc.co.uk" + url sdiv = select_one(st, 'span.button__text') title = get_text_content(sdiv) if title is None: continue item.add_action(MoreEpisodesAction(url, title)) count = count + 1 results.add(item) if idx is not None: if idx == 1: item1 = PlayItem( "BBC One", "https://static.bbci.co.uk/tviplayer/img/navigation/bbcone.svg", "https://a.files.bbci.co.uk/media/live/manifesto/audio_video/simulcast/hls/uk/hls_mobile_wifi_rw/aks/bbc_one_london.m3u8", "BBC One Live", "Watch Live TV") results.add(item1) elif idx == 2: item2 = PlayItem( "BBC Two", "https://static.bbci.co.uk/tviplayer/img/navigation/bbctwo.svg", "https://a.files.bbci.co.uk/media/live/manifesto/audio_video/simulcast/hls/uk/hls_mobile_wifi_rw/llnws/bbc_two_england.m3u8", "BBC Two Live", "Watch Live TV") results.add(item2) elif idx == 4: #item3 = PlayItem("BBC Three", "https://static.bbci.co.uk/tviplayer/img/navigation/bbcfour.svg", "https://a.files.bbci.co.uk/media/live/manifesto/audio_video/simulcast/hls/uk/hls_mobile_wifi_rw/llnws/bbc_four.m3u8", "BBC Four Live", "Watch Live TV") #results.add(item3) item4 = PlayItem( "BBC Four", "https://static.bbci.co.uk/tviplayer/img/navigation/bbcfour.svg", "https://a.files.bbci.co.uk/media/live/manifesto/audio_video/simulcast/hls/uk/hls_mobile_wifi_rw/llnws/bbc_four.m3u8", "BBC Four Live", "Watch Live TV") results.add(item4) elif idx == 17: item5 = PlayItem( "BBC News", "https://static.bbci.co.uk/tviplayer/img/navigation/bbcnews.svg", "https://a.files.bbci.co.uk/media/live/manifesto/audio_video/simulcast/hls/uk/hls_mobile_wifi_rw/aks/bbc_news24.m3u8", "BBC News Live", "Watch Live TV") results.add(item5) return results