def get( url=None, headers=False, streaming=False, chunk_size=8 * 1024,conRangefp = None ): """Send an http GET request. :param str url: The URL to perform the GET request for. :param bool headers: Only return the http headers. :param bool streaming: Returns the response body in chunks via a generator. :param int chunk_size: The size in bytes of each chunk. """ response = None if streaming: import urllib2 req = urllib2.Request(url) if conRangefp: nfize = os.path.getsize(conRangefp) print conRangefp,nfize conRange = 'bytes=%d-'%(nfize) print conRange req.add_header('Range', conRange) while True: try: response = urlopen(req) break except Exception as e: print 'time out ...5s after retry...' time.sleep(5) else: while True: try: response = urlopen(url) break except Exception as e: print 'time out ...5s after retry...' time.sleep(5) if streaming: return stream_response(response, chunk_size) elif headers: # https://github.com/nficano/pytube/issues/160 return {k.lower(): v for k, v in response.info().items()} return ( response .read() .decode('utf-8') )
def get( url=None, headers=False, streaming=False, chunk_size=8 * 1024, ): """Send an http GET request. :param str url: The URL to perform the GET request for. :param bool headers: Only return the http headers. :param bool streaming: Returns the response body in chunks via a generator. :param int chunk_size: The size in bytes of each chunk. """ # https://github.com/nficano/pytube/pull/465 req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) response = urlopen(req) if streaming: return stream_response(response, chunk_size) elif headers: # https://github.com/nficano/pytube/issues/160 return {k.lower(): v for k, v in response.info().items()} return response.read().decode("utf-8")
def get( url=None, headers=False, streaming=False, chunk_size=8 * 1024, ): """Send an http GET request. :param str url: The URL to perform the GET request for. :param bool headers: Only return the http headers. :param bool streaming: Returns the response body in chunks via a generator. :param int chunk_size: The size in bytes of each chunk. """ response = urlopen(url) if streaming: return stream_response(response, chunk_size) elif headers: # https://github.com/nficano/pytube/issues/160 return {k.lower(): v for k, v in response.info().items()} return ( response .read() .decode('utf-8') )
def get( url=None, headers=False, streaming=False, chunk_size=8 * 1024, ): """Send an http GET request. :param str url: The URL to perform the GET request for. :param bool headers: Only return the http headers. :param bool streaming: Returns the response body in chunks via a generator. :param int chunk_size: The size in bytes of each chunk. """ req = Request(url) req.add_header( 'User-Agent', 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36' ) response = urlopen(req) if streaming: return stream_response(response, chunk_size) elif headers: # https://github.com/nficano/pytube/issues/160 return {k.lower(): v for k, v in response.info().items()} return (response.read().decode('utf-8'))
def get( url=None, headers=False, streaming=False, chunk_size=8 * 1024, ): """Send an http GET request. :param str url: The URL to perform the GET request for. :param bool headers: Only return the http headers. :param bool streaming: Returns the response body in chunks via a generator. :param int chunk_size: The size in bytes of each chunk. """ gcontext = ssl.SSLContext(ssl.PROTOCOL_TLSv1) response = urlopen(url, context=gcontext) if streaming: return stream_response(response, chunk_size) elif headers: # https://github.com/nficano/pytube/issues/160 return {k.lower(): v for k, v in response.info().items()} return (response.read().decode('utf-8'))
def chunk_generator_from_playlist(file_path=None, buffer_size=3): try: offset = 0 last_processed = -1 endlist = False # for playlists with m3u8 extensions m3u8_obj_outer = m3u8.load(file_path) base_uri = m3u8_obj_outer.base_uri base_audio = m3u8_obj_outer.data['playlists'][0]['uri'] audio_stream_url = base_uri + base_audio chunk = None chunk_index = 1 index = 0 while endlist is not True: m3u8_obj = m3u8.load(audio_stream_url) if last_processed < m3u8_obj.media_sequence: for i, segment in enumerate(m3u8_obj.data['segments']): response = urlopen(base_uri + segment['uri']) buff = response.read() if chunk_index == 1: chunk = AudioSegment.from_file(io.BytesIO(buff), "aac") chunk_index = chunk_index + 1 elif chunk_index < buffer_size: chunk = chunk + AudioSegment.from_file( io.BytesIO(buff), "aac") chunk_index = chunk_index + 1 elif chunk_index == buffer_size: chunk = chunk + AudioSegment.from_file( io.BytesIO(buff), "aac") audio_segment, offset = get_segment_chunk_from_pydub_chunk( chunk, offset, index) index = index + 1 yield audio_segment chunk_index = 1 last_processed = m3u8_obj.media_sequence if m3u8_obj.data['is_endlist']: endlist = True else: time.sleep(2) except KeyboardInterrupt: print('Interrupted Stopping Stream') os._exit(0)
def get_thumbnail(url): response = urlopen(url) return response
def get_parallel(url, on_progress): response = urlopen(url) return parallel_response(response, on_progress)
def chunk_generator_from_playlist(file_path=None, out_file_name=None, buffer_size=30000, download_audio=True): chunk = None try: offset = 0 last_processed = -1 endlist = False # for playlists with m3u8 extensions m3u8_obj_outer = m3u8.load(file_path) base_uri = m3u8_obj_outer.base_uri base_audio = m3u8_obj_outer.data['playlists'][0]['uri'] audio_stream_url = base_uri + base_audio chunk_index = 1 index = 0 unsent_segment = False while endlist is not True: try: m3u8_obj = m3u8.load(audio_stream_url) if last_processed < m3u8_obj.media_sequence: for i, segment in enumerate(m3u8_obj.data['segments']): response = urlopen(base_uri + segment['uri']) buff = response.read() new_chunk = AudioSegment.from_file( io.BytesIO(buff), "aac") if (chunk_index == 1) and (last_processed == -1): chunk = new_chunk else: chunk = chunk + new_chunk offset_in_milliseconds = offset * 1000 if (len(chunk) - (offset_in_milliseconds)) > buffer_size: segment_chunk = chunk[ offset_in_milliseconds:offset_in_milliseconds + buffer_size] audio_segment, offset = get_segment_chunk_from_pydub_chunk( segment_chunk, offset, index) index = index + 1 yield audio_segment chunk_index = chunk_index + 1 last_processed = m3u8_obj.media_sequence if m3u8_obj.data['is_endlist'] == True: endlist = True else: time.sleep(2) except Exception as e: print(e) endlist = True if (len(chunk) - (offset * 1000)) > 0: segment_chunk = chunk[offset * 1000:] audio_segment, offset = get_segment_chunk_from_pydub_chunk( segment_chunk, offset, index) index = index + 1 yield audio_segment except Exception as e: print(e) finally: if download_audio and (out_file_name is not None) and (chunk is not None): dir_path = "./output" if not os.path.exists(dir_path): os.makedirs(dir_path) chunk.export(dir_path + out_file_name + "-audio-out.wav", format="wav")