Python Forum
Python Assistance Kodi Addon - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Python Assistance Kodi Addon (/thread-4387.html)



Python Assistance Kodi Addon - yuljk - Aug-12-2017

Hi guys - I need some help with a Kodi addon (UKTVNOW) - I'd like to modify the addon so that it no longer prompts everytime I select a channel to watch, asking me to choose either HTTP or RTMP for the stream. Essentially I just want to disable the dialogue box altogether and force HTTP everytime.

Unfortunately the author doesn't seem to be contactable.

Here's the default.py in the addon directory (I believe this is the file to edit)

import urllib,urllib2,sys,re,xbmcplugin,xbmcgui,xbmcaddon,xbmc,os,json,random,string,base64,hashlib,pyaes
import net

AddonID ='plugin.video.uktvnow.net'
fanart = xbmc.translatePath(os.path.join('special://home/addons/' + AddonID , 'fanart.jpg'))
icon = xbmc.translatePath(os.path.join('special://home/addons/' + AddonID, 'icon.png'))
artpath = xbmc.translatePath(os.path.join('special://home/addons/' + AddonID + '/resources/art/'))
thumbpath = xbmc.translatePath(os.path.join('special://home/addons/' + AddonID + '/resources/thumbs/'))
dialog = xbmcgui.Dialog()
selfAddon = xbmcaddon.Addon(id=AddonID)
Username='-1'
net2 = net.Net()

class SafeString(str):
    def title(self):
        return self

    def capitalize(self):
        return self
	
def Main():
	addDir('All Channels','0',1,artpath+'all.PNG',fanart)
	addDir('Entertainment','1',1,artpath+'ent.PNG',fanart)
	addDir('Movies','2',1,artpath+'mov.PNG',fanart)
	addDir('Music','3',1,artpath+'mus.PNG',fanart)
	addDir('News','4',1,artpath+'news.PNG',fanart)
	addDir('Sports','5',1,artpath+'sport.PNG',fanart)
	addDir('Documentary','6',1,artpath+'doc.PNG',fanart)
	addDir('Kids','7',1,artpath+'kids.PNG',fanart)
	addDir('Food','8',1,artpath+'food.PNG',fanart)
	addDir('USA','10',1,artpath+'us.PNG',fanart)
	addDir('Others','11',1,artpath+'others.PNG',fanart)
	xbmc.executebuiltin('Container.SetViewMode(500)')
 	
def GetContent(catid):
	if catid=='0': 
		token=GetToken('/uktvnow8/index.php?case=get_all_channels',Username)
		postdata={SafeString('username'):Username}
	else:
		token=GetToken('/uktvnow8/index.php?case=get_channel_by_catid',Username+catid)
		postdata={SafeString('username'):Username,SafeString('cat_id'):catid}
	
	headers={'User-Agent':'USER-AGENT-UKTVNOW-APP-V2',SafeString('app-token'):token}
	
	if catid=='0': 
		channels = net2.http_POST('uktvnow.net/uktvnow8/index.php?case=get_all_channels',postdata, headers).content
	else:
		channels = net2.http_POST('uktvnow.net/uktvnow8/index.php?case=get_channel_by_catid',postdata, headers).content
	channels = channels.replace('\/','/')
        match=re.compile('"pk_id":"(.+?)","channel_name":"(.+?)","img":"(.+?)","http_stream":"(.+?)","rtmp_stream":"(.+?)","cat_id":"(.+?)"').findall(channels)
	return match

def GetToken(url,username):
	return '37a6259cc0c1dae299a7866489dff0bd'

def GetChannels(catid):
	match = GetContent(catid)
	image = urllib.URLopener()

	i = 0.0
	cancel = False
	progress=None
	for channelid,name,iconimage,stream1,stream2,cat in match:	
		i = i + 1.0

		filename = thumbpath+iconimage.split("?")[0].split("/")[-1]
		if not cancel and not os.path.isfile(filename):
			if progress==None:
				progress = xbmcgui.DialogProgress()
				progress.create('UKTVNow.net', 'Downloading channel images')
				xbmc.executebuiltin( 'Dialog.Close(busydialog)' )
			if not cancel and progress!=None:
				percent = int((100.0 / len(match)) * i)
				progress.update( percent, "", name, "" )
				if progress.iscanceled():
					cancel = True
			#xbmc.log(filename, xbmc.LOGNOTICE)
			thumb='uktvnow.net/uktvnow8/'+iconimage
			#xbmc.log(thumb, xbmc.LOGNOTICE)
			try:		
				image.retrieve(thumb,filename)
			except IOError, e:
				xbmc.log('failed to get image: '+ SafeString(e), xbmc.LOGNOTICE)
		addLink(name,'url',2,filename,fanart,channelid)
	xbmcplugin.addSortMethod(int(sys.argv[1]), xbmcplugin.SORT_METHOD_VIDEO_TITLE)
	xbmc.executebuiltin('Container.SetViewMode(500)')
	if progress!=None:
		progress.close()

