Advertisement
Guest User

shoutfactorytv scraper.py for Kodi 19+

a guest
Jul 28th, 2023
89
0
86 days
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.54 KB | Source Code | 0 0
  1. # -*- coding: utf-8 -*-
  2. # Shout Factory TV Kodi Video Addon
  3. #
  4. from t1mlib import t1mAddon
  5. import re
  6. import os
  7. import xbmc
  8. import xbmcplugin
  9. import xbmcgui
  10. import html
  11. import sys
  12. import requests
  13.  
  14. UNESCAPE = html.unescape
  15.  
  16.  
  17. class myAddon(t1mAddon):
  18.  
  19.   def getAddonMenu(self,url,ilist):
  20.       ilist = self.addMenuItem(self.addon.getLocalizedString(30004),'GC', ilist, '/film', self.addonIcon, self.addonFanart, {} , isFolder=True)
  21.       ilist = self.addMenuItem(self.addon.getLocalizedString(30005),'GC', ilist, '/tv', self.addonIcon, self.addonFanart, {} , isFolder=True)
  22.       return(ilist)
  23.  
  24.   def getAddonCats(self,url,ilist):
  25.       html = requests.get(''.join(['https://shout-tv.com',url]), headers=self.defaultHeaders).text
  26.       html = re.compile('<div class="dropdown">.+?a href="'+url+'"(.+?)<li><a', re.DOTALL).search(html).group(1)
  27.       cats = re.compile('<a href="(.+?)">(.+?)<', re.DOTALL).findall(html)
  28.       if url =='/film':
  29.           mode = 'GM'
  30.       else:
  31.           mode = 'GS'
  32.       for url, name in cats:
  33.           ilist = self.addMenuItem(name, mode, ilist, url, self.addonIcon, self.addonFanart, {} , isFolder=True)
  34.       return(ilist)
  35.  
  36.   def getAddonEpisodes(self,url,ilist):
  37.       html = requests.get(''.join(['https://shout-tv.com',url]), headers=self.defaultHeaders).text
  38.       html = re.compile('<div class="tabs-area(.+?)<div class="container add">', re.DOTALL).search(html).group(1)
  39.       epis = re.compile('<a href="(.+?)".+?alt="(.+?)".+?src="(.+?)".+?Season:(.+?)\n.+?Episode:(.+?)\n.+?</li',re.DOTALL).findall(html)
  40.       for url, name, thumb, season, episode in epis:
  41.               url = url.rsplit('/',1)[1]
  42.               infoList = {}
  43.               name = UNESCAPE(name)
  44.               fanart = thumb
  45.               infoList['Title'] = name
  46.               infoList['TVShowTitle'] = xbmc.getInfoLabel('ListItem.TVShowTitle')
  47.               infoList['Plot'] = name
  48.               season = season.strip(' ,')
  49.               if season.isdigit():
  50.                   infoList['Season'] = int(season)
  51.               episode = episode.strip()
  52.               if episode.isdigit():
  53.                   infoList['Episode'] = int(episode)
  54.               infoList['mediatype'] = 'episode'
  55.               ilist = self.addMenuItem(name,'GV', ilist, url, thumb, fanart, infoList, isFolder=False)
  56.       return(ilist)
  57.  
  58.   def getAddonMovies(self,url,ilist):
  59.       html = requests.get(''.join(['https://shout-tv.com',url]), headers=self.defaultHeaders).text
  60.       movies=re.compile('<div class="img-holder">.+?href="(.+?)".+?alt="(.+?)".+?src="(.+?)"',re.DOTALL).findall(html)
  61.       movies = sorted(movies, key=lambda x: x[1])
  62.       for url, name, thumb in movies:
  63.               url = url.rsplit('/',1)[1]
  64.               fanart = thumb
  65.               infoList = {}
  66.               name = UNESCAPE(name).replace('?','')
  67.               infoList['Title'] = name
  68.               infoList['Plot'] = name
  69.               infoList['mediatype'] = 'movie'
  70.               contextMenu = [(self.addon.getLocalizedString(30002),''.join(['RunPlugin(',sys.argv[0],'?mode=AM&url=',url,')']))]
  71.               ilist = self.addMenuItem(name,'GV', ilist, url, thumb, fanart, infoList, isFolder=False, cm=contextMenu)
  72.       return(ilist)
  73.  
  74.   def getAddonShows(self,url,ilist):
  75.       html = requests.get(''.join(['https://shout-tv.com',url]), headers=self.defaultHeaders).text
  76.       shows=re.compile('<div class="img-holder">.+?href="(.+?)".+?alt="(.+?)".+?src="(.+?)"',re.DOTALL).findall(html)
  77.       shows = sorted(shows, key=lambda x: x[1])
  78.       for url, name, thumb in shows:
  79.               infoList = {}
  80.               fanart = thumb
  81.               name = UNESCAPE(name)
  82.               infoList['Title'] = name
  83.               infoList['TVShowTitle'] = name
  84.               infoList['Plot'] = name
  85.               infoList['mediatype'] = 'tvshow'
  86.               contextMenu = [(self.addon.getLocalizedString(30002),''.join(['RunPlugin(',sys.argv[0],'?mode=AS&url=',url,')']))]
  87.               ilist = self.addMenuItem(name,'GE', ilist, url, thumb, fanart, infoList , isFolder=True, cm=contextMenu)
  88.       return(ilist)
  89.  
  90.  
  91.  
  92.   def getAddonVideo(self,url):
  93.       if not url.startswith('http'):
  94.           url = ''.join(['https://player.zype.com/manifest/',url,'.m3u8?api_key=3PASB80DgKOdJoEdFmyaWw'])
  95.       liz = xbmcgui.ListItem(path = url, offscreen=True)
  96.       liz.setProperty('inputstream','inputstream.adaptive')
  97.       liz.setProperty('inputstream.adaptive.manifest_type','hls')
  98.       liz.setMimeType('application/x-mpegURL')
  99.       xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, liz)
  100.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement