def _get_sources(self): params = {'id': self.url, 'server': '33', 'ts': self.ts} def get_stream_url(base_url, params, DD=None): params['_'] = int(generate_(params, DD=DD)) data = util.get_json(base_url, params=params) return data['target'] try: url = get_stream_url(self._base_url, params) except KeyError: try: del params['_'] del params['ts'] # I don't know if this is reliable or not. # For now it works. data = util.get_json('http://9anime.cloud/ajax/episode/info', params=params) url = data['target'] except Exception as e: raise AnimeDLError( '9anime probably changed their API again. Check the issues' 'here https://github.com/vn-ki/anime-downloader/issues. ' 'If it has not been reported yet, please open a new issue' ) from e return [ ('rapidvideo', url), ]
def __init__(self, url=None, quality='720p', fallback_qualities=None, _skip_online_data=False, subbed=None): self.url = url self.subbed = subbed if fallback_qualities is None: fallback_qualities = ['720p', '480p', '360p'] self._fallback_qualities = [ q for q in fallback_qualities if q in self.QUALITIES ] if quality in self.QUALITIES: self.quality = quality else: raise AnimeDLError('Quality {0} not found in {1}'.format( quality, self.QUALITIES)) if not _skip_online_data: logger.info('Extracting episode info from page') self._episode_urls = self.get_data() self._len = len(self._episode_urls)
def __init__(self, url, quality='720p', parent=None, ep_no=None): if quality not in self.QUALITIES: raise AnimeDLError('Incorrect quality: "{}"'.format(quality)) self.ep_no = ep_no self.url = url self.quality = quality self._parent = parent self._sources = None self.pretty_title = '{}-{}'.format(self._parent.title, self.ep_no) logging.debug("Extracting stream info of id: {}".format(self.url)) # TODO: New flag: online_data=False try: self.get_data() # Just to verify the source is acquired self.source().stream_url except NotFoundError: # Issue #28 qualities = copy.copy(self.QUALITIES) qualities.remove(self.quality) for quality in qualities: logging.warning('Quality {} not found. Trying {}.'.format( self.quality, quality)) self.quality = quality try: self.get_data() self.source().stream_url # parent.quality = self.quality break except NotFoundError: # Issue #28 qualities.remove(self.quality) pass
def getData(self): params = {'id': self.episode_id, 'server': '33', 'ts': self.ts} params['param_'] = int(generate_(params)) logging.debug('API call params: {}'.format(params)) url = self._base_url.format(**params) data = util.get_json(url) try: url = data['target'] except KeyError as e: raise AnimeDLError( '9anime probably changed their API again. Check the issues' 'here https://github.com/vn-ki/anime-downloader/issues. ' 'If it has not been reported yet, please open a new issue' ) from e headers = desktop_headers headers['referer'] = 'www5.9anime.is' data = util.get_stream_url_rapidvideo(url, self.quality, headers) self.stream_url = data['stream_url'] self.title = data['title'] self.image = data['image']
def __init__(self, episode_id, quality='720p', parent=None, ep_no=None): if quality not in self.QUALITIES: raise AnimeDLError('Incorrect quality: "{}"'.format(quality)) self.ep_no = ep_no self.episode_id = episode_id self.quality = quality self._parent = parent self.pretty_title = '{}-{}'.format(self._parent.title, self.ep_no) logging.debug("Extracting stream info of id: {}".format(self.episode_id)) try: self.getData() except NotFoundError: for quality in parent.QUALITIES: parent.QUALITIES.remove(self.quality) logging.warning('Quality {} not found. Trying {}.'.format(self.quality, quality)) self.quality = quality try: self.getData() parent.quality = self.quality break except NotFoundError: pass
def _scrape_episode(self, response): raise AnimeDLError( 'Kissanime is not currently working properly. Try a different provider. ' 'Check the issues here https://github.com/vn-ki/anime-downloader/issues. ' ) rapid_re = re.compile(r'iframe.*src="https://(.*?)"') rapid_url = rapid_re.findall(response.text)[0] return [('rapidvideo', rapid_url)]
def __init__(self, url, quality='720p'): self.url = url if quality in self.QUALITIES: self.quality = quality else: raise AnimeDLError('Quality {0} not found in {1}'.format( quality, self.QUALITIES)) logging.info('Extracting episode info from page') self.getEpisodes()
def __init__(self, url=None, quality='720p', _skip_online_data=False): self.url = url if quality in self.QUALITIES: self.quality = quality else: raise AnimeDLError('Quality {0} not found in {1}'.format(quality, self.QUALITIES)) if not _skip_online_data: logging.info('Extracting episode info from page') self.getEpisodes()
def __init__(self, url=None, quality='720p', fallback_qualities=['720p', '480p', '360p'], _skip_online_data=False): self.url = url self._fallback_qualities = fallback_qualities if quality in self.QUALITIES: self.quality = quality else: raise AnimeDLError( 'Quality {0} not found in {1}'.format(quality, self.QUALITIES)) if not _skip_online_data: logging.info('Extracting episode info from page') self.get_data()
def _get_sources(self): # Scrape episode page to get link for download page soup = helpers.soupify(helpers.get(self.url)) dl_page_url = [] server = self.config.get('server', 'cdn') if server == 'cdn': # TODO: This should be a extractor class for element in soup.find_all( 'a', href=re.compile('https://vidstreaming\.io')): source_url = element.get('href') logger.debug('%s' % (source_url)) dl_page_url = source_url # Scrape download page for default hoster (cdnfile) file link soup_cdnfile = helpers.soupify(helpers.get(dl_page_url)) cdnfile_url = [] if soup_cdnfile.find_all( 'a', href=re.compile('https://.*\.cdnfile\.info.*' + self.quality)): for element in soup_cdnfile.find_all( 'a', href=re.compile('https://.*\.cdnfile\.info.*' + self.quality)): extractor_class = 'no_extractor' source_url = element.get('href') logger.debug('%s: %s' % (extractor_class, source_url)) cdnfile_url.append(( extractor_class, source_url, )) return cdnfile_url elif soup_cdnfile.find_all( 'a', href=re.compile('https://.*\.cdnfile\.info.*' + 'orginalP.*')): for element in soup_cdnfile.find_all( 'a', href=re.compile('https://.*\.cdnfile\.info.*' + 'orginalP.*')): extractor_class = 'no_extractor' source_url = element.get('href') logger.debug('%s: %s' % (extractor_class, source_url)) cdnfile_url.append(( extractor_class, source_url, )) return cdnfile_url else: raise AnimeDLError( 'No supported download servers found. Try a different provider. ' 'Check the issues here https://github.com/vn-ki/anime-downloader/issues. ' ) else: soup = helpers.soupify(helpers.get(self.url)) extractors_url = [] for element in soup.select('.anime_muti_link > ul > li'): extractor_class = element.get('class')[0] source_url = element.a.get('data-video') logger.debug('%s: %s' % (extractor_class, source_url)) # use mp4upload as source if extractor_class == 'mp4': extractor_class = 'mp4upload' else: raise AnimeDLError( 'No supported download servers found. Try a different provider. ' 'Check the issues here https://github.com/vn-ki/anime-downloader/issues. ' ) logger.debug('%s: %s' % (extractor_class, source_url)) extractors_url.append(( extractor_class, source_url, )) return extractors_url