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)
Beispiel #2
0
    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
Beispiel #7
0
    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
Beispiel #8
0
    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
Beispiel #9
0
    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
Beispiel #10
0
 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)