123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475 |
- # coding: utf-8
- # Copyright 2014 Globo.com Player authors. All rights reserved.
- # Use of this source code is governed by a MIT License
- # license that can be found in the LICENSE file.
-
- import sys
- PYTHON_MAJOR_VERSION = sys.version_info
-
- import os
- import posixpath
-
- try:
- import urlparse as url_parser
- import urllib2
- urlopen = urllib2.urlopen
- except ImportError:
- import urllib.parse as url_parser
- from urllib.request import urlopen as url_opener
- urlopen = url_opener
-
-
- from m3u8.model import M3U8, Playlist, IFramePlaylist, Media, Segment
- from m3u8.parser import parse, is_url
-
- __all__ = ('M3U8', 'Playlist', 'IFramePlaylist', 'Media',
- 'Segment', 'loads', 'load', 'parse')
-
- def loads(content):
- '''
- Given a string with a m3u8 content, returns a M3U8 object.
- Raises ValueError if invalid content
- '''
- return M3U8(content)
-
- def load(uri):
- '''
- Retrieves the content from a given URI and returns a M3U8 object.
- Raises ValueError if invalid content or IOError if request fails.
- '''
- if is_url(uri):
- return _load_from_uri(uri)
- else:
- return _load_from_file(uri)
-
- # Support for python3 inspired by https://github.com/szemtiv/m3u8/
- def _load_from_uri(uri):
- resource = urlopen(uri)
- base_uri = _parsed_url(_url_for(uri))
- if PYTHON_MAJOR_VERSION < (3,):
- content = _read_python2x(resource)
- else:
- content = _read_python3x(resource)
- return M3U8(content, base_uri=base_uri)
-
- def _url_for(uri):
- return urlopen(uri).geturl()
-
- def _parsed_url(url):
- parsed_url = url_parser.urlparse(url)
- prefix = parsed_url.scheme + '://' + parsed_url.netloc
- base_path = posixpath.normpath(parsed_url.path + '/..')
- return url_parser.urljoin(prefix, base_path)
-
- def _read_python2x(resource):
- return resource.read().strip()
-
- def _read_python3x(resource):
- return resource.read().decode(resource.headers.get_content_charset(failobj="utf-8"))
-
- def _load_from_file(uri):
- with open(uri) as fileobj:
- raw_content = fileobj.read().strip()
- base_uri = os.path.dirname(uri)
- return M3U8(raw_content, base_uri=base_uri)
|