def do_GET(self): self.url = get_path(self.path)[1:] self.url_parts = url_parts = urlsplit(self.url) if not url_parts.netloc: self.send_error( 400, 'No host found, range fetch can not be finished, url: %s' % self.path) return if ('range=' in url_parts.query or 'live=1' in url_parts.query or 'range/' in url_parts.path): self.send_error( 500, 'Range request not be accepted, range fetch can not be finished, url: %s' % self.url) return request_range = self.headers.get('Range') if request_range: request_range = getbytes(request_range) range_start, range_end = [ int(n) if n else 0 for n in request_range.group(1, 2) ] else: range_start = range_end = 0 RangeFetch(self, range_start, range_end).fetch()
def l_assert(self): if self.url.startswith('http://'): self.url = self.url.replace('http://', 'https://', 1) self.url = get_location(self.url) if 'passport.weibo.com' in self.url: query = urlsplit(self.url).query self.url = parse_qs(query)['url'][0] return self.l_assert() # Mobile ver. if 'm.weibo.cn' in self.url: self.title_patterns = '"content2": "(.+?)",', '"status_title": "(.+?)",' self.url_patterns = '"stream_url_hd": "([^"]+)', '"stream_url": "([^"]+)' return if '/tv/v/' in self.url or 'fid=' not in self.url: self.title_patterns = 'class="info_txt \w+">([^<]+)</', 'class="WB_text \w+"[^>]+>\s*(?:<a[^<]+</a>)?\s*([^<]+)' self.url_patterns = 'video-sources\s*=\s*".+?(?:&\d+=http.+?)*&\d+=(http.+?[^=])(?:&\d+=)*&qType=\w+"', return self.title_patterns = '<title>([^<]+)</', self.url_patterns = r'(?:data-url|controls src)\s*=\s*[\"\']([^\"\']+)', html = get_content(self.url) url = match1(html, '"page_url": "([^"]+)') assert url, 'No url match' self.url = url self.l_assert()
def do_GET(self): self.url = get_path(self.path)[1:] self.url_parts = url_parts = urlsplit(self.url) if not url_parts.netloc: self.send_error(400, 'No host found, range fetch can not be finished, url: %s' % self.path) return if ('range=' in url_parts.query or 'live=1' in url_parts.query or 'range/' in url_parts.path): self.send_error(500, 'Range request not be accepted, range fetch can not be finished, url: %s' % self.url) return request_range = self.headers.get('Range') if request_range: request_range = getbytes(request_range) range_start, range_end = [int(n) if n else 0 for n in request_range.group(1, 2)] else: range_start = range_end = 0 RangeFetch(self, range_start, range_end).fetch()