__author_info = "Written by Antonio Ospite http://ao2.it"
import os
+import re
import sys
import xml.etree.ElementTree as etree
import urllib2
import struct
import tempfile
from optparse import OptionParser
+from urlparse import urlparse, urlunparse
def get_chunk_data(data):
out_file.write(struct.pack('<L', data_len))
-def get_manifest(base_url, dest_dir=tempfile.gettempdir()):
+def get_manifest(url, dest_dir=tempfile.gettempdir()):
"""Returns the manifest and the new URL if this is changed"""
if os.path.exists(dest_dir) == False:
os.mkdir(dest_dir, 0755)
- if base_url.startswith('http://'):
+ # Remove the querystring if present
+ manifest_url = urlunparse(urlparse(url)._replace(query=''))
- manifest_url = base_url
- if not manifest_url.lower().endswith(('/manifest', '.ismc', '.csm')):
- manifest_url += '/Manifest'
+ if not manifest_url.lower().endswith(('/manifest', '.ismc', '.csm')):
+ manifest_url += '/Manifest'
+
+ if manifest_url.startswith('http://'):
response = urllib2.urlopen(manifest_url)
data = response.read()
- manifest_path = os.path.join(dest_dir, 'Manifest')
- f = open(manifest_path, "w")
+ local_manifest_path = os.path.join(dest_dir, 'Manifest')
+
+ f = open(local_manifest_path, "w")
f.write(data)
f.close()
else:
- manifest_path = base_url
+ local_manifest_path = url
- manifest = etree.parse(manifest_path)
+ manifest = etree.parse(local_manifest_path)
version = manifest.getroot().attrib['MajorVersion']
if version != "2":
try:
# if some intermediate client Manifest is used, like in Rai Replay
clip = manifest.find("Clip")
- actual_manifest_url = clip.attrib["Url"]
- base_url = actual_manifest_url.lower().replace("/manifest", "")
+ manifest_url = clip.attrib["Url"]
except:
pass
+ manifest_pattern = re.compile("/manifest$", re.IGNORECASE)
+ base_url = manifest_pattern.sub("", manifest_url)
+
return (manifest, base_url)