#!/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 urllib2, urllib
import datetime, re, sys
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
from SourceBase import SourceBase
import util
API_URL = 'http://replay.lsm.lv/%s/'
headers2dict = lambda h: dict([l.strip().split(": ") for l in h.strip().splitlines()])
headers0 = headers2dict("""
User-Agent: Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
""")
import HTMLParser
h = HTMLParser.HTMLParser()
from YouTubeVideoUrl import YouTubeVideoUrl
class Source(SourceBase):
def __init__(self,country="lv",cfg_path=None):
self.name = "replay"
self.title = "Replay.lv (LTV)"
self.img = "http://replay.lsm.lv/apple-touch-icon.png"
self.desc = "LSM replay.lv satura skatīšanās"
self.country=country
self.pic_size = "327x250" #"1000x765"
def get_content(self, data):
print "[replay] get_content:", data
if "::" in data:
data = data.split("::")[1]
path = data.split("?")[0]
clist = path.split("/")[0]
params = data[data.find("?"):] if "?" in data else ""
qs = dict(map(lambda x:x.split("="),re.findall("\w+=\w+",params)))
lang = qs["lang"] if "lang" in qs else self.country
content=[]
content.append(("..return", "back","","Return back"))
if clist=="home":
content.extend([
("Live streams", "replay::tiesraide","","TV live streams"),
("Search LV", "replay::search/?term={0}&lang=lv","","Search content LV"),
("Last videos LV", "replay::visi/jaunakie/?source=ltv&lang=lv","","Last aired videos LV"),
("Last videos by categories LV", "replay::kategorijas/?lang=lv","","Last videos by categories LV"),
("All programs LV", "replay::raidijumi/?type=video","","All programs by name LV"),
("Programs by categories LV", "replay::categories?lang=lv","","All programs by categories LV"),
#("Channels", "replay::channels?language=%s"%self.country,"","TV channels"),
("Videos by popularity LV", "replay::visi/popularie/?source=ltv&lang=lv","","Programs by popularity"),
("Search RU", "replay::search/?term={0}&lang=ru","","Search content RU"),
("Last videos RU", "replay::vse/novie/?source=ltv&lang=ru","","Last aired videos RU"),
("Last videos by categories RU", "replay::kategorijas/?lang=ru","","Last videos by categories RU"),
("All programs RU", "replay::peredachi/?lang=ru&type=video","","All programs by name"),
("Programs by categories RU", "replay::categories?lang=ru","","Programs by categories RU")
])
return content
### programmu kategorijas ###
elif clist=="categories":
url = "http://replay.lsm.lv/lv/raidijumi/?lang=lv&type=video" if lang =="lv" else "http://replay.lsm.lv/ru/peredachi/?lang=ru&type=video"
r = self._http_request(url)
for item in re.findall(r'([^<]+)\t', r):
title = item[1]
data2 = url.split("?")[0]+item[0]
data2 = data2.replace(API_URL%lang,"")
img = ""
desc = title
content.append((title,self.name+"::"+data2,img,desc))
return content
### jaunāko raidijumu kategorijas ###
elif clist=="kategorijas":
url = "http://replay.lsm.lv/lv/" if lang =="lv" else "http://replay.lsm.lv/ru/"
r = self._http_request(url)
for item in re.findall(r'.+?.+?([^<]+)', r, re.DOTALL):
title = item[2]
data2 = "kategorija/%s/?lang=%s"%(item[1],item[0])
img = ""
desc = title
content.append((title,self.name+"::"+data2,img,desc))
return content
### Tiešraides kanānālu saraksts
elif path=="tiesraide":
url = "http://replay.lsm.lv/styles/main.css"
r= self._http_request(url)
for item in re.findall(r'channel-logo--(\w+)\{background-image:url\("([^"]+\.png)"', r):
ch = item[0]
title = ch.upper()
data2 = "tiesraide/%s/"%ch
img = "http://replay.lsm.lv"+item[1]
veids = "video "if "tv" in ch else "audio"
desc = title+" tiesraide (%s)"%veids
content.append((title,self.name+"::"+data2,img,desc))
return content
### Kanāla tiesraide
elif clist == "tiesraide" and "/" in data:
ch = data.split('/')[1]
veids = "video" if "tv" in ch else "audio"
#url = "http://replay.lsm.lv/lv/tiesraide/ltv7/"
url = "http://replay.lsm.lv/lv/tiesraide/%s/"%ch
r= self._http_request(url)
m = re.search('%s/">.+?([^<]+)+
.*?'%ch, r, re.DOTALL)
tagad = m.group(1).strip() if m else ""
laiks = m.group(2).strip() if m else ""
laiks = h.unescape(laiks).encode("utf8")
m = re.search("([^<]+)
", r)
title = m.group(1).strip() if m else path.split("/")[1].upper()
title = "%s - %s (%s)"%(title,tagad,laiks)
if veids == "video":
m = re.search('(.+?)', r2, re.DOTALL):
for item in re.findall('itemprop="image" data-image="([^"]+)".+?', r):
title = item[2]
data2 = item[1].replace("/%s/"%lang,"")+"?lang=%s"%lang
img = "http://replay.lsm.lv" + item[0]
desc = title
content.append((title,self.name+"::"+data2,img,desc))
#for item in re.findall('itemprop="image" data-image="([^"]+)".+?.*?.+?datetime="([^"]+)" class="thumbnail__date ">([^<]+)', r2):
for item in re.findall('itemprop="image" data-image="([^"]+)".+? class="icon-(ltv|lr).+?.*?.+?datetime="([^"]+)" class="thumbnail__date ">([^<]+)', r):
if item[1]=="lr":continue
title = "%s - %s (%s)"%(item[3],item[5],item[7])
data2 = item[4].replace("/%s/"%lang,"")+"?lang=%s"%lang
img = item[0].replace("https:","http:")
desc = title
content.append((title,self.name+"::"+data2,img,desc))
### Raidijumi (programmas) ###
elif clist in ( "raidijumi","peredachi"):
for item in re.findall('([^<]+)', r):
#for item in re.findall('([^<]+)', r):
title = item[1]
data2 = item[0].replace("/%s/"%lang,"")+"?lang=%s"%lang
img = ""
desc = ""
content.append((title,self.name+"::"+data2,img,desc))
### Raidijuma ieraksti speciālie###
elif clist in ( "visi","vse",):
for item in re.findall('(?i).+>([^<]+).*.+>([^<]+)', r):
title = item[3]
data2 = item[0].replace("/%s/"%lang,"")+"?lang=%s"%lang
img = item[1].replace("https:","http:")
desc = "%s - %s\n%s"%(item[5],item[2],item[4])
content.append((title,self.name+"::"+data2,img,desc))
### Raidijuma ieraksti (videos)
elif clist in ("raidijums","peredacha","kategorija"):
for item in re.findall('([^<]+).+">([^<]+).+class="thumbnail__date ">([^"]+)', r):
title = item[3]
data2 = item[0].replace("/%s/"%lang,"")+"?lang=%s"%lang
img = item[1].replace("https:","http:")
desc = "%s - %s"%(item[4],item[2])
content.append((title,self.name+"::"+data2,img,desc))
### Ieraksts (video) ###
elif clist in ("ieraksts","statja"):
m = re.search('src="([^"]+)">', r)
if m:
url2 = m.group(1)
headers = headers2dict("""
User-Agent: Mozilla/5.0 (Linux; U; Android 4.4.4; Nexus 5 Build/KTU84P) AppleWebkit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30
Referer: http://replay.lsm.lv/lv/ieraksts/ltv/70398/tiesa-runa.-lielbritanija-gatavojas-referendumam-par-tu/
""")
r2 = self._http_request(url2,headers=headers)
m = re.search('"file":"([^"]+)', r2)
if m:
data2 = m.group(1).replace("\\","")
m = re.search('"idstring":"([^"]+)', r2)
title = m.group(1) if m else ""
title = title.decode("unicode-escape").encode("utf8")
title = title.replace("\n","")
img = ""
desc = ""
if "youtube" in data2:
video_id = re.search(r"/watch\?v=([^&]+)",data2).group(1)
data2 = YouTubeVideoUrl().extract(video_id)
if not data2:
content=("No stream found %s"%data,"","","No stream found")
return content
content =(title,data2,img,desc)
return content
content=("No stream found %s"%data,"","","No stream found")
return content
m = re.search(r'href="\?([^"]+)" class=" paging__next', r)
if m:
page = int(re.search("page=(\d+)",m.group(1)).group(1))
if "page="in data:
data2 = re.sub("page=\d+","page=%i"%page,data)
else:
if "?" in data:
data2 =data+"&page=%i"%page
else:
data2 =data+"?page=%i"%page
content.append(("Next page",self.name+"::"+data2,"","Next page"))
return content
def is_video(self,data):
if "::" in data:
data = data.split("::")[1]
cmd = data.split("/")
if cmd[0] in ("ieraksts","statja"):
return True
elif cmd[0]=="tiesraide" and len(cmd)>1:
return True
else:
return False
def call(self, data,headers=headers0,lang=""):
if not lang: lang = self.country
url = API_URL%lang + data
#print "[TVPlay Api] url: ",url
result = []
content = self._http_request(url,headers=headers0)
return content
if __name__ == "__main__":
country= "lv"
c = Source(country)
if len(sys.argv)>1:
data= sys.argv[1]
else:
data = "home"
content = c.get_content(data)
for item in content:
print item
#cat = api.get_categories(country)
#chan = api.get_channels("lv")
#prog = api.get_programs(channel=6400)
#prog = api.get_programs(category=55)
#seas = api.get_seasons(program=6453)
#str = api.get_streams(660243)
#res = api.get_videos(802)
#formats = api.getAllFormats()
#det = api.detailed("1516")
#vid = api.getVideos("13170")
pass