Exemplo n.º 1
0
class SerialuNet():
    def __init__(self):
        self.id = 'plugin.video.mrstealth.serialu.net'
        self.addon = xbmcaddon.Addon(self.id)
        self.icon = self.addon.getAddonInfo('icon')
        self.path = self.addon.getAddonInfo('path')
        self.profile = self.addon.getAddonInfo('profile')

        self.language = self.addon.getLocalizedString
        self.handle = int(sys.argv[1])
        self.url = 'http://serialu.net'

        self.favorites = MyFavorites(self.id)
        self.inext = os.path.join(self.path, 'resources/icons/next.png')

    def main(self):
        params = common.getParameters(sys.argv[2])
        mode = url = page = None

        mode = params['mode'] if 'mode' in params else None
        url = urllib.unquote_plus(params['url']) if 'url' in params else None
        page = params['page'] if 'page' in params else 1

        if mode == 'play':
            self.playItem(url)
        if mode == 'search':
            self.search()
        if mode == 'genres':
            self.listGenres(url)
        if mode == 'show':
            self.getFilmInfo(url)
        if mode == 'category':
            self.getCategoryItems(url, page)
        if mode == 'favorites':
            self.show_favorites()
        elif mode is None:
            self.menu()

    def menu(self):
        uri = sys.argv[0] + '?mode=%s&url=%s' % ("search", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FF00]%s[/COLOR][/B]" %
                                self.language(2000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.favorites.ListItem()

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("genres", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" %
                                self.language(1000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.getCategoryItems(self.url, 1)
        xbmcplugin.endOfDirectory(self.handle, True)

    def getCategoryItems(self, url, page):
        print "*** Get category items for page: %s and url: %s" % (page, url)

        # Search workaround
        if '?s=' in url:
            tmp = url.split('?s=')
            if page == 1:
                page_url = "%s/page/%s/?s=%s" % (self.url, str(
                    int(page)), tmp[1])
            else:
                page_url = "%s/page/%s/?s=%s" % (self.url, str(
                    int(page)), urllib.quote(tmp[1]))
        else:
            print "No search in url"
            if page == 1:
                page_url = url
            else:
                page_url = "%s/page/%s/" % (url, str(int(page)))

        print "Page URL: %s" % page_url

        response = self.get(page_url)
        items = 0

        if response:
            container = common.parseDOM(response,
                                        "div",
                                        attrs={"id": "column"})
            posts = common.parseDOM(container, "div", attrs={"class": "post"})

            header = common.parseDOM(posts, "h2")
            content = common.parseDOM(posts, 'div', attrs={"class": "content"})

            links = common.parseDOM(header, "a", ret="href")
            titles = common.parseDOM(header, "a")
            images = common.parseDOM(content, "img", ret="src")

            for i, title in enumerate(titles):
                items += 1

                cat = common.parseDOM(posts[i], "div", attrs={'class': 'cat'})
                genres = common.parseDOM(cat,
                                         'a',
                                         attrs={'rel': 'category tag'})

                infos = common.parseDOM(content[i], "p")
                desc = infos[3]

                for j, info in enumerate(infos):
                    if 'strong' in info:
                        desc = common.stripTags(info)
                        genre = ', '.join(genres)

                link = links[i]
                image = images[i]

                uri = sys.argv[0] + '?mode=show&url=%s' % link
                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video',
                             infoLabels={
                                 'title': title,
                                 'genre': genre,
                                 'plot': self.unescape(desc)
                             })

                self.favorites.addContextMenuItem(
                    item, {
                        'title': title.encode('utf-8'),
                        'url': link,
                        'image': image,
                        'playable': False,
                        'action': 'add',
                        'plugin': self.id
                    })

                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        else:
            self.showErrorMessage("getCategoryItems(): Bad response status%s" %
                                  response["status"])

        if not items < 8:
            uri = sys.argv[0] + '?mode=%s&url=%s&page=%s' % (
                "category", url, str(int(page) + 1))
            item = xbmcgui.ListItem(self.language(9001),
                                    thumbnailImage=self.inext)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmc.executebuiltin('Container.SetViewMode(52)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def getFilmInfo(self, url):
        print "*** getFilmInfo rot URL %s" % url

        response = common.fetchPage({"link": url})
        entry = common.parseDOM(response["content"],
                                'div',
                                attrs={'class': 'entry'})

        flash_player = common.parseDOM(entry, "object")
        image = common.parseDOM(entry,
                                'img',
                                attrs={'class': 'm_pic'},
                                ret='src')[0]

        uhash = common.parseDOM(flash_player,
                                "param",
                                attrs={"name": "flashvars"},
                                ret="pl")[0].split('&')[0]
        uhash = uhash.replace('"', '')

        # 1) get encoded URL from playlist/file HASH
        uppod_url = uppod.decodeSourceURL(uhash)

        # 2) get source HASH from encoded URL => getDecodedHashFromSourceURL(url, referer)
        uppod_hash = uppod.getDecodedHashFromSourceURL(
            uppod_url, 'http://serialu.net/media/stil-nov/uppod.swf')

        # http://serialu.net/una1.php?s=I.Hear.Your.Voice&md5=5de21a077941aaafd46e803be2a0de89&rand=0.16188193298876286

        # 3) get playlist/file from encoded HASH
        json_playlist = json.loads(
            uppod.decode(uppod_hash).encode('latin1').decode('utf-8'))
        playlist = json_playlist['playlist']

        if 'playlist' in playlist[0]:
            print "*** This is a playlist with several seasons"

            for season in playlist:
                episods = season['playlist']

                for episode in episods:
                    title = episode['comment']
                    uri = sys.argv[0] + '?mode=play&url=%s' % uppod.decode(
                        episode['file'])
                    info = {
                        'title': title,
                        'overlay': xbmcgui.ICON_OVERLAY_WATCHED,
                        'playCount': 0
                    }

                    item = xbmcgui.ListItem(title, thumbnailImage=image)
                    item.setInfo(type='Video', infoLabels=info)
                    item.setProperty('IsPlayable', 'true')
                    xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
        else:
            print "*** This is a playlist with one season"

            for episode in playlist:
                title = episode['comment']
                uri = sys.argv[0] + '?mode=play&url=%s' % uppod.decode(
                    episode['file'])
                info = {
                    'title': title,
                    'overlay': xbmcgui.ICON_OVERLAY_WATCHED,
                    'playCount': 0
                }

                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video', infoLabels=info)
                item.setProperty('IsPlayable', 'true')
                xbmcplugin.addDirectoryItem(self.handle, uri, item, False)

        xbmc.executebuiltin('Container.SetViewMode(51)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def listGenres(self, url):
        print "list genres"
        #response = common.fetchPage({"link": url})
        response = self.get(url)

        container = common.parseDOM(response,
                                    "div",
                                    attrs={"class": "main-container"})
        genres = common.parseDOM(container, "div", attrs={"class": "h-menu2"})

        titles = common.parseDOM(genres, "a")[1:]
        links = common.parseDOM(genres, "a", ret="href")[1:]

        print links

        for i, title in enumerate(titles):
            uri = sys.argv[0] + '?mode=category&url=%s' % links[i]
            item = xbmcgui.ListItem(title, thumbnailImage=self.icon)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmcplugin.endOfDirectory(self.handle, True)

    def playItem(self, url):
        print "*** play url %s" % url
        item = xbmcgui.ListItem(path=url)
        xbmcplugin.setResolvedUrl(self.handle, True, item)

    def get(self, url):
        cj = cookielib.LWPCookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        urllib2.install_opener(opener)

        request = urllib2.Request(url)
        request.add_header('Host', 'serialu.net')
        request.add_header(
            'User-Agent',
            'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.0 Safari/537.13 SUSE/24.0.1290.0'
        )

        response = opener.open(request)
        return response.read()

    def show_favorites(self):
        self.favorites.list()
        xbmcplugin.endOfDirectory(self.handle, True)

    def search(self):
        kbd = xbmc.Keyboard()
        kbd.setDefault('')
        kbd.setHeading(self.language(2000))
        kbd.doModal()
        keyword = ''

        if kbd.isConfirmed():
            if self.addon.getSetting('translit') == 'true':
                keyword = translit.rus(kbd.getText())
            else:
                keyword = kbd.getText()

            serach_url = "%s?s=%s" % (self.url, urllib.quote(keyword))
            self.getCategoryItems(serach_url, 1)
        else:
            self.menu()

    def showErrorMessage(self, msg):
        print msg
        xbmc.executebuiltin("XBMC.Notification(%s,%s, %s)" %
                            ("ERROR", msg, str(10 * 1000)))

    def unescape(self, string):
        return HTMLParser.HTMLParser().unescape(string)  #.decode('cp1251')

    def encode(self, string):
        return string.decode('cp1251').encode('utf-8')
Exemplo n.º 2
0
class SerialuNet():
    def __init__(self):
        self.id = 'plugin.video.mrstealth.serialu.net'
        self.addon = xbmcaddon.Addon(self.id)
        self.icon = self.addon.getAddonInfo('icon')
        self.path = self.addon.getAddonInfo('path')
        self.profile = self.addon.getAddonInfo('profile')

        self.language = self.addon.getLocalizedString
        self.handle = int(sys.argv[1])
        self.url = 'http://serialu.net'

        self.favorites = MyFavorites(self.id)
        self.inext = os.path.join(self.path, 'resources/icons/next.png')

    def main(self):
        params = common.getParameters(sys.argv[2])
        mode = url = page = None

        mode = params['mode'] if 'mode' in params else None
        url = urllib.unquote_plus(params['url']) if 'url' in params else None
        page = params['page'] if 'page' in params else 1

        if mode == 'play':
            self.playItem(url)
        if mode == 'search':
            self.search()
        if mode == 'genres':
            self.listGenres(url)
        if mode == 'show':
            self.getFilmInfo(url)
        if mode == 'category':
            self.getCategoryItems(url, page)
        if mode == 'favorites':
            self.show_favorites()
        elif mode is None:
            self.menu()

    def menu(self):
        uri = sys.argv[0] + '?mode=%s&url=%s' % ("search", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FF00]%s[/COLOR][/B]" % self.language(2000), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.favorites.ListItem()

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("genres", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" % self.language(1000), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.getCategoryItems(self.url, 1)
        xbmcplugin.endOfDirectory(self.handle, True)

    def getCategoryItems(self, url, page):
        print "*** Get category items for page: %s and url: %s" % (page, url)

        # Search workaround
        if '?s=' in url:
            tmp = url.split('?s=')
            if page == 1:
                page_url = "%s/page/%s/?s=%s" % (self.url, str(int(page)), tmp[1])
            else:
                page_url = "%s/page/%s/?s=%s" % (self.url, str(int(page)), urllib.quote(tmp[1]))
        else:
            print "No search in url"
            if page == 1:
                page_url = url
            else:
                page_url = "%s/page/%s/" % (url, str(int(page)))

        print "Page URL: %s" % page_url

        response = self.get(page_url)
        items = 0

        if response:
            container = common.parseDOM(response, "div", attrs={"id": "column"})
            posts = common.parseDOM(container, "div", attrs={"class": "post"})

            header = common.parseDOM(posts, "h2")
            content = common.parseDOM(posts, 'div', attrs={"class": "content"})


            links = common.parseDOM(header, "a", ret="href")
            titles = common.parseDOM(header, "a")
            images = common.parseDOM(content, "img", ret="src")

            for i, title in enumerate(titles):
                items += 1

                cat = common.parseDOM(posts[i], "div", attrs={'class': 'cat'})
                genres = common.parseDOM(cat, 'a', attrs={'rel': 'category tag'})

                infos = common.parseDOM(content[i], "p")
                desc = infos[3]

                for j, info in enumerate(infos):
                    if 'strong' in info:
                        desc = common.stripTags(info)
                        genre = ', '.join(genres)

                link = links[i]
                image = images[i]

                uri = sys.argv[0] + '?mode=show&url=%s' % link
                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video', infoLabels={'title': title, 'genre': genre, 'plot': self.unescape(desc)})

                self.favorites.addContextMenuItem(item, {'title': title.encode('utf-8'), 'url': link, 'image': image, 'playable': False, 'action': 'add', 'plugin': self.id})

                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        else:
            self.showErrorMessage("getCategoryItems(): Bad response status%s" % response["status"])

        if not items < 8:
            uri = sys.argv[0] + '?mode=%s&url=%s&page=%s' % ("category", url, str(int(page) + 1))
            item = xbmcgui.ListItem(self.language(9001), thumbnailImage=self.inext)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmc.executebuiltin('Container.SetViewMode(52)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def getFilmInfo(self, url):
        print "*** getFilmInfo rot URL %s" % url

        response = common.fetchPage({"link": url})
        entry = common.parseDOM(response["content"], 'div', attrs={'class': 'entry'})

        flash_player = common.parseDOM(entry, "object")
        image = common.parseDOM(entry, 'img', attrs={'class': 'm_pic'}, ret='src')[0]

        uhash = common.parseDOM(flash_player, "param", attrs={"name": "flashvars"}, ret="pl")[0].split('&')[0]
        uhash = uhash.replace('"', '')

        # 1) get encoded URL from playlist/file HASH
        uppod_url = uppod.decodeSourceURL(uhash)

        # 2) get source HASH from encoded URL => getDecodedHashFromSourceURL(url, referer)
        uppod_hash = uppod.getDecodedHashFromSourceURL(uppod_url, 'http://serialu.net/media/stil-nov/uppod.swf')

        # http://serialu.net/una1.php?s=I.Hear.Your.Voice&md5=5de21a077941aaafd46e803be2a0de89&rand=0.16188193298876286

        # 3) get playlist/file from encoded HASH
        json_playlist = json.loads(uppod.decode(uppod_hash).encode('latin1').decode('utf-8'))
        playlist = json_playlist['playlist']

        if 'playlist' in playlist[0]:
            print "*** This is a playlist with several seasons"

            for season in playlist:
                episods = season['playlist']

                for episode in episods:
                    title = episode['comment']
                    uri = sys.argv[0] + '?mode=play&url=%s' % uppod.decode(episode['file'])
                    info = {'title': title, 'overlay': xbmcgui.ICON_OVERLAY_WATCHED, 'playCount': 0}

                    item = xbmcgui.ListItem(title, thumbnailImage=image)
                    item.setInfo(type='Video', infoLabels=info)
                    item.setProperty('IsPlayable', 'true')
                    xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
        else:
            print "*** This is a playlist with one season"

            for episode in playlist:
                title = episode['comment']
                uri = sys.argv[0] + '?mode=play&url=%s' % uppod.decode(episode['file'])
                info = {'title': title, 'overlay': xbmcgui.ICON_OVERLAY_WATCHED, 'playCount': 0}

                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video', infoLabels=info)
                item.setProperty('IsPlayable', 'true')
                xbmcplugin.addDirectoryItem(self.handle, uri, item, False)

        xbmc.executebuiltin('Container.SetViewMode(51)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def listGenres(self, url):
        print "list genres"
        #response = common.fetchPage({"link": url})
        response = self.get(url)

        container = common.parseDOM(response, "div", attrs={"class": "main-container"})
        genres = common.parseDOM(container, "ul", attrs={"class": "h-menu2"})

        titles = common.parseDOM(genres, "a")
        links = common.parseDOM(genres, "a", ret="href")

        print links

        for i, title in enumerate(titles):
            uri = sys.argv[0] + '?mode=category&url=%s' % links[i]
            item = xbmcgui.ListItem(title, thumbnailImage=self.icon)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmcplugin.endOfDirectory(self.handle, True)

    def playItem(self, url):
        print "*** play url %s" % url
        item = xbmcgui.ListItem(path=url)
        xbmcplugin.setResolvedUrl(self.handle, True, item)

    def get(self, url):
        cj = cookielib.LWPCookieJar()
        opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
        urllib2.install_opener(opener)

        request = urllib2.Request(url)
        request.add_header('Host', 'serialu.net')
        request.add_header('User-Agent', 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.13 (KHTML, like Gecko) Chrome/24.0.1290.0 Safari/537.13 SUSE/24.0.1290.0')

        response = opener.open(request)
        return response.read()

    def show_favorites(self):
        self.favorites.list()
        xbmcplugin.endOfDirectory(self.handle, True)

    def search(self):
        kbd = xbmc.Keyboard()
        kbd.setDefault('')
        kbd.setHeading(self.language(2000))
        kbd.doModal()
        keyword = ''

        if kbd.isConfirmed():
            if self.addon.getSetting('translit') == 'true':
                keyword = translit.rus(kbd.getText())
            else:
                keyword = kbd.getText()

            serach_url = "%s?s=%s" % (self.url, urllib.quote(keyword))
            self.getCategoryItems(serach_url, 1)
        else:
            self.menu()

    def showErrorMessage(self, msg):
        print msg
        xbmc.executebuiltin("XBMC.Notification(%s,%s, %s)" % ("ERROR", msg, str(10 * 1000)))

    def unescape(self, string):
        return HTMLParser.HTMLParser().unescape(string) #.decode('cp1251')

    def encode(self, string):
        return string.decode('cp1251').encode('utf-8')
Exemplo n.º 3
0
class OnlineLife():
    def __init__(self):
        self.id = 'plugin.video.online-life.ru'
        self.addon = xbmcaddon.Addon(self.id)
        self.icon = self.addon.getAddonInfo('icon')
        self.path = self.addon.getAddonInfo('path')
        self.profile = self.addon.getAddonInfo('profile')

        self.language = self.addon.getLocalizedString
        self.handle = int(sys.argv[1])
        self.url = 'http://www.online-life.ru'

        self.favorites = MyFavorites(self.id)

        self.inext = os.path.join(self.path, 'resources/icons/next.png')
        self.debug = False

    def main(self):
        params = common.getParameters(sys.argv[2])
        mode = url = page = None

        mode = params['mode'] if 'mode' in params else None
        url = urllib.unquote_plus(params['url']) if 'url' in params else None
        page = params['page'] if 'page' in params else 1

        keyword = params['keyword'] if 'keyword' in params else None
        unified = params['unified'] if 'unified' in params else None

        if mode == 'play':
            self.play(url)
        if mode == 'search':
            self.search(keyword, unified)
        if mode == 'genres':
            self.listGenres(url)
        if mode == 'show':
            self.getFilmInfo(url)
        if mode == 'category':
            self.getCategoryItems(url, page)
        if mode == 'favorites':
            self.show_favorites()
        elif mode is None:
            self.menu()

    def menu(self):
        uri = sys.argv[0] + '?mode=%s&url=%s' % ("search", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FF00]%s[/COLOR][/B]" % self.language(2000), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.favorites.ListItem()

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("genres", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" % self.language(1000), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("category", "http://www.online-life.ru/kino-multserial/")
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" % self.language(1004), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.getCategoryItems(self.url, 0)
        xbmcplugin.endOfDirectory(self.handle, True)

    def getCategoryItems(self, url, page):
        page_url = self.url if page == 0 else "%s/page/%s/" % (url, str(int(page)))
        response = common.fetchPage({"link": page_url})

        if response["status"] == 200:
            container = common.parseDOM(response["content"], "div", attrs={"id": "container"})
            posts = common.parseDOM(container, "div", attrs={"class": "custom-post media-grid"})
            extras = common.parseDOM(container, "div", attrs={"class": "extra"})
            pagenav = common.parseDOM(container, "div", attrs={"class": "navigation"})

            ratings = common.parseDOM(container, "li", attrs={"class": "current-rating"})
            items = 0

            for i, post in enumerate(posts):
                items += 1

                poster = common.parseDOM(post, "div", attrs={"class": "custom-poster"})
                media_data = common.parseDOM(extras[i], "div", attrs={"class": "media-data text-overflow"})

                title = self.encode(common.stripTags(common.parseDOM(poster, "a")[0]))
                link = common.parseDOM(poster, "a", ret="href")[0]
                image = common.parseDOM(poster, "img", ret="src")[0]

                description = self.encode(common.stripTags(common.parseDOM(extras[i], "div", attrs={"class": "description"})[0]))
                genres = self.encode(', '.join(common.parseDOM(media_data, "a")))

                rating = float(ratings[i]) / 10

                uri = sys.argv[0] + '?mode=show&url=%s' % link
                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video', infoLabels={'title': title, 'genre': genres, 'plot': description, 'rating': rating})

                self.favorites.addContextMenuItem(item, {'title': title, 'url': link, 'image': image, 'playable': False, 'action': 'add', 'plugin': self.id})

                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

            if pagenav and not items < 20:
                uri = sys.argv[0] + '?mode=%s&url=%s&page=%s' % ("category", url, str(int(page) + 1))
                item = xbmcgui.ListItem(self.language(9001), thumbnailImage=self.inext)
                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        else:
            self.showErrorMessage("getCategoryItems(): Bad response status%s" % response["status"])

        xbmc.executebuiltin('Container.SetViewMode(52)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def getFilmInfo(self, url):
        response = common.fetchPage({"link": url})

        content = common.parseDOM(response["content"], "div", attrs={"id": "dle-content"})
        story = common.parseDOM(response["content"], "div", attrs={"class": "full-story"})

        title = self.encode(common.parseDOM(story, "span", attrs={"itemprop": "name"})[0])
        image = common.parseDOM(story, "img", attrs={"itemprop": "image"}, ret="src")[0]

        scripts = common.parseDOM(content, "script", attrs={"type": "text/javascript"})

        itemprop_genre = common.parseDOM(story, "span", attrs={"itemprop": "genre"})
        genres = self.encode(', '.join(common.parseDOM(itemprop_genre, 'a')))

        desc = self.encode(common.parseDOM(story, "div", attrs={"style": "display:inline;"})[0])

        parser = URLParser()

        #for i, script in enumerate(scripts):
        #    print "%d #########" % i
        #    print script

        try:
            link = parser.parse(scripts[6])[0]
        except IndexError:
            link = parser.parse(scripts[7])[0]

        movie = link if not link.endswith('.txt') else None
        season = link if link.endswith('.txt') else None

        if movie:
            uri = sys.argv[0] + '?mode=play&url=%s' % urllib.quote_plus(movie)

            item = xbmcgui.ListItem(title, thumbnailImage=image)
            item.setInfo(type='Video', infoLabels={'title': title, 'genre': genres, 'plot': common.stripTags(desc), 'overlay': xbmcgui.ICON_OVERLAY_WATCHED, 'playCount': 0})
            item.setProperty('IsPlayable', 'true')

            xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
            xbmc.executebuiltin('Container.SetViewMode(52)')

        elif season:
            print "This is a season %s" % season
            response = common.fetchPage({"link": season})

            if response["status"] == 200:
                response = eval(response["content"].replace('\t', '').replace('\r\n', ''))

                if 'playlist' in response['playlist'][0]:
                    print "This is a season multiple seasons"

                    for season in response['playlist']:
                        episods = season['playlist']

                        for episode in episods:
                            etitle = "%s (%s)" % (episode['comment'], common.stripTags(season['comment']))
                            url = episode['file']

                            # print "**** %s" % url

                            uri = sys.argv[0] + '?mode=play&url=%s' % urllib.quote_plus(url)
                            item = xbmcgui.ListItem(etitle, thumbnailImage=image)

                            labels = {'title': title, 'genre': 'genre', 'plot': 'desc', 'overlay': xbmcgui.ICON_OVERLAY_WATCHED, 'playCount': 0}
                            item.setInfo(type='Video', infoLabels=labels)

                            item.setProperty('IsPlayable', 'true')
                            xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
                    xbmc.executebuiltin('Container.SetViewMode(51)')

                else:
                    print "This is one season"
                    for episode in response['playlist']:
                        etitle = episode['comment']
                        url = episode['file']

                        uri = sys.argv[0] + '?mode=play&url=%s' % urllib.quote_plus(url)
                        item = xbmcgui.ListItem(etitle, thumbnailImage=image)

                        labels = {'title': title, 'genre': 'genre', 'plot': 'desc', 'overlay': xbmcgui.ICON_OVERLAY_WATCHED, 'playCount': 0}

                        item.setInfo(type='Video', infoLabels=labels)
                        item.setProperty('IsPlayable', 'true')
                        xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
                    xbmc.executebuiltin('Container.SetViewMode(51)')

        xbmcplugin.endOfDirectory(self.handle, True)

    def listGenres(self, url):
        response = common.fetchPage({"link": url})

        container = common.parseDOM(response["content"], "div", attrs={"class": "nav"})
        titles = common.parseDOM(container, "a", attrs={"class": "link1"})
        links = common.parseDOM(container, "a", attrs={"class": "link1"}, ret="href")

        uri = sys.argv[0] + '?mode=category&url=%s' % "http://www.online-life.ru/kino-new/"
        item = xbmcgui.ListItem(self.language(1007), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        for i, title in enumerate(titles):
            link = links[i] if links[i].startswith('http') else self.url + links[i]
            uri = sys.argv[0] + '?mode=category&url=%s' % link
            item = xbmcgui.ListItem(self.encode(title), thumbnailImage=self.icon)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        uri = sys.argv[0] + '?mode=category&url=%s' % "http://www.online-life.ru/kino-tv/"
        item = xbmcgui.ListItem(self.language(1006), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmcplugin.endOfDirectory(self.handle, True)

    def show_favorites(self):
        self.favorites.list()
        xbmcplugin.endOfDirectory(self.handle, True)

    def play(self, url):
        print "Play media URL: %s" % url

        hd = True if  self.addon.getSetting('hd_youtube_videos') == 'true' else False
        supported_resolutions = ['720p', '1080p'] if hd else ['360p', '480p']
        video_url = ''

        try:
            if 'youtube' in url:
                # url =  youtube.get_youtube_url(url, hd) if 'youtube' in url else url
                yt.url = url
                video_url = yt.videos[-1].url
                # for video in yt.videos:
                #     extension = video.__dict__['extension']
                #     resolution = video.__dict__['resolution']

                #     if resolution in supported_resolutions and extension == 'mp4':
                #         # print "%s %s" % (video.extension, video.resolution)
                #         video_url = yt.videos[0].url
                #     else:
                #         print "Unsupported resolution or video format: %s %s" % (resolution, extension)
            else:
                video_url = url

            print urllib.unquote(video_url)
            item = xbmcgui.ListItem(path=video_url)
            xbmcplugin.setResolvedUrl(self.handle, True, item)
        except Exception, e:
            self.showErrorMessage(e)
Exemplo n.º 4
0
class OnlineLife():
    def __init__(self):
        self.id = 'plugin.video.online-life.ru'
        self.addon = xbmcaddon.Addon(self.id)
        self.icon = self.addon.getAddonInfo('icon')
        self.path = self.addon.getAddonInfo('path')
        self.profile = self.addon.getAddonInfo('profile')

        self.language = self.addon.getLocalizedString
        self.handle = int(sys.argv[1])
        self.url = 'http://www.online-life.ru'

        self.favorites = MyFavorites(self.id)

        self.inext = os.path.join(self.path, 'resources/icons/next.png')
        self.debug = False

    def main(self):
        params = common.getParameters(sys.argv[2])
        mode = url = page = None

        mode = params['mode'] if 'mode' in params else None
        url = urllib.unquote_plus(params['url']) if 'url' in params else None
        page = params['page'] if 'page' in params else 1

        keyword = params['keyword'] if 'keyword' in params else None
        unified = params['unified'] if 'unified' in params else None

        if mode == 'play':
            self.play(url)
        if mode == 'search':
            self.search(keyword, unified)
        if mode == 'genres':
            self.listGenres(url)
        if mode == 'show':
            self.getFilmInfo(url)
        if mode == 'category':
            self.getCategoryItems(url, page)
        if mode == 'favorites':
            self.show_favorites()
        elif mode is None:
            self.menu()

    def menu(self):
        uri = sys.argv[0] + '?mode=%s&url=%s' % ("search", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FF00]%s[/COLOR][/B]" %
                                self.language(2000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.favorites.ListItem()

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("genres", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" %
                                self.language(1000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        uri = sys.argv[0] + '?mode=%s&url=%s' % (
            "category", "http://www.online-life.ru/kino-multserial/")
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" %
                                self.language(1004),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.getCategoryItems(self.url, 0)
        xbmcplugin.endOfDirectory(self.handle, True)

    def getCategoryItems(self, url, page):
        page_url = self.url if page == 0 else "%s/page/%s/" % (url,
                                                               str(int(page)))
        response = common.fetchPage({"link": page_url})

        if response["status"] == 200:
            container = common.parseDOM(response["content"],
                                        "div",
                                        attrs={"id": "container"})
            posts = common.parseDOM(container,
                                    "div",
                                    attrs={"class": "custom-post media-grid"})
            extras = common.parseDOM(container,
                                     "div",
                                     attrs={"class": "extra"})
            pagenav = common.parseDOM(container,
                                      "div",
                                      attrs={"class": "navigation"})

            ratings = common.parseDOM(container,
                                      "li",
                                      attrs={"class": "current-rating"})
            items = 0

            for i, post in enumerate(posts):
                items += 1

                poster = common.parseDOM(post,
                                         "div",
                                         attrs={"class": "custom-poster"})
                media_data = common.parseDOM(
                    extras[i],
                    "div",
                    attrs={"class": "media-data text-overflow"})

                title = self.encode(
                    common.stripTags(common.parseDOM(poster, "a")[0]))
                link = common.parseDOM(poster, "a", ret="href")[0]
                image = common.parseDOM(poster, "img", ret="src")[0]

                description = self.encode(
                    common.stripTags(
                        common.parseDOM(extras[i],
                                        "div",
                                        attrs={"class": "description"})[0]))
                genres = self.encode(', '.join(common.parseDOM(
                    media_data, "a")))

                rating = float(ratings[i]) / 10

                uri = sys.argv[0] + '?mode=show&url=%s' % link
                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video',
                             infoLabels={
                                 'title': title,
                                 'genre': genres,
                                 'plot': description,
                                 'rating': rating
                             })

                self.favorites.addContextMenuItem(
                    item, {
                        'title': title,
                        'url': link,
                        'image': image,
                        'playable': False,
                        'action': 'add',
                        'plugin': self.id
                    })

                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

            if pagenav and not items < 20:
                uri = sys.argv[0] + '?mode=%s&url=%s&page=%s' % (
                    "category", url, str(int(page) + 1))
                item = xbmcgui.ListItem(self.language(9001),
                                        thumbnailImage=self.inext)
                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        else:
            self.showErrorMessage("getCategoryItems(): Bad response status%s" %
                                  response["status"])

        xbmc.executebuiltin('Container.SetViewMode(52)')
        xbmcplugin.endOfDirectory(self.handle, True)

    def getFilmInfo(self, url):
        response = common.fetchPage({"link": url})

        content = common.parseDOM(response["content"],
                                  "div",
                                  attrs={"id": "dle-content"})
        story = common.parseDOM(response["content"],
                                "div",
                                attrs={"class": "full-story"})

        title = self.encode(
            common.parseDOM(story, "span", attrs={"itemprop": "name"})[0])
        image = common.parseDOM(story,
                                "img",
                                attrs={"itemprop": "image"},
                                ret="src")[0]

        #sources = common.parseDOM(content, "script", attrs={"type": "text/javascript"}, ret="src")
        itemprop_genre = common.parseDOM(story,
                                         "span",
                                         attrs={"itemprop": "genre"})
        genres = self.encode(', '.join(common.parseDOM(itemprop_genre, 'a')))

        desc = self.encode(
            common.parseDOM(story, "div", attrs={"style":
                                                 "display:inline;"})[0])
        link = self.getVideoSource(content)

        # for i, script in enumerate(scripts):
        #    print "%d #########" % i

        #    if 'www.online-life.me' in source:
        #     print script

        # try:
        #     link = parser.parse(scripts[8])[0]
        # except IndexError:
        #     link = parser.parse(scripts[9])[0]

        movie = link if not link.endswith('.txt') else None
        season = link if link.endswith('.txt') else None

        if movie:
            uri = sys.argv[0] + '?mode=play&url=%s' % urllib.quote_plus(movie)

            overlay = xbmcgui.ICON_OVERLAY_WATCHED
            item = xbmcgui.ListItem(title, thumbnailImage=image)

            info = {
                "Title": title,
                'genre': genres,
                "Plot": common.stripTags(desc),
                "overlay": overlay,
                "playCount": 0
            }
            item.setInfo(type='Video', infoLabels=info)
            item.setProperty('IsPlayable', 'true')

            xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
            xbmc.executebuiltin('Container.SetViewMode(52)')

        elif season:
            print "This is a season %s" % season
            response = common.fetchPage({"link": season})
            overlay = xbmcgui.ICON_OVERLAY_WATCHED

            if response["status"] == 200:
                response = eval(response["content"].replace('\t', '').replace(
                    '\r\n', ''))

                if 'playlist' in response['playlist'][0]:
                    print "This is a season multiple seasons"

                    for season in response['playlist']:
                        episods = season['playlist']

                        for episode in episods:
                            etitle = "%s (%s)" % (episode['comment'],
                                                  common.stripTags(
                                                      season['comment']))
                            url = episode['file']

                            # print "**** %s" % url

                            uri = sys.argv[
                                0] + '?mode=play&url=%s' % urllib.quote_plus(
                                    url)
                            item = xbmcgui.ListItem(etitle,
                                                    thumbnailImage=image)

                            info = {
                                "Title": title,
                                'genre': 'genre',
                                "Plot": desc,
                                "overlay": overlay,
                                "playCount": 0
                            }
                            item.setInfo(type='Video', infoLabels=info)
                            item.setProperty('IsPlayable', 'true')
                            xbmcplugin.addDirectoryItem(
                                self.handle, uri, item, False)

                    xbmc.executebuiltin('Container.SetViewMode(51)')

                else:
                    print "This is one season"
                    for episode in response['playlist']:
                        etitle = episode['comment']
                        url = episode['file']

                        uri = sys.argv[
                            0] + '?mode=play&url=%s' % urllib.quote_plus(url)
                        item = xbmcgui.ListItem(etitle, thumbnailImage=image)

                        overlay = xbmcgui.ICON_OVERLAY_WATCHED
                        info = {
                            "Title": title,
                            'genre': 'genre',
                            "Plot": desc,
                            "overlay": overlay,
                            "playCount": 0
                        }
                        item.setInfo(type='Video', infoLabels=info)
                        item.setProperty('IsPlayable', 'true')
                        xbmcplugin.addDirectoryItem(self.handle, uri, item,
                                                    False)

                    xbmc.executebuiltin('Container.SetViewMode(51)')

        xbmcplugin.endOfDirectory(self.handle, True)

    def getVideoID(self, html):
        container = common.parseDOM(html, "div", attrs={"id":
                                                        "mklink-text"})[0]
        string = common.parseDOM(html, "a", ret="id")[0]
        return string.split('-')[-1]

    def getVideoSource(self, html):
        id = self.getVideoID(html)
        url = 'http://www.online-life.me/js.php?id=%s' % id

        request = urllib2.Request(url)
        request.add_header('Referer', 'http://www.online-life.me/')
        request.add_header('Host', 'www.online-life.me')
        response = urllib2.urlopen(request).read()
        # link = URLParser().parse(response)[0]
        # print link
        return URLParser().parse(response)[0]

    def listGenres(self, url):
        response = common.fetchPage({"link": url})

        container = common.parseDOM(response["content"],
                                    "div",
                                    attrs={"class": "nav"})
        titles = common.parseDOM(container, "a", attrs={"class": "link1"})
        links = common.parseDOM(container,
                                "a",
                                attrs={"class": "link1"},
                                ret="href")

        uri = sys.argv[
            0] + '?mode=category&url=%s' % "http://www.online-life.ru/kino-new/"
        item = xbmcgui.ListItem(self.language(1007), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        for i, title in enumerate(titles):
            link = links[i] if links[i].startswith(
                'http') else self.url + links[i]
            uri = sys.argv[0] + '?mode=category&url=%s' % link
            item = xbmcgui.ListItem(self.encode(title),
                                    thumbnailImage=self.icon)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        uri = sys.argv[
            0] + '?mode=category&url=%s' % "http://www.online-life.ru/kino-tv/"
        item = xbmcgui.ListItem(self.language(1006), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmcplugin.endOfDirectory(self.handle, True)

    def show_favorites(self):
        self.favorites.list()
        xbmcplugin.endOfDirectory(self.handle, True)

    def play(self, url):
        print "Play media URL: %s" % url

        hd = True if self.addon.getSetting(
            'hd_youtube_videos') == 'true' else False
        supported_resolutions = ['720p', '1080p'] if hd else ['360p', '480p']
        video_url = ''

        try:
            if 'youtube' in url:
                # url =  youtube.get_youtube_url(url, hd) if 'youtube' in url else url
                yt.url = url
                video_url = yt.videos[-1].url
                # for video in yt.videos:
                #     extension = video.__dict__['extension']
                #     resolution = video.__dict__['resolution']

                #     if resolution in supported_resolutions and extension == 'mp4':
                #         # print "%s %s" % (video.extension, video.resolution)
                #         video_url = yt.videos[0].url
                #     else:
                #         print "Unsupported resolution or video format: %s %s" % (resolution, extension)
            else:
                video_url = url

            print urllib.unquote(video_url)
            item = xbmcgui.ListItem(path=video_url)
            xbmcplugin.setResolvedUrl(self.handle, True, item)
        except Exception, e:
            self.showErrorMessage(e)
Exemplo n.º 5
0
class OnlineLife():
    def __init__(self):
        self.id = 'plugin.video.online-life.cc'
        self.addon = xbmcaddon.Addon(self.id)
        self.icon = self.addon.getAddonInfo('icon')
        self.path = self.addon.getAddonInfo('path')
        self.profile = self.addon.getAddonInfo('profile')

        self.language = self.addon.getLocalizedString
        self.handle = int(sys.argv[1])
        self.domain = self.addon.getSetting('domain')
        self.url = 'http://' + self.addon.getSetting('domain')

        self.favorites = MyFavorites(self.id)

        self.inext = os.path.join(self.path, 'resources/icons/next.png')
        self.debug = False

    def main(self):
        params = common.getParameters(sys.argv[2])
        mode = url = page = None

        mode = params['mode'] if 'mode' in params else None
        url = urllib.unquote_plus(params['url']) if 'url' in params else None
        page = params['page'] if 'page' in params else 1

        keyword = params['keyword'] if 'keyword' in params else None
        external = 'unified' if 'unified' in params else None
        if external == None:
            external = 'usearch' if 'usearch' in params else None

        if mode == 'play':
            self.play(url)
        if mode == 'search':
            self.search(keyword, external)
        if mode == 'genres':
            self.listGenres(url)
        if mode == 'show':
            self.getFilmInfo(url)
        if mode == 'category':
            self.getCategoryItems(url, page)
        if mode == 'favorites':
            self.show_favorites()
        elif mode is None:
            self.menu()

    def menu(self):
        uri = sys.argv[0] + '?mode=%s&url=%s' % ("search", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FF00]%s[/COLOR][/B]" %
                                self.language(2000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.favorites.ListItem()

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("genres", self.url)
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" %
                                self.language(1000),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        uri = sys.argv[0] + '?mode=%s&url=%s' % ("category", self.url +
                                                 "/kino-multserial/")
        item = xbmcgui.ListItem("[B][COLOR=FF00FFF0]%s[/COLOR][/B]" %
                                self.language(1004),
                                thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        self.getCategoryItems(self.url + '/kino-new/', 1)

    def getCategoryItems(self, url, page):
        page_url = url if page == 0 else "%s/page/%s/" % (url, str(int(page)))
        response = common.fetchPage({"link": page_url})

        if response["status"] == 200:
            container = common.parseDOM(response["content"],
                                        "div",
                                        attrs={"id": "container"})
            posts = common.parseDOM(container,
                                    "div",
                                    attrs={"class": "custom-post media-grid"})
            extras = common.parseDOM(container,
                                     "div",
                                     attrs={"class": "extra"})
            pagenav = common.parseDOM(container,
                                      "div",
                                      attrs={"class": "navigation"})

            ratings = common.parseDOM(container,
                                      "li",
                                      attrs={"class": "current-rating"})
            items = 0

            for i, post in enumerate(posts):
                items += 1

                poster = common.parseDOM(post,
                                         "div",
                                         attrs={"class": "custom-poster"})
                media_data = common.parseDOM(
                    extras[i],
                    "div",
                    attrs={"class": "media-data text-overflow"})

                title = self.encode(
                    common.stripTags(common.parseDOM(poster, "a")[0]).split(
                        ']')[0] + ']')
                link = common.parseDOM(poster, "a", ret="href")[0]
                image = common.parseDOM(poster, "img", ret="src")[0]

                description = self.encode(
                    common.stripTags(
                        common.parseDOM(extras[i],
                                        "div",
                                        attrs={"class": "description"})[0]))
                genres = self.encode(', '.join(common.parseDOM(
                    media_data, "a")))

                try:
                    rating = float(ratings[i]) / 10
                except IndexError:
                    rating = 0

                uri = sys.argv[0] + '?mode=show&url=%s' % link
                item = xbmcgui.ListItem(title, thumbnailImage=image)
                item.setInfo(type='Video',
                             infoLabels={
                                 'title': title,
                                 'genre': genres,
                                 'plot': description,
                                 'rating': rating
                             })

                self.favorites.addContextMenuItem(
                    item, {
                        'title': title,
                        'url': link,
                        'image': image,
                        'playable': False,
                        'action': 'add',
                        'plugin': self.id
                    })

                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

            if pagenav and not items < 20:
                uri = sys.argv[0] + '?mode=%s&url=%s&page=%s' % (
                    "category", url, str(int(page) + 1))
                item = xbmcgui.ListItem(self.language(9001),
                                        thumbnailImage=self.inext)
                xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        else:
            self.showErrorMessage("getCategoryItems(): Bad response status%s" %
                                  response["status"])

        xbmcplugin.setContent(self.handle, 'movies')
        xbmcplugin.endOfDirectory(self.handle, True)

    def getFilmInfo(self, url):
        response = common.fetchPage({"link": url})

        content = common.parseDOM(response["content"],
                                  "div",
                                  attrs={"id": "dle-content"})
        story = common.parseDOM(response["content"],
                                "div",
                                attrs={"class": "full-story"})

        title = self.encode(
            common.parseDOM(story, "span", attrs={"itemprop": "name"})[0])
        image = common.parseDOM(story,
                                "img",
                                attrs={"itemprop": "image"},
                                ret="src")[0]

        itemprop_genre = common.parseDOM(story,
                                         "span",
                                         attrs={"itemprop": "genre"})
        genres = self.encode(', '.join(common.parseDOM(itemprop_genre, 'a')))

        desc = self.encode(
            common.parseDOM(story, "div", attrs={"style":
                                                 "display:inline;"})[0])
        link = self.getVideoSource(url)

        movie = link if not link.endswith('.txt') else None
        season = link if link.endswith('.txt') else None

        if movie:
            uri = sys.argv[0] + '?mode=play&url=%s' % urllib.quote_plus(movie)

            overlay = xbmcgui.ICON_OVERLAY_WATCHED
            item = xbmcgui.ListItem(title, thumbnailImage=image)

            info = {
                "Title": title,
                'genre': genres,
                "Plot": common.stripTags(desc),
                "overlay": overlay,
                "playCount": 0
            }
            item.setInfo(type='Video', infoLabels=info)
            item.setProperty('IsPlayable', 'true')

            xbmcplugin.addDirectoryItem(self.handle, uri, item, False)
            xbmcplugin.setContent(self.handle, 'movies')

        elif season:
            print "This is a season %s" % season

            headers = {
                "Host":
                "play.cidwo.com",
                "Referer":
                "http://play.cidwo.com/player.php?newsid=" +
                self.getVideoID(url),
                "User-Agent":
                "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36"
            }

            response = common.fetchPage({"link": season, "headers": headers})

            overlay = xbmcgui.ICON_OVERLAY_WATCHED

            if response["status"] == 200:
                response = eval(response["content"].replace('\t', '').replace(
                    '\r\n', ''))

                if 'playlist' in response['playlist'][0]:
                    print "This is a season multiple seasons"

                    for season in response['playlist']:
                        episods = season['playlist']

                        for episode in episods:
                            etitle = "%s (%s)" % (episode['comment'],
                                                  common.stripTags(
                                                      season['comment']))
                            url = episode['file']
                            uri = sys.argv[
                                0] + '?mode=play&url=%s' % urllib.quote_plus(
                                    url)
                            item = xbmcgui.ListItem(etitle,
                                                    thumbnailImage=image)

                            info = {
                                "Title": title,
                                'genre': 'genre',
                                "Plot": desc,
                                "overlay": overlay,
                                "playCount": 0
                            }
                            item.setInfo(type='Video', infoLabels=info)
                            item.setProperty('IsPlayable', 'true')
                            xbmcplugin.addDirectoryItem(
                                self.handle, uri, item, False)

                    xbmcplugin.setContent(self.handle, 'episodes')

                else:
                    print "This is one season"
                    for episode in response['playlist']:
                        etitle = episode['comment']
                        url = episode['file']

                        uri = sys.argv[
                            0] + '?mode=play&url=%s' % urllib.quote_plus(url)
                        item = xbmcgui.ListItem(etitle, thumbnailImage=image)

                        overlay = xbmcgui.ICON_OVERLAY_WATCHED
                        info = {
                            "Title": title,
                            'genre': 'genre',
                            "Plot": desc,
                            "overlay": overlay,
                            "playCount": 0
                        }
                        item.setInfo(type='Video', infoLabels=info)
                        item.setProperty('IsPlayable', 'true')
                        xbmcplugin.addDirectoryItem(self.handle, uri, item,
                                                    False)

                    xbmcplugin.setContent(self.handle, 'episodes')

        xbmcplugin.endOfDirectory(self.handle, True)

    def getVideoID(self, url):
        return url.split('/')[-1].split('-')[0]

    def getVideoSource(self, url):
        id = self.getVideoID(url)

        url = "http://play.cidwo.com/js.php?id=%s" % id

        request = urllib2.Request(url)
        request.add_header('Referer',
                           'http://play.cidwo.com/player.php?newsid=' + id)
        request.add_header('Host', 'play.cidwo.com')

        response = urllib2.urlopen(request).read()

        return URLParser().parse(response)[0]

    def listGenres(self, url):
        response = common.fetchPage({"link": url})

        container = common.parseDOM(response["content"],
                                    "div",
                                    attrs={"class": "nav"})
        titles = common.parseDOM(container, "a", attrs={"class": "link1"})
        links = common.parseDOM(container,
                                "a",
                                attrs={"class": "link1"},
                                ret="href")

        cats = common.parseDOM(container,
                               "li",
                               attrs={"class": "pull-right nodrop"})

        titles += common.parseDOM(cats, "a")
        links += common.parseDOM(cats, "a", ret="href")

        uri = sys.argv[0] + '?mode=category&url=%s' % (self.url + "/kino-new/")
        item = xbmcgui.ListItem(self.language(1007), thumbnailImage=self.icon)
        xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        for i, title in enumerate(titles):
            link = links[i] if links[i].startswith(
                'http') else self.url + links[i]
            uri = sys.argv[0] + '?mode=category&url=%s' % link
            item = xbmcgui.ListItem(self.encode(title),
                                    thumbnailImage=self.icon)
            xbmcplugin.addDirectoryItem(self.handle, uri, item, True)

        xbmcplugin.setContent(self.handle, 'files')
        xbmcplugin.endOfDirectory(self.handle, True)

    def show_favorites(self):
        self.favorites.list()
        xbmcplugin.setContent(self.handle, 'files')
        xbmcplugin.endOfDirectory(self.handle, True)

    def play(self, url):
        print "Play media URL: %s" % url

        hd = True if self.addon.getSetting(
            'hd_youtube_videos') == 'true' else False
        supported_resolutions = ['720p', '1080p'] if hd else ['360p', '480p']
        video_url = ''

        try:
            if 'youtube' in url:
                yt.url = url
                video_url = yt.videos[-1].url
            else:
                video_url = url

            print urllib.unquote(video_url)
            item = xbmcgui.ListItem(path=video_url)
            xbmcplugin.setResolvedUrl(self.handle, True, item)
        except Exception, e:
            self.showErrorMessage(e)