def browse_episodes(self, skip=0):
     self.ensure_authorized()
     doc = self.fetch(self.BASE_URL + "/browse.php", {'o': skip})
     with Timer(logger=self.log, name='Parsing episodes list'):
         body = doc.find('div', {'class': 'content_body'})
         series_titles = body.find('span', {'style': 'font-family:arial;.*?'}).strings
         titles = body.find('span', {'class': 'torrent_title'}).strings
         episode_titles, original_titles = zip(*[parse_title(t) for t in titles])
         release_dates = body.find('b').strings[1::3]
         release_dates = [str_to_date(d, '%d.%m.%Y %H:%M') for d in release_dates]
         selected_page = body.find('span', {'class': 'd_pages_link_selected'}).text
         last_page = body.find('a', {'class': 'd_pages_link'}).last.text
         self.has_more = int(selected_page) < int(last_page)
         icons = body.find('img', {'class': 'category_icon'}).attrs('src')
         onclicks = body.find('a', {'href': 'javascript:{};'}).attrs('onClick')
         series_ids, season_numbers, episode_numbers = zip(*[parse_onclick(s or "") for s in onclicks])
         posters = [poster_url(i[0][18:-5], i[1]) for i in zip(icons, season_numbers)]
         icons = [self.BASE_URL + url for url in icons]
         images = [url.replace('/icons/cat_', '/posters/poster_') for url in icons]
         data = zip(series_ids, series_titles, season_numbers,
                    episode_numbers, episode_titles, original_titles, release_dates, icons, posters, images)
         episodes = [Episode(*e) for e in data if e[0]]
         self.log.info("Got %d episode(s) successfully" % (len(episodes)))
         self.log.debug(repr(episodes).decode("unicode-escape"))
     return episodes
 def get_series_episodes(self, series_id):
     doc = self._get_series_doc(series_id)
     episodes = []
     with Timer(logger=self.log, name='Parsing episodes of series with ID %d' % series_id):
         body = doc.find('div', {'class': 'mid'})
         series_title, original_title = parse_title(body.find('h1').first.text)
         image = self.BASE_URL + body.find('img').attr('src')
         icon = image.replace('/posters/poster_', '/icons/cat_')
         episode_divs = body.find('div', {'class': 't_row.*?'})
         series_poster = None
         for ep in episode_divs:
             title_td = ep.find('td', {'class': 't_episode_title'})
             episode_title, orig_title = parse_title(title_td.text)
             onclick = title_td.attr('onClick')
             release_date = ep.find('span', {'class': 'micro'}).find('span')[0].text
             release_date = str_to_date(release_date, '%d.%m.%Y %H:%M') if release_date else None
             _, season_number, episode_number = parse_onclick(onclick)
             poster = poster_url(original_title, season_number)
             if not series_poster:
                 series_poster = poster
             episode = Episode(series_id, series_title, season_number, episode_number, episode_title,
                               orig_title, release_date, icon, poster, image)
             episodes.append(episode)
         self.log.info("Got %d episode(s) successfully" % (len(episodes)))
         self.log.debug(repr(episodes).decode("unicode-escape"))
     return episodes
 def browse_episodes(self, skip=0):
     self.ensure_authorized()
     self.check_for_new_series()
     page = (skip or 0) / 10 + 1
     only_favorites = plugin.get_setting('check_only_favorites', bool)
     doc = self._get_new_episodes_doc(page, only_favorites)
     with Timer(logger=self.log, name="Parsing episodes list"):
         body = doc.find('div', {'class': 'content history'})
         series_titles = body.find('div', {'class': 'name-ru'}).strings
         episode_titles = body.find('div', {'class': 'alpha'}).strings[::2]
         original_episode_titles = body.find('div', {'class': 'beta'}).strings[::2]
         release_dates = body.find('div', {'class': 'alpha'}).strings[1::2]
         release_dates = [str_to_date(r_d.split(' ')[-1], '%d.%m.%Y') for r_d in release_dates]
         paging = doc.find('div', {'class': 'pagging-pane'})
         selected_page = paging.find('a', {'class': 'item active'}).text
         last_page = paging.find('a', {'class': 'item'}).last.text
         self.has_more = int(selected_page) < int(last_page)
         data_codes = body.find('div', {'class': 'haveseen-btn.*?'}).attrs('data-code')
         series_ids, season_numbers, episode_numbers = zip(*[parse_data_code(s or "") for s in data_codes])
         posters = [img_url(i, y, z) for i, y, z in zip(series_ids, season_numbers, episode_numbers)]
         images = [img_url(series_id) for series_id in series_ids]
         icons = [img_url(series_id).replace('/poster.jpg', '/image.jpg') for series_id in series_ids]
         data = zip(series_ids, series_titles, season_numbers, episode_numbers, episode_titles, original_episode_titles, release_dates, icons, posters, images)
         episodes = [Episode(*e) for e in data if e[0]]
         self.log.info("Got %d episode(s) successfully" % (len(episodes)))
         self.log.debug(repr(episodes).decode("unicode-escape"))
     return episodes
 def get_series_episodes(self, series_id, series_alias=None):
     if not series_alias:
         series_alias = self.shows_ids_dict[int(series_id)]
     doc = self._get_episodes_doc(series_alias)
     episodes = []
     with Timer(logger=self.log, name='Parsing episodes of series with ID %s' % series_alias):
         title = doc.find('div', {'class': 'header'})
         series_title = title.find('h2', {'class': 'title-en'}).text
         image = img_url(series_id)
         icon = image.replace('/poster.jpg', '/image.jpg')
         episodes_data = doc.find('div', {'class': 'series-block'})
         seasons = episodes_data.find('div', {'class': 'serie-block'})
         year = seasons.last.find('div', {'class': 'details'}).text
         year = re.search('Год: (\d{4})', year)
         year = year.group(1) if year else None
         if year:
             series_title += " (%s)" % year
         for s in seasons:
             fullseason = s.find('div', {'class': 'movie-details-block'})
             inactive = fullseason.find('div', {'class': 'external-btn inactive'})
             if not inactive:
                 button = fullseason.find('div', {'class': 'haveseen-btn.*?'}).attr('data-code')
                 if button:
                     series_id, season_number, episode_number = parse_data_code(button)
                     episode_title = lang(40424) % season_number
                     orig_title = ""
                     release_date=str_to_date("17.09.1989", "%d.%m.%Y")
                     poster = img_url(series_id, season_number, episode_number)
                     episode = Episode(series_id, series_title, season_number, episode_number, episode_title, orig_title, release_date, icon, poster, image)
                     episodes.append(episode)
             episodes_table = s.find('table', {'class': 'movie-parts-list'})
             if not episodes_table.attrs('id')[0]:
                 self.log.warning("No ID for table. New season of {0}".format(series_title))
                 continue
             if episodes_table.attrs('id')[0][-6:] == u'999999':
                 pass
                 # IS SPECIAL SEASON
             titles = episodes_table.find('td', {'class': 'gamma.*?'})
             orig_titles = titles.find('span').strings
             episode_titles = [t.split('\n')[0].strip().replace(u"й", u"й").replace(u"И", u"Й") for t in titles.strings]
             #episode_dates = [str(d.split(':')[-1])[1:] for d in episodes_table.find('td', {'class': 'delta'}).strings]
             episode_dates = []
             for d in episodes_table.find('td', {'class': 'delta'}).strings:
                 d = d.split(':')
                 d = d[-1]
                 d = d[1:]
                 d = d.replace('янв ', '01.01.').replace('фев ', '01.02.').replace('мар ', '01.03').replace('апр','01.04')\
                     .replace('май','01.05').replace('июн','01.06').replace('июл','01.07').replace('авг','01.08').replace('сен','01.09')\
                     .replace('окт','01.10').replace('ноя','01.11').replace('дек','01.12')
                 it = str(d)
                 episode_dates.append(it)
             onclick = episodes_table.find('div', {'class': 'haveseen-btn.*?'}).attrs('data-code')
             for e in range(len(onclick)):
                 data_code = onclick[e]
                 if not data_code:
                     continue
                 _, season_number, episode_number = parse_data_code(onclick[e])
                 episode_title = episode_titles[e]
                 orig_title = orig_titles[e]
                 release_date = str_to_date(episode_dates[e], "%d.%m.%Y")
                 poster = img_url(series_id, season_number, episode_number)
                 episode = Episode(series_id, series_title, season_number, episode_number, episode_title, orig_title, release_date, icon, poster, image)
                 episodes.append(episode)
         self.log.info("Got %d episode(s) successfully" % (len(episodes)))
         self.log.debug(repr(episodes).decode("unicode-escape"))
     return episodes