123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- #!/usr/bin/env python
- # coding=utf8
- #
- # This file is part of PlayStream - enigma2 plugin to play video streams from various sources
- # Copyright (c) 2016 ivars777 (ivars777@gmail.com)
- # Distributed under the GNU GPL v3. For full terms see http://www.gnu.org/licenses/gpl-3.0.en.html
- #
- try:
- import json
- except:
- import simplejson as json
- import requests
- import datetime, re, sys,os
- from collections import OrderedDict
- import ssl
- if "_create_unverified_context" in dir(ssl):
- ssl._create_default_https_context = ssl._create_unverified_context
-
- from SourceBase import SourceBase
-
- import resolver
- try:
- import util
- except:
- sys.path.insert(0,'..')
- import util
-
- headers2dict = lambda h: dict([l.strip().split(": ") for l in h.strip().splitlines()])
- import HTMLParser
- h = HTMLParser.HTMLParser()
-
- class Source(SourceBase):
-
- def __init__(self, country="lv",cfg_path=None):
- self.name = "enigma2"
- self.title = "Engima2"
- self.img = "enigma2.png"
- self.desc = "Get streams from engima2 sat receiver"
- self.headers = headers2dict("""
- User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:46.0) Gecko/20100101 Firefox/46.0
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
- Accept-Language: en-US,en;q=0.5
- """)
- #self.url = "http://login.tvplayhome.lt:8081/sb/public/"
- cur_directory = os.path.dirname(os.path.abspath(__file__))
- if not cfg_path: cfg_path = cur_directory
- self.config_file = os.path.join(cfg_path,self.name+".cfg")
- self.options = OrderedDict([("host", "localhost"), ("user",""),("password","")])
- self.options_read()
-
- if self.options["user"]:
- self.url = "http://%s:%s@%s/api/" % (self.options["user"], self.options["password"],self.options["host"])
- else:
- self.url = "http://%s/api/" % (self.options["host"])
-
- ######### Entry point ########
- def get_content(self, data):
- print "[enigma2] get_content:", data
- source, data, path, plist, clist, params, qs = self.parse_data(data)
- content = []
- content.append(("..return", "back","back.png","Return back"))
-
- if clist=="home":
- data3 = "getcurrent"
- r2 = self.call(data3)
- event = r2["now"]
- title, img, desc = self.get_title_desc(event)
- content.append(("Current stream: "+title, self.name+"::"+"streamcurrent", img, desc))
- r = self.call("bouquets?stype=tv")
- for item in r["bouquets"]:
- title = item[1]
- data2 = "getservices?sRef=%s" % item[0]
- #data2 = "epgbouquet?bRef=%s" % item[1]
- content.append((title, self.name+"::"+data2, self.img, title))
- return content
-
- elif clist == "getservices":
- r = self.call(data)
- data3 = data.replace("getservices?sRef", "epgbouquet?bRef")
- r2 = self.call(data3)
- for item in r["services"]:
- title = item["servicename"]
- data2 = "stream?ref=%s&name=%s" % (item["servicereference"], title)
- img = self.img
- desc = title
- for item2 in r2["events"]:
- if item2["sref"] == item["servicereference"]:
- title, img, desc = self.get_title_desc(item2)
- break
- content.append((title,self.name+"::"+data2, img,desc))
- return content
-
- ### kaut kas neparedzets ###
- else:
- return content
-
- def get_title_desc(self, event):
- t1 = event["begin_timestamp"]
- t2 = event["begin_timestamp"] + event["duration_sec"]
- t1 = datetime.datetime.fromtimestamp(t1).strftime("%H:%M")
- t2 = datetime.datetime.fromtimestamp(t2).strftime("%H:%M")
- title = "%s - %s [%s-%s]" % (event["sname"], event["title"], t1, t2)
- desc = event["shortdesc"]
- if event["longdesc"]:
- desc += "\n" + event["longdesc"]
- img = event["sref"][:-1].replace(":", "_") + ".png"
- img = self.url.replace("/api/", "/picon/") + img
- return title, img, desc
-
-
- def is_video(self,data):
- source,data,path,plist,clist,params,qs = self.parse_data(data)
- if clist in ("stream", "streamcurrent"):
- return True
- else:
- return False
-
- def call(self, data,params=None,headers=None,lang=""):
- if not headers: headers = self.headers
- url = self.url+data
- r = requests.get(url,headers = headers)
- result = json.loads(r.content)
- #result = self._http_request(url,params,headers=headers)
- return result
-
- def get_streams(self,data):
- print "[enigma2] get_streams:", data
- if not self.is_video(data):
- return []
- source,data,path,plist,clist,params,qs = self.parse_data(data)
- if "streamcurrent" in data:
- data3 = "getcurrent"
- r2 = self.call(data3)
- event = r2["now"]
- data = data.replace("streamcurrent", "streamcurrent.m3u")
- else:
- data3 = data.replace("stream?ref=","epgservicenow?sRef=")
- r2 = self.call(data3)
- event = r2["events"][0]
- data = data.replace("stream", "stream.m3u")
- title, img, desc = self.get_title_desc(event)
-
- r = self._http_request(self.url+data)
- m = re.search("(http(s)*:.+)", r)
- if not m:
- raise Exception("No streams found!")
- data2 = m.group(1)
- #data2 = "http://videolink"
- stream = util.item()
- stream["name"] = title
- stream["url"] = data2
- stream["img"] = img
- stream["desc"] = desc
- stream["resolver"] = "enigma2"
- return [stream]
-
-
- if __name__ == "__main__":
- sys.path.insert(0, os.path.dirname(os.path.dirname(__file__)))
- import run
- source = Source()
- data= sys.argv[1] if len(sys.argv)>1 else source.name+"::home"
- if len(sys.argv) > 2:
- run.run_cli(source, data)
- else:
- run.run(source, data)
- sys.exit()
|