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