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 _extract_popular(doc): rtree = select_all(doc, 'li.most-popular__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, 'source') img = get_attr(idiv, 'srcset') img = img.split()[0] idiv = select_one(l, 'div.content-item__info__text') title = get_text(select_one(idiv, 'div.content-item__title')) pdiv = select_one(idiv, 'div.content-item__info__primary') subtitle = get_text(select_one(pdiv, 'div.content-item__description')) pdiv = select_one(idiv, 'div.content-item__info__secondary') synopsis = get_text(select_one(pdiv, 'div.content-item__description')) item = PlayItem(title, img, url, subtitle, synopsis) results.add(item) return results
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 _extract(doc): rtree = select_all(doc, 'li.list-item') results = PlayItemList() for l in rtree: a = select_one(l, 'a') url = get_attr(a, 'href') if url is None or not url.startswith('/iplayer'): continue url = "http://www.bbc.co.uk" + url pdiv = select_one(l, 'div.primary') idiv = select_one(pdiv, 'div.r-image') img = get_attr(idiv, 'data-ip-src') sdiv = select_one(l, 'div.secondary') title = get_text(select_one(sdiv, 'div.title')) subtitle = get_text(select_one(sdiv, 'div.subtitle')) synopsis = get_text(select_one(sdiv, 'p.synopsis')) item = PlayItem(title, img, url, subtitle, synopsis) a = select_one(l, 'a.view-more-container') 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 _extract(doc): rtree = select_all(doc, 'li.browse-content-item-videos') results = PlayItemList() for l in rtree: el = select_one(l, 'a') href = get_attr(el, 'href') if href is None: continue url = _PREFIX + href el = select_one(l, 'img') img = get_attr(el, 'src') el = select_one(l, 'div.browse-content-top-line') subtitle = get_text(el) el = select_one(l, 'div.browse-content-second-line') title = get_text(el) results.add(PlayItem(title, img, url, subtitle)) return results results = PlayItemList() for l in rtree: el = select_one(l, 'a') url = get_attr(el, 'href') if not url.startswith('/talks/'): continue url = _PREFIX + url title = get_text(el) el = select_one(l, 'img') img = get_attr(el, 'src') el = select_one(l, 'div.search__result__description') synopsis = get_text(el) results.add(PlayItem(title, img, url, synopsis=synopsis)) 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 _extract(doc): rtree = select_all(doc, 'li.list-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 pdiv = select_one(l, 'div.primary') idiv = select_one(pdiv, 'div.r-image') if idiv is None: idiv = select_one(pdiv, 'div.rs-image') idiv = select_one(idiv, 'source') img = get_attr(idiv, 'srcset') else: img = get_attr(idiv, 'data-ip-src') sdiv = select_one(l, 'div.secondary') title = get_text(select_one(sdiv, 'div.title')) subtitle = get_text(select_one(sdiv, 'div.subtitle')) synopsis = get_text(select_one(sdiv, 'p.synopsis')) item = PlayItem(title, img, url, subtitle, synopsis) a = select_one(l, 'a.view-more-container') 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 _extract_search(search_json): results = PlayItemList() for track in search_json: kind = track['kind'] if kind != 'track': continue title = track['title'] user = track['user']['username'] if track['duration'] != track['full_duration']: continue duration_s = track['duration'] // 1000 duration = str(timedelta(seconds=duration_s)) plays = 'likes: ' + \ human_format(track['likes_count']) + ' plays: ' + \ human_format(track['playback_count']) subtitle = user + '<br/> duration: ' + duration + ' ' + plays if track['artwork_url'] and track['artwork_url'] != '': img = track['artwork_url'].replace('-large.', '-t300x300.') elif track['user']['avatar_url'] and track['user']['avatar_url'] != '': img = track['user']['avatar_url'].replace('-large.', '-t300x300.') else: img = '/img/icons/music.svg' url = track['permalink_url'] results.add(PlayItem(title, img, url, subtitle)) return results
def _extract(data): results = PlayItemList() if 'data' not in data: return results if 'movies' not in data['data']: return results rtree = data['data']['movies'] for r in rtree: if 'torrents' not in r: continue torrent = _smallest_size(r['torrents']) title = r['title_long'] img = r['medium_cover_image'] # Proxy img = "https://img.yts.mx" + img[14:] url = torrent['url'] size = torrent['size'] seeds = torrent['seeds'] peers = torrent['peers'] subtitle = chanutils.torrent.subtitle(size, seeds, peers) rating = str(r['rating']) if rating[-1] == '0': rating = rating[:-1] imdb = "<a target='_blank' href='http://www.imdb.com/title/" + r[ 'imdb_code'] + "/'>IMDB Rating: " + rating + "</a>" synopsis = imdb subs = movie_title_year(title) subs['imdb'] = r['imdb_code'] results.add(TorrentPlayItem(title, img, url, subtitle, synopsis, subs)) return results
def search(q): results = PlayItemList() items = _SHOWLIST.to_list() for i in items: title = i.title if q.lower() in title.lower(): results.add(i) return results
def _extract_html(doc): results = PlayItemList() result_list = _extract_list(doc) # sort by seeds (removing dots and commas) result_list.sort(key=lambda el: int(el['seeds'].translate(None, ".,")), reverse = True) for l in result_list: subtitle = _subtitle(l['size'], l['seeds'], l['released']) results.add(TorrentPlayItem(l['title'], l['img'], l['url'], subtitle, subs=l['subs'])) return results
def feed(idx): folder = _FEEDLIST[idx]['folder'] results = PlayItemList() files = os.listdir(folder) for f in files: title = os.path.splitext(f)[0] url = 'file://' + os.path.join(folder, f) results.add(PlayItem(title, '/img/icons/file-o.svg', url)) return results
def _extract_streams(stream_json): results = PlayItemList() for stream in stream_json: title = stream['channel']['display_name'] if 'display_name' in stream['channel'] else '' status = stream['channel']['status'] if 'status' in stream['channel'] else '' viewers = stream['viewers'] if 'viewers' in stream else '' subtitle = 'viewers: ' + str(viewers) + '<br>' + status img = stream['channel']['logo'] url = stream['channel']['url'] if 'url' in stream['channel'] else '' results.add(LiveStreamPlayItem(title, img, url, subtitle)) return results
def _extract(stream_json): results = PlayItemList() for stream in stream_json: title = stream['user_name'] if 'user_name' in stream else '' status = stream['title'] if 'title' in stream else '' viewers = stream['viewer_count'] if 'viewer_count' in stream else '' subtitle = 'viewers: ' + str(viewers) + '<br>' + status img = stream['thumbnail_url'].replace('{width}','165').replace('{height}','124') url = _BASE_URL + stream['user_name'] if 'user_name' in stream else '' results.add(LiveStreamPlayItem(title, img, url, subtitle)) return results
def _extract(text): start = text.find('var data = {') end = text.find('console.debug(data);', start) data = json.loads(text[start + 11:end - 14]) results = PlayItemList() for item in data['filtered']['data']: url = item['clip']['link'] title = item['clip']['name'] img = item['clip']['pictures']['sizes'][-1]['link'] results.add(PlayItem(title, img, url)) return results
def _extract(stream_json): results = PlayItemList() for stream in stream_json: title = stream['channel']['name'] if 'name' in stream['channel'] else '' status = stream['channel']['status'] if 'status' in stream['channel'] else '' viewers = stream['viewers'] if 'viewers' in stream else '' subtitle = 'viewers: ' + str(stream['viewers']) + '<br>' + status img = stream['channel']['logo'] url = stream['channel']['url'] if 'url' in stream['channel'] else '' results.add(LiveStreamPlayItem(title, img, url, subtitle)) return results
def search(q): shows = get_json(_ALL_SHOWS_URL) results = PlayItemList() for i in shows: if not 'episode' in i['url']: continue if q.lower() in i['title'].lower(): results.add( PlayItem(i['title'], i['image']['jelly'], i['url']['episode'], i['synopses'])) return results
def _extract(text): start = text.find('var data = {') end = text.find('console.debug(data);', start) data = json.loads(text[start+11:end-14]) results = PlayItemList() for item in data['filtered']['data']: url = item['clip']['link'] title = item['clip']['name'] img = item['clip']['pictures']['sizes'][-1]['link'] results.add(PlayItem(title, img, url)) return results
def _extract(data): results = PlayItemList() rtree = data['results'] for r in rtree: title = replace_entity(r['title']) img = r['thumbnailUrl'] if 'url' in r: url = r['url'] else: url = r['URL'] results.add(PlayItem(title, img, url)) return results
def _extract(doc): result_list = _extract_list(doc) results = PlayItemList() for l in result_list: subtitle = chanutils.torrent.subtitle(l['size'], l['seeds'], l['peers']) results.add( TorrentPlayItem(l['title'], l['img'], l['url'], subtitle, subs=l['subs'])) return results
def _extract_show(data): results = PlayItemList() img = data['images']['poster'] series = data['title'] rtree = data['episodes'] for r in rtree: title = r['title'] url = r['torrents']['0']['url'] subtitle = "Season: " + str(r['season']) + ", Episode: " + str(r['episode']) synopsis = r['overview'] subs = {'series':series, 'season':r['season'], 'episode':r['episode']} results.add(TorrentPlayItem(title, img, url, subtitle, synopsis, subs=subs)) return results
def _extract(doc): rtree = select_all(doc, '#browse_content li a') results = PlayItemList() for l in rtree: url = _PREFIX + l.get('href') title = get_attr(l, 'title') if title is None: break el = select_one(l, 'img') img = get_attr(el, 'src') el = select_one(l, 'time') subtitle = get_text(el) results.add(PlayItem(title, img, url, subtitle)) return results
def _extract(doc): results = PlayItemList() rtree = select_all(doc, 'div.col') for r in rtree: el = select_one(r, "h4") title = get_text(el) if not title: continue el = select_one(r, "img") img = get_attr(el, "src") el = select_one(r, "a.js-click-video") url = get_attr(el, "href") results.add(PlayItem(title, img, url)) return results
def _extract_showlist(doc): rtree = select_all(doc, 'tr[name="hover"]') img = None results = PlayItemList() for l in rtree: el = select_one(l, 'a.thread_link') title = get_text(el) url = get_attr(el, 'href') el = select_one(l, 'b') rating = get_text(el) subtitle = "Rating: " + rating item = ShowMoreItem(title, img, url, subtitle) results.add(item) return results
def _extract(doc): results = PlayItemList() rtree = select_all(doc, 'tr') first = True for l in rtree: if first: first = False continue el = select_one(l, "a[title='More from this category']") maincat = get_text(el) img = '/img/icons/film.svg' if maincat is not None: if maincat == 'Video': img = '/img/icons/film.svg' elif maincat == 'Audio': img = '/img/icons/music.svg' else: continue el = select_one(l, 'a.detLink') title = get_text(el) el = select_one(l, "a[title='Download this torrent using magnet']") url = get_attr(el, 'href') el = select_one(l, 'font.detDesc') desc = get_text(el) start = desc.find(', Size ') if start == -1: continue start = start + 7 end = desc.find(',', start) if end == -1: continue size = desc[start:end].replace("iB", "B") el = select_one(l, "td:nth-child(3)") seeds = get_text(el) el = select_one(l, "td:nth-child(4)") peers = get_text(el) subtitle = chanutils.torrent.subtitle(size, seeds, peers) subcat = "Movies" el = select_one(l, ":nth-child(3)") if el.text is not None: subcat = get_text(el) subs = None if subcat.endswith("Movies"): subs = movie_title_year(title) elif subcat.endswith("shows"): subs = series_season_episode(title) if not url: continue results.add(TorrentPlayItem(title, img, url, subtitle, subs=subs)) return results
def feed(idx): doc = get_doc(_FEEDLIST[idx]['url']) rtree = select_all(doc, 'div.thumbs li') results = PlayItemList() for l in rtree: el = select_one(l, 'a') url = get_attr(el, 'href') el = select_one(l, 'img') img = get_attr(el, 'src') el = select_one(l, 'h4.talk-link__speaker') subtitle = get_text(el) el = select_one(l, 'a span') title = get_text(el) results.add(PlayItem(title, img, url, subtitle)) return results
def feed(idx): url = _FEEDLIST[idx]['url'] count = 0 results = PlayItemList() shows = get_json(url) for ep_info in shows["entries"]: video_key = ep_info["id"] title = ep_info["title"] description = ep_info["description"] thumbnail = ep_info["plmedia$defaultThumbnailUrl"] video_url = VIDEO_URL % video_key.split("/")[-1] item = PlayItem(title, thumbnail, video_url, description) results.add(item) return results
def search(q): url = _SEARCH_URL + q + "&range=1-50" count = 0 results = PlayItemList() shows = get_json(url) for ep_info in shows["entries"]: video_key = ep_info["id"] title = ep_info["title"] description = ep_info["description"] thumbnail = ep_info["plmedia$defaultThumbnailUrl"] video_url = VIDEO_URL % video_key.split("/")[-1] item = PlayItem(title, thumbnail, video_url, description) results.add(item) return results
def feed(idx): doc = get_doc(_FEEDLIST[idx]['url']) rtree = select_all(doc, 'div.post-block') results = PlayItemList() for l in rtree: el = select_one(l, 'a') url = get_attr(el, 'href') el = select_one(l, 'img') img = get_attr(el, 'src') el = select_one(l, 'div.post-block__content') subtitle = get_text(el) el = select_one(l, 'a.post-block__title__link') title = get_text(el) results.add(PlayItem(title, img, url, subtitle)) return results
def _extract(rtree): results = PlayItemList() for i in rtree: img = i['posters']['primary'] title = i['title'] subtitle = "DVD Release Date: " + i['dvdReleaseDate'] tomatoScore = "Unknown" if 'tomatoScore' in i: tomatoScore = str(i['tomatoScore']) + "%" popcornScore = "Unknown" if 'popcornScore' in i: popcornScore = str(i['popcornScore']) + "%" synopsis = "Tomato Score: " + tomatoScore synopsis = synopsis + ", Popcorn Score: " + popcornScore results.add(SearchItem(title, img, subtitle, synopsis)) return results
def search(q): url = _SEARCH_URL + q count = 0 results = PlayItemList() shows = get_json(url) for ep_info in shows: video_key = ep_info["episodeHouseNumber"] series_title = ep_info["seriesTitle"] title = ep_info.get("title", None) episode_title = format_episode_title(series_title, title) thumbnail = ep_info["thumbnail"] video_url = API_URL + "/programs/" + video_key item = PlayItem(series_title, thumbnail, video_url, title, episode_title) results.add(item) return results
def _extract(data): results = PlayItemList() if not 'data' in data or data['data']['totalItems'] == 0: return results rtree = data['data']['items'] for r in rtree: title = r['title'] img = r['thumbnail']['sqDefault'] url = r['player']['default'] m, s = divmod(r['duration'], 60) h, m = divmod(m, 60) subtitle = 'Duration: ' + "%d:%02d:%02d" % (h, m, s) if 'viewCount' in r: subtitle = subtitle + ', Views: ' + "{:,}".format(r['viewCount']) results.add(PlayItem(title, img, url, subtitle)) return results
def showmore(link): doc = get_doc(link) rtree = select_all(doc, "a.complex-link") results = PlayItemList() for l in rtree: url = get_attr(l, 'href') el = select_one(l, 'img.fluid-media__media') img = get_attr(el, 'src') el = select_one(l, 'h3') title = get_text(el) el = select_one(l, 'time') subtitle = get_text(el) el = select_one(l, 'p.tout__summary') synopsis = get_text(el) item = PlayItem(title, img, url, subtitle, synopsis) results.add(item) return results
def _extract(data): results = PlayItemList() rtree = data['items'] for r in rtree: title= r['snippet']['title'] subtitle= r['snippet']['publishedAt'][:10] synopsis= r['snippet']['description'] if len(synopsis) > 200: synopsis = synopsis[:200] + "..." img = r['snippet']['thumbnails']['default']['url'] if isinstance(r['id'], basestring): vid = r['id'] else: vid = r['id']['videoId'] url = 'https://www.youtube.com/watch?v=' + vid results.add(PlayItem(title, img, url, subtitle, synopsis)) return results
def feed(idx): url = _FEEDLIST[idx]['url'] doc = get_doc(url) rtree = select_all(doc, 'li.programme') results = PlayItemList() for l in rtree: el = select_one(l, '.programme-title a') url = _PREFIX + get_attr(el, 'href') title = get_text(el) el = select_one(l, 'img') img = get_attr(el, 'src') subtitle = get_text(select_one(l, '.episode-info span.episode-free')) item = PlayItem(title, img, url, subtitle) if (subtitle is not None) and (not subtitle.startswith('1 ')): item.add_action(MoreEpisodesAction(url, title)) results.add(item) return results
def _extract(data): results = PlayItemList() if not 'data' in data or data['data']['totalItems'] == 0: return results rtree = data['data']['items'] for r in rtree: title = r['title'] # Ignore device support video in searches if title == 'https://youtube.com/devicesupport': continue img = r['thumbnail']['sqDefault'] url = r['player']['default'] m, s = divmod(r['duration'], 60) h, m = divmod(m, 60) subtitle = 'Duration: ' + "%d:%02d:%02d" % (h, m, s) if 'viewCount' in r: subtitle = subtitle + ', Views: ' + "{:,}".format(r['viewCount']) results.add(PlayItem(title, img, url, subtitle)) return results
def _extract(data): videos = data['videos'] results = PlayItemList() for v in videos: title = v['title'] img = v['thumbnailUrl'] url = "http://www.vevo.com/watch/" if 'artists' in v: artist = v['artists'][0] else: artist = v['primaryArtists'][0] subtitle = artist['name'] url = url + artist['urlSafeName'] + '/' if 'urlSafeTitle' in v: url = url + v['urlSafeTitle'] + '/' else: url = url + v['title'] + '/' url = url + v['isrc'] results.add(PlayItem(title, img, url, subtitle)) 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(data): results = PlayItemList() if not('tracks' in data or 'collection' in data): return results if 'tracks' in data: rtree = data['tracks'] else: rtree = data['collection'] for r in rtree: if not 'title' in r: continue if not r['streamable']: continue title = r['title'] if r['artwork_url']: img = r['artwork_url'] else: img = r['user']['avatar_url'] url = r['permalink_url'] subtitle = 'Plays: ' + number_commas(r['playback_count']) subtitle = subtitle + ', Likes: ' + number_commas(r['likes_count']) results.add(PlayItem(title, img, url, subtitle)) return results