def show_site_subcategory(): xbmcplugin.setContent(plugin.handle, 'files') query = json.loads(plugin.args['query'][0]) instance, module, class_name = load_plugin(query) xbmcplugin.setPluginCategory( plugin.handle, '{} / {}'.format(class_name, helper.text_encode(query.get('name')))) for cat in query.get('subcategory'): list_item = xbmcgui.ListItem(label=cat.get('title')) list_item.addContextMenuItems(globalContextMenu()) url = plugin.url_for(show_movies, query=json.dumps({ 'url': cat.get('link'), 'page': 1, 'name': '{} - {}'.format( helper.text_encode(query.get('name')), helper.text_encode(cat.get('title'))), 'module': module, 'className': class_name })) xbmcplugin.addDirectoryItem(plugin.handle, url, list_item, isFolder=True) xbmcplugin.endOfDirectory(plugin.handle)
def getTop(self, response): channel = {'page': 1, 'page_patten': None, 'movies': []} soup = BeautifulSoup(response, "html.parser") for movie in soup.select('div#slider > div.swiper-wrapper > div.item'): real_title = "" title = movie.select_one('h3.title').text movie_type = movie.select_one('div.meta > span.quality').text thumbnail = movie.get('data-src') intro = title if movie.select_one('div.desc'): intro = movie.select_one('div.desc').text if real_title: label = "[%s] %s - %s" % (movie_type, title, real_title) else: real_title = title label = "[%s] %s" % (movie_type, title) channel['movies'].append({ 'id': text_encode(movie.get('href')), 'label': text_encode(label), 'intro': intro, 'title': text_encode(title), 'realtitle': text_encode(real_title), 'thumb': thumbnail, 'type': text_encode(movie_type) }) return channel
def get(self, response, page): channel = {'page': page, 'page_patten': None, 'movies': []} soup = BeautifulSoup(response, "html.parser") # get total page pages = soup.select_one('ul.pagination') m = re.findall(r'(page)?[/|=](\d+)(.html)?', str(pages)) if m: m = [int(x[1]) for x in m] channel['page'] = max(m) for movie in soup.select('ul#movie-last-movie > li a'): real_title = "" title = "" movie_type = "" thumbnail = "" if real_title: label = "[%s] %s - %s" % (movie_type, title, real_title) else: real_title = title label = "[%s] %s" % (movie_type, title) channel['movies'].append({ 'id': text_encode(movie.get('href')), 'label': text_encode(label), 'title': text_encode(title), 'realtitle': text_encode(real_title), 'thumb': thumbnail, 'type': text_encode(movie_type) }) return channel
def getTop(self, response): channel = {'page': 1, 'page_patten': None, 'movies': []} soup = BeautifulSoup(response, "html.parser") for movie in soup.select('li > a.movie-item'): real_title = "" title = "" movie_type = "" thumbnail = "" if real_title: label = "[%s] %s - %s" % (movie_type, title, real_title) else: real_title = title label = "[%s] %s" % (type, title) channel['movies'].append({ 'id': text_encode(movie.get('href')), 'label': text_encode(label), 'title': text_encode(title), 'realtitle': text_encode(real_title), 'thumb': thumbnail, 'type': text_encode(type) }) return channel
def getsubmenu(self, xpath): category = [] for item in xpath.select('ul > li'): category.append({ 'title': text_encode(item.select_one('a').text), 'link': item.select_one('a').get('href') }) return category
def get(self, response): category = [] soup = BeautifulSoup(response, "html.parser") for item in soup.select('ul#menu > li')[1:-1]: menu = item.select_one('a') category.append({ 'title': text_encode(menu.text), 'link': menu.get("href"), 'subcategory': self.getsubmenu(item) }) return category
def get(self, response, referrer_url, skipEps=False): movie = { 'group': {}, 'episode': [], 'links': [], } soup = BeautifulSoup(response, "html.parser") # get server group and link servers = soup.select('div.server') for server in servers: server_title = text_encode( server.select_one('h3.server-name').text.strip()) if server_title not in movie['group']: movie['group'][server_title] = [] self.get_server_eps(server, movie['group'][server_title]) return movie
def get(self, response, page): channel = {'page': page, 'page_patten': None, 'movies': []} soup = BeautifulSoup(response, "html.parser") # get total page pages = soup.select_one('ul.pagination') m = re.findall(r'(page)?[/|=](\d+)(.html)?', str(pages)) if m: m = [int(x[1]) for x in m] channel['page'] = max(m) for movie in soup.select('div.content > div.filmlist > div.item'): item = movie.select_one('a.poster') real_title = "" title = item.get('title') movie_type = movie.select_one('div.meta').find( text=True, recursive=False).strip() thumbnail = item.select_one('img').get('src') if real_title: label = "[%s] %s - %s" % (movie_type, title, real_title) else: real_title = title label = "[%s] %s" % (movie_type, title) intro = label if movie.select_one('div.meta'): intro = '[{}] {} - {}'.format( movie.select_one('div.icons > div.quality').text, movie.select_one('div.meta').text, title) channel['movies'].append({ 'id': text_encode(item.get('href')), 'label': text_encode(label), 'intro': text_encode(intro), 'title': text_encode(title), 'realtitle': text_encode(real_title), 'thumb': thumbnail, 'type': text_encode(movie_type) }) return channel
def get(self, response, page): channel = {'page': page, 'page_patten': None, 'movies': []} soup = BeautifulSoup(response, "html.parser") # get total page pages = soup.select_one('div.wp-pagenavi') m = re.findall(r'trang?[-|/|=](\d+).html?', str(pages)) if m: channel['page'] = max([int(x) for x in m]) for movie in soup.select('ul.MovieList > li.TPostMv > article > a'): real_title = movie.select_one('figure > img').get('alt').strip() title = movie.select_one('h2.Title').text.strip() movie_type = "" try: movie_type = movie.select_one( 'div.Image div.anime-extras div.anime-avg-user-rating' ).text.strip() except: pass thumbnail = movie.select_one('figure > img').get('src') if real_title: label = "[%s] %s - %s" % (movie_type, title, real_title) else: real_title = title label = "[%s] %s" % (movie_type, title) channel['movies'].append({ 'id': text_encode(movie.get('href')), 'label': text_encode(label), 'title': text_encode(title), 'realtitle': text_encode(real_title), 'thumb': thumbnail, 'type': text_encode(movie_type), 'intro': text_encode(real_title) }) return channel
def get_server_eps(content, group_link): for movie in content.select('ul > li > a'): group_link.append({ 'link': movie.get('href'), 'title': "%s" % text_encode(movie.text) })
def show_movie(): query = json.loads(plugin.args['query'][0]) instance, module, class_name = load_plugin(query) movie_item = query.get('movie_item') movie = instance().getMovie(movie_item.get('id')) xbmcplugin.setPluginCategory( plugin.handle, '{} / {} / {}'.format(class_name, helper.text_encode(query.get('cat_name')), helper.text_encode(movie_item.get('title')))) xbmcplugin.setContent(plugin.handle, 'movies') if len(movie['group']) > 0: print("*********************** Display movie episode/group") idx = 0 for key in movie.get('group'): items = movie.get('group').get(key) idx += 1 label = "[COLOR red][B][---- %s : [COLOR yellow]%d eps[/COLOR] ----][/B][/COLOR]" % ( key, len(items)) sli = xbmcgui.ListItem(label=label) if len(items) < 5 or len(movie['group']) < 1: xbmcplugin.addDirectoryItem(plugin.handle, None, sli, isFolder=False) _build_ep_list(items, movie_item, module, class_name) elif idx is len(movie['group']): xbmcplugin.addDirectoryItem(plugin.handle, None, sli, isFolder=False) _build_ep_list(items, movie_item, module, class_name) else: url = plugin.url_for(show_movie_server_group, query=json.dumps({ 'server': key, 'items': items, 'movie_item': movie_item, 'module': module, 'className': class_name })) xbmcplugin.addDirectoryItem(plugin.handle, url, sli, isFolder=True) else: print("*********************** Display movie links") thumb = movie_item.get('thumb') for item in movie['links']: li = xbmcgui.ListItem(label=item['title']) li.setInfo('video', {'title': item['title']}) li.setProperty('fanart_image', thumb) li.setArt({'thumb': thumb}) if 'intro' in item: li.setInfo(type='video', infoLabels={'plot': item['intro']}) if 'isFolder' in item and item.get( 'isFolder') and 'fshare' in item.get('link'): url = plugin.url_for(show_fshare_folder, query=json.dumps({ 'item': item, 'movie_item': movie_item })) li.setProperty("IsPlayable", "false") xbmcplugin.addDirectoryItem(plugin.handle, url, li, True) else: url = plugin.url_for(play, query=json.dumps({ 'item': item, 'movie_item': movie_item, 'direct': 1, 'module': module, 'className': class_name })) li.setProperty("IsPlayable", "true") xbmcplugin.addDirectoryItem(plugin.handle, url, li, False) # save watching movie if 'Phut90' not in class_name and 'Thuckhuya' not in class_name: helper.save_history_movie(query, 'watched.json') xbmcplugin.endOfDirectory(plugin.handle)
def show_movies(movies=None, link=None, page=0, cat_name="", module=None, class_name=None): if not movies: query = json.loads(plugin.args['query'][0]) instance, module, class_name = load_plugin(query) xbmcplugin.setPluginCategory( plugin.handle, '{} / {}'.format(class_name, helper.text_encode(query.get('name')))) link, page, cat_name = query.get('url'), int( query.get('page')), query.get('name') movies = instance().getChannel(link, page) if movies is not None: for item in movies.get('movies'): try: list_item = xbmcgui.ListItem(label=item.get('label')) list_item.addContextMenuItems(globalContextMenu()) list_item.setLabel2(item.get('realtitle')) list_item.setArt({'thumb': item['thumb']}) if 'poster' in item: list_item.setArt({'poster': item['poster']}) if 'intro' in item: list_item.setInfo(type='video', infoLabels={'plot': item['intro']}) if item.get('type') == 'Fshare': is_folder = item.get('isFolder') and True or False if is_folder: url = plugin.url_for(show_fshare_folder, query=json.dumps({ 'item': item, 'movie_item': item, 'code': item.get('code') })) else: list_item.setInfo('video', {'title': item.get('title')}) url = plugin.url_for(play, query=json.dumps({ 'item': item, 'movie_item': item, 'direct': 1 })) list_item.setProperty("IsPlayable", "true") else: is_folder = True url = plugin.url_for(show_movie, query=json.dumps({ 'movie_item': item, 'cat_name': cat_name, 'module': module, 'className': class_name })) xbmcplugin.addDirectoryItem(plugin.handle, url, list_item, isFolder=is_folder) except Exception as inst: print( "*********************** List Movie Exception: {}".format( inst)) print(item) # show next page if movies['page'] > 1 and page < movies['page']: label = "Next page %d / %d >>" % (page, movies['page']) next_item = xbmcgui.ListItem(label=label) if 'page_patten' in movies and movies['page_patten'] is not None: link = movies['page_patten'] url = plugin.url_for(show_movies, query=json.dumps({ 'url': link, 'page': int(page) + 1, 'module': module, 'className': class_name })) xbmcplugin.addDirectoryItem(plugin.handle, url, next_item, True) xbmcplugin.endOfDirectory(plugin.handle)