def GetStreams(name,iconimage,channelid):
	token = GetToken('uktvnow.net/uktvnow8/index.php?case=get_valid_link_revision', Username+channelid)
	postdata = {SafeString('channel_id'):channelid,'username':Username}	
	headers={'User-Agent':'USER-AGENT-UKTVNOW-APP-V2',SafeString('app-token'):token}
	
	channels = net2.http_POST('uktvnow.net/uktvnow8/index.php?case=get_valid_link_revision',postdata, headers).content
	match=re.compile('"channel_name":"(.+?)","img":".+?","http_stream":"(.+?)","http_stream2":"(.+?)","http_stream3":"(.+?)","rtmp_stream":"(.+?)","rtmp_stream2":"(.+?)","rtmp_stream3":"(.+?)"').findall(channels)
	for name,stream1,stream2,stream3,stream4,stream5,stream6 in match:	  
		streamname=[]
                streamurl=[]
                streamurl.append( stream1 )
                streamurl.append( stream4 )
                streamname.append( 'HTTP Stream' )
		streamname.append( 'RTMP Stream' )
	select = dialog.select(name,streamname)
	if select == -1:return
	else:
		url=streamurl[select]
		url.strip()
		url=magicness(url)
		#if 'http' in url: url = url+"|User-Agent=VLC/2.2.4 LibVLC/2.2.4"
		#else: url = url+' timeout=10'
		ok=True
		liz=xbmcgui.ListItem(name, iconImage=iconimage,thumbnailImage=iconimage); liz.setInfo( type="Video", infoLabels={ "Title": name } )
		ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=url,listitem=liz)
		xbmc.Player().play(url, liz, False)
		return ok
	
def magicness(url):
        magic="1579547dfghuh,555eop564dfbaaec,45h4jggf5f6g,f5fg65jj46,wwe324jkl874qq99".split(',')
        decryptor = pyaes.new(magic[1], pyaes.MODE_CBC, IV=magic[4])
        url= decryptor.decrypt(url.decode("hex")).split('\0')[0]
        return url
     
def addLink(name,url,mode,iconimage,fanart,channelid=''):
		u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&channelid="+str(channelid)+"&iconimage="+urllib.quote_plus(iconimage)
		ok=True
		liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
		liz.setInfo( type="Video", infoLabels={ "Title": name, 'plot': channelid } )
		liz.setProperty('fanart_image', fanart)
		ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=False)
		return ok

def addDir(name,url,mode,iconimage,fanart,channelid=''):
		u=sys.argv[0]+"?url="+urllib.quote_plus(url)+"&mode="+str(mode)+"&name="+urllib.quote_plus(name)+"&channelid="+str(channelid)+"&iconimage="+urllib.quote_plus(iconimage)
		ok=True
		liz=xbmcgui.ListItem(name, iconImage="DefaultFolder.png", thumbnailImage=iconimage)
		liz.setInfo( type="Video", infoLabels={ "Title": name, 'plot': channelid } )
		liz.setProperty('fanart_image', fanart)
		ok=xbmcplugin.addDirectoryItem(handle=int(sys.argv[1]),url=u,listitem=liz,isFolder=True)
		return ok
	
def get_params():
		param=[]
		paramstring=sys.argv[2]
		if len(paramstring)>=2:
				params=sys.argv[2]
				cleanedparams=params.replace('?','')
				if (params[len(params)-1]=='/'):
						params=params[0:len(params)-2]
				pairsofparams=cleanedparams.split('&')
				param={}
				for i in range(len(pairsofparams)):
						splitparams={}
						splitparams=pairsofparams[i].split('=')
						if (len(splitparams))==2:
								param[splitparams[0]]=splitparams[1]	
		return param



def setView(content, viewType):
    if content:
        xbmcplugin.setContent(int(sys.argv[1]), content)
    if selfAddon.getSetting('auto-view')=='true':
        xbmc.executebuiltin("Container.SetViewMode(%s)" % selfAddon.getSetting(viewType) )
		   
params=get_params()
url=None
name=None
mode=None
iconimage=None
channelid=None

try:url=urllib.unquote_plus(params["url"])
except:pass
try:name=urllib.unquote_plus(params["name"])
except:pass
try:mode=int(params["mode"])
except:pass
try:iconimage=urllib.unquote_plus(params["iconimage"])
except:pass
try:channelid=urllib.unquote_plus(params["channelid"])
except:pass

if mode==None or url==None or len(url)<1:Main()
elif mode==1:GetChannels(url)
elif mode==2:GetStreams(name,iconimage,channelid)
elif mode==3:Schedule(url)
xbmcplugin.endOfDirectory(int(sys.argv[1]))
Many thanks for any help!