aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/livestreamer/plugins/ownedtv.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/livestreamer/plugins/ownedtv.py')
-rw-r--r--src/livestreamer/plugins/ownedtv.py61
1 files changed, 32 insertions, 29 deletions
diff --git a/src/livestreamer/plugins/ownedtv.py b/src/livestreamer/plugins/ownedtv.py
index 5279777..36887f7 100644
--- a/src/livestreamer/plugins/ownedtv.py
+++ b/src/livestreamer/plugins/ownedtv.py
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
from livestreamer.compat import urllib
-from livestreamer.plugins import Plugin, PluginError, register_plugin
+from livestreamer.plugins import Plugin, PluginError, NoStreamsError, register_plugin
from livestreamer.stream import RTMPStream
from livestreamer.utils import urlget
@@ -36,10 +36,11 @@ class OwnedTV(Plugin):
def _get_channel_id(self, url):
data = urlget(url, opener=urlopener)
+
match = re.search(b'flashvars.config = "livecfg/(\d+)', data)
if match:
return int(match.group(1))
-
+
match = re.search(b"document.location.hash='/live/(\d+)'", data)
if match:
return int(match.group(1))
@@ -50,37 +51,39 @@ class OwnedTV(Plugin):
def _get_streams(self):
channelid = self._get_channel_id(self.url)
- streams = {}
-
- if channelid:
- data = urlget(self.ConfigURL.format(channelid))
- try:
- dom = xml.dom.minidom.parseString(data)
- except Exception as err:
- raise PluginError(("Unable to parse config XML: {0})").format(err))
+ if not channelid:
+ raise NoStreamsError(self.url)
- channels = dom.getElementsByTagName("channels")[0]
- clip = channels.getElementsByTagName("clip")[0]
+ data = urlget(self.ConfigURL.format(channelid))
- for item in clip.getElementsByTagName("item"):
- base = item.getAttribute("base")
- if not base:
- continue
+ try:
+ dom = xml.dom.minidom.parseString(data)
+ except Exception as err:
+ raise PluginError(("Unable to parse config XML: {0})").format(err))
- if base[0] == "$":
- ref = re.match("\${(.+)}", base).group(1)
- base = self.CDN[ref]
-
- for streamel in item.getElementsByTagName("stream"):
- name = streamel.getAttribute("label").lower().replace(" ", "_")
- playpath = streamel.getAttribute("name")
-
- if not name in streams:
- streams[name] = RTMPStream({
- "rtmp": ("{0}/{1}").format(base, playpath),
- "live": 1
- })
+ streams = {}
+ channels = dom.getElementsByTagName("channels")[0]
+ clip = channels.getElementsByTagName("clip")[0]
+
+ for item in clip.getElementsByTagName("item"):
+ base = item.getAttribute("base")
+ if not base:
+ continue
+
+ if base[0] == "$":
+ ref = re.match("\${(.+)}", base).group(1)
+ base = self.CDN[ref]
+
+ for streamel in item.getElementsByTagName("stream"):
+ name = streamel.getAttribute("label").lower().replace(" ", "_")
+ playpath = streamel.getAttribute("name")
+
+ if not name in streams:
+ streams[name] = RTMPStream({
+ "rtmp": ("{0}/{1}").format(base, playpath),
+ "live": 1
+ })
return streams