def Scrape_Sites(list_type): """ This is just a very rough example showing how simple it is to make use of the NaN Scrapers module. We send through details of what we want to find and NaN Scrapers will search multiple websites for this content. """ content = '' if list_type == 'movie_dialog': content = nanscrapers.scrape_movie_with_dialog(title='Trainspotting', year='1996', imdb='tt0117951', host=None, include_disabled=False, timeout=30) elif list_type == 'episode_dialog': content = nanscrapers.scrape_episode_with_dialog(title='Fraggle Rock', show_year='1983', year='1985', season='3', episode='4', imdb='tt0085017', tvdb=None, host=None, include_disabled=False, timeout=30) elif list_type == 'song_dialog': content = nanscrapers.scrape_song_with_dialog(title='Fools Gold', artist='Stone Roses', host=None, include_disabled=False, timeout=30) # If the item returned is a dictionary that's great we know we have a list to work with if koding.Data_Type(content) == 'dict': xbmc.log(repr(content),2) playback = koding.Play_Video(video=content["url"], showbusy=True) # It may be a plugin or direct url has been sent through, if so lets use the list_type variable elif not list_type.endswith('_dialog'): playback = koding.Play_Video(video=list_type, showbusy=True) # Nothing useful has been found, lets exit back to the list else: return # If the playback returned as True then it was successful but if it was False we know we need to try again for another source if not playback: if dialog.yesno('PLAYBACK FAILED','The video may have been removed, the web host may have altered their code or this video may not be available in your region. [COLOR=dodgerblue]Would you like to try another source?[/COLOR]'): Scrape_Sites(list_type)
def Scrape_Sites(list_type): """ This is a dummy function, you would add whatever code you require in here for grabbing the content. Please do not use this function for scraping copyright infringing content. If you need a site to test with archive.org has a good library of public domain music and video files. """ content = '' if list_type == 'movie_dialog': dolog('Add your code to scrape for a movie') elif list_type == 'episode_dialog': dolog('Add your code to scrape for a tv show') elif list_type == 'song_dialog': dolog('Add your code to scrape for a song') # If the item returned is a dictionary that's great we know we have a list to work with if koding.Data_Type(content) == 'dict': xbmc.log(repr(content),2) playback = koding.Play_Video(video=content["url"], showbusy=True) # It may be a plugin or direct url has been sent through, if so lets use the list_type variable elif not list_type.endswith('_dialog'): playback = koding.Play_Video(video=list_type, showbusy=True) # Nothing useful has been found, lets exit back to the list else: return # If the playback returned as True then it was successful but if it was False we know we need to try again for another source if not playback: if dialog.yesno('PLAYBACK FAILED','The video may have been removed, the web host may have altered their code or this video may not be available in your region. [COLOR=dodgerblue]Would you like to try another source?[/COLOR]'): Scrape_Sites(list_type)
def get_swiftstreamz_play(url): url = url.replace('swiftplay/', '') # Strip our category tag off. tmp = url.split('/', 1) title = tmp[0] url = tmp[1] try: repair = False response = requests.get( base_dta_url, headers={'Authorization': 'Basic U3dpZnRTdHJlYW16OkBTd2lmdFN0cmVhbXpA', 'User-Agent': User_Agent}) data = response.json(strict=False) if data['DATA'][0]['HelloUrl'] in url \ or data['DATA'][0]['HelloUrl1'] in url: auth_url = data['DATA'][0]['HelloLogin'] auth_auth = tuple(data['DATA'][0]['PasswordHello'].split(':')) elif data['DATA'][0]['LiveTvUrl'] in url: auth_url = data['DATA'][0]['LiveTvLogin'] auth_auth = tuple(data['DATA'][0]['PasswordLiveTv'].split(':')) repair = True elif data['DATA'][0]['nexgtvUrl'] in url: auth_url = data['DATA'][0]['nexgtvToken'] auth_auth = tuple(data['DATA'][0]['nexgtvPass'].split(':')) else: auth_url = data['DATA'][0]['loginUrl'] auth_auth = tuple(data['DATA'][0]['Password'].split(':')) repair = True r = requests.get(auth_url, headers={'User-Agent': User_Agent}, auth=auth_auth, timeout=10) auth_token = r.text.partition('=')[2] if repair: auth_token = ''.join( [auth_token[: -59], auth_token[-58: -47], auth_token[-46: -35], auth_token[-34: -23], auth_token[-22: -11], auth_token[-10:]]) if 'playlist.m3u8' in url or '.2ts' in url: url = url + '?wmsAuthSign=' + auth_token + '|User-Agent=123456' item = xbmcgui.ListItem(label=title, path=url, iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo(type="Video", infoLabels={"Title": title}) import resolveurl koding.Play_Video(url, showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) # xbmc.executebuiltin("PlayMedia(%s)" % url) else: url = url + '|User-Agent=123456' item = xbmcgui.ListItem(label=title, path=url, iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo(type="Video", infoLabels={"Title": title}) import resolveurl koding.Play_Video(url, showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) # xbmc.executebuiltin("PlayMedia(%s)" % url) except Exception: xbmcgui.Dialog().ok('Stream', 'Unable to play stream')
def get_pbepisode(url): xml = "" url = url.replace('pbepisode/', '') # Strip our episode tag off. try: html = requests.get(url).content ep_icon = re.compile('property="og:image" content="(.*?)"', re.DOTALL).findall(html)[0] ep_title = re.compile('property="og:title" content="(.*?)"', re.DOTALL).findall(html)[0] ep_title = refreshtitle(ep_title) url = dom_parser.parseDOM(html, 'a', attrs={'class': 'btn btn-mini btn-primary'}, ret='href')[0] if not 'mp3' in url: url = re.compile('file: "(.*?)"', re.DOTALL).findall(html)[0] item = xbmcgui.ListItem(label=ep_title, path=url, iconImage=ep_icon, thumbnailImage=ep_icon) item.setInfo(type="Video", infoLabels={"Title": ep_title}) import resolveurl koding.Play_Video(url, showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) except: pass
def get_pbepisode(url): xml = "" url = url.replace('pbepisode/', '') # Strip our episode tag off. try: html = requests.get(url).content ep_icon = dom_parser.parseDOM(html, 'meta', attrs={'property': 'og:image'}, ret='content')[0] ep_title = dom_parser.parseDOM(html, 'meta', attrs={'property': 'og:title'}, ret='content')[0].encode( 'utf-8', 'ignore').decode('utf-8') url = dom_parser.parseDOM(html, 'a', attrs={'class': 'btn btn-mini btn-primary'}, ret='href')[0] item = xbmcgui.ListItem(label=ep_title, path=url, iconImage=ep_icon, thumbnailImage=ep_icon) item.setInfo(type="Video", infoLabels={"Title": ep_title}) import resolveurl koding.Play_Video(url, showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) except: pass
def metalliq_play(args): run = 0 windowopen = 0 dixie.log('### metalliq play args: %s' % args) channel, repository, plugin, playertype, channel_orig, itemname = args.split('|') dixie.log('### %s' % channel) dixie.log('### %s' % repository) dixie.log('### %s' % plugin) dixie.log('### %s' % playertype) # Check if add-on is installed try: addonid = xbmcaddon.Addon(id=plugin) addonname = addonid.getAddonInfo('name') # If not then install the relevant addon except: koding.Addon_Install(addon_id=addonid,confirm=True,silent=0,repo_install=0) # Update enabled metalliq players xbmc.executebuiltin('RunPlugin(plugin://plugin.video.metalliq/settings/channelers)') updateicon = Addon_Info('icon') xbmc.executebuiltin("XBMC.Notification(Please Wait...,Searching for [COLOR=dodgerblue]"+channel+"[/COLOR] ,5000,"+updateicon+")") my_playback = koding.Play_Video('plugin://plugin.video.metalliq/live_guide/%s/None/en/%s' % (channel, playertype)) if not my_playback: if dialog.yesno('Edit Search Term?','Would you like to edit the channel name? It may be this add-on has a slightly different spelling of [COLOR=dodgerblue]%s[/COLOR]' % channel): Edit_Search(channel, repository, plugin, playertype, channel_orig, itemname) else: Edit_SF_Name('bad', playertype, channel_orig, itemname) else: Edit_SF_Name('good', playertype, channel_orig, itemname)
def fxxx_play(url): try: progress_dialog = xbmcgui.DialogProgress() progress_dialog.create( "Finding Streams", "Get your tissues ready while we find the movie....") progress = 0 headers = {'User_Agent': User_Agent} vid_html = requests.get(url, headers=headers).content the_item = dom_parser.parseDOM(vid_html, 'div', attrs={'class': 'entry-content'})[0] progress += 10 progress_dialog.update(progress) streams = re.compile('href="(.+?)"', re.DOTALL).findall(str(the_item)) try: title = re.compile('<em>(.+?)</em>', re.DOTALL).findall(str(the_item))[0] except: title = re.compile('property="og:title" content="(.+?)"', re.DOTALL).findall(str(vid_html))[0] progress += 10 progress_dialog.update(progress) names = [] sources = [] for stream in streams: progress += 5 progress_dialog.update(progress) if 'securely.link' in stream: response = requests.get(stream) stream = response.url elif any(x in stream for x in ignore_items): continue if 'openload' in stream: names.append('Openload') sources.append(stream) elif 'streamango' in stream: names.append('Streamango') sources.append(stream) progress_dialog.close() selected = xbmcgui.Dialog().select( '[COLORlime]4QED XXX[/COLOR] - Get the tissues ready!', names) if selected == -1: return item = xbmcgui.ListItem(label=title, path=sources[selected], iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo(type="Video", infoLabels={"Title": title}) import resolveurl koding.Play_Video(sources[selected], showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) except: return
def play_PlayMTorture(url): try: url = url.replace('play/','').split('|') link = url[0] title = url[1] item = xbmcgui.ListItem(label=title, path=link, iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo( type="Video", infoLabels={ "Title": title } ) import resolveurl koding.Play_Video(link,showbusy=False,ignore_dp=True,item=item,resolver=resolveurl) except: xbmcgui.Dialog().ok('Stream', 'Unable to play stream')
def play_MOPEpisode(url): try: html = requests.get(url,headers).content link = re.compile('a href="(.+?).mp3"').findall(html)[0] + '.mp3' title = re.compile('property="og:title" content="(.+?)"').findall(html)[0] item = xbmcgui.ListItem(label=title, path=link, iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo( type="Audio", infoLabels={ "Title": title } ) import resolveurl koding.Play_Video(link,showbusy=False,ignore_dp=True,item=item,resolver=resolveurl) except: failure = traceback.format_exc() xbmcgui.Dialog().textviewer('Item Exception',str(failure)) xbmcgui.Dialog().ok('Stream', 'Unable to play stream')
def get_pcoepisode(url): xml = "" url = url.replace('pcoepisode/', '') # Strip our episode tag off. try: html = requests.get(url).content episode_item = dom_parser.parseDOM(html, 'div', attrs={'class': 'media-player'})[0] episode_item2 = dom_parser.parseDOM(html, 'div', attrs={'class': 'letestepi'})[0] ep_icon = dom_parser.parseDOM(episode_item2, 'img', attrs={'class': 'img-responsive'}, ret='src')[0] ep_title = dom_parser.parseDOM(html, 'title')[0].replace('PodcastOne: ','') play_url = re.compile('href="(.+?)"',re.DOTALL).findall(episode_item)[0].replace("\n","").replace('/downloadsecurity?url=', '') url = pcoplay_link % play_url item = xbmcgui.ListItem(label=ep_title, path=url, iconImage=ep_icon, thumbnailImage=ep_icon) item.setInfo( type="Video", infoLabels={ "Title": ep_title } ) import resolveurl koding.Play_Video(url,showbusy=False,ignore_dp=True,item=item,resolver=resolveurl) except: pass
def play_MOPEpisode(url): try: html = requests.get(url, headers).content link = re.compile('a href="(.+?).mp3"').findall(html)[0] + '.mp3' title = re.compile('h1 class="entry-title">(.+?)</h1>').findall( html)[0] title = remove_non_ascii(replaceHTMLCodes(title)).replace( 'Massively OP Podcast', '') item = xbmcgui.ListItem(label=title, path=link, iconImage=addon_icon, thumbnailImage=addon_icon) item.setInfo(type="Audio", infoLabels={"Title": title}) import resolveurl koding.Play_Video(link, showbusy=False, ignore_dp=True, item=item, resolver=resolveurl) except Exception: xbmcgui.Dialog().ok('Stream', 'Unable to play stream')
def get_sources(item): """ get video_link and try to play it Keyword Arguments: item -- JenItem to try playing """ result = run_hook("get_sources", item) if result: return if item.startswith("<plugin>"): # link to plugin link = JenItem(item)["link"] sublinks = JenItem(link).getAll("sublink") if sublinks: if len(sublinks) > 1: link = choose_quality(link) else: link = sublinks[0] link = link.replace("&", "&") xbmc.executebuiltin("Container.update(" + link + ")") return item = JenItem(item) link = item["link"] if not link or link.replace("\t", "") == "": return meta = JenItem(item["meta"]) title = meta["title"] year = meta.get("year", "").split("-")[0].strip() imdb = meta.get("imdb", "") tvdb = meta.get("tvdb", "") season = meta.get("season", "") episode = meta.get("episode", "") tvshowtitle = meta.get("tvshowtitle", None) premiered = meta.get("premiered", "") try: premiered = premiered.split("-")[0].strip() except: if len(premiered) == 4: pass elif not premiered: pass else: koding.dolog("wrong premiered format") busy_dialog = xbmcgui.DialogProgress() dialog = xbmcgui.Dialog() icon = ADDON.getAddonInfo("icon") jenplayer = JenPlayer(resume=False) try: spec = {"identifier": imdb, "season": season or "0", "episode": episode or "0"} match = koding.Get_From_Table("watched", spec) if match: match = match[0] if match["currentTime"] and not match["currentTime"] == "0": if dialog.yesno( ADDON.getAddonInfo("name"), _("Previous playback detected"), yeslabel=_("Resume"), nolabel=_("Restart"), ): jenplayer = JenPlayer(resume=True) except: pass jenplayer.setItem(item) busy_dialog.create(xbmcaddon.Addon().getAddonInfo("name"), _("Processing Link")) preset = choose_quality(link) message = get_searching_message(preset) played = False infolabels = {} if preset: preset = preset.replace("&", "&") busy_dialog.update(0, message) listitem = None fetch_meta = ADDON.getSetting("metadata") == "true" listitem = xbmcgui.ListItem( path=link, iconImage=item.get("thumbnail", icon), thumbnailImage=item.get("thumbnail", icon), ) infolabels = {} if fetch_meta and imdb != "0": # only try valid items with imdb try: info, created = get_info([item.item_string]) if info and type(info) == dict: infolabels = info except: pass else: infolabels["title"] = title infolabels["name"] = title if "plotoutline" not in infolabels: infolabels["plotoutline"] = infolabels.get("plot", "") if item.get("content", "") == "song": listitem.setInfo( type="Music", infoLabels={ "title": meta.get("title", ""), "artist": meta.get("artist", ""), }, ) else: listitem.setInfo(type="video", infoLabels=infolabels) listitem.setLabel(item.get("title", item.get("name", ""))) if "search" in preset: exclude_scrapers_content = item.get("exclude_scrapers", "") if exclude_scrapers_content: exclude_scrapers = exclude_scrapers_content.split(";") else: exclude_scrapers = None # nanscraper link if item.get("content", "") == "song": artist = item.get("artist", "") played = Sources.get_music_sources( title, artist, preset=preset, dialog=busy_dialog, exclude=exclude_scrapers, listitem=listitem, player=jenplayer, ) else: played = Sources.get_sources( title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, preset=preset, dialog=busy_dialog, listitem=listitem, exclude=exclude_scrapers, player=jenplayer, ) elif preset.startswith("http") or preset.startswith("plugin") or preset.endswith('.torrent') or preset.startswith('magnet'): # direct link if "/playlist" in preset and "youtube" in preset: busy_dialog.close() xbmc.executebuiltin("Container.update(" + preset + ")") return elif "plugin://plugin.video.youtube/play/?video_id=" in preset: xbmc.executebuiltin("PlayMedia(%s)" % preset) played = True elif item["content"] == "image": busy_dialog.close() xbmc.executebuiltin("ShowPicture(%s)" % preset) played = True else: played = koding.Play_Video( preset, showbusy=False, ignore_dp=True, item=listitem, player=jenplayer, resolver=resolveurl, ) else: # who knows busy_dialog.close() koding.dolog("unknown link type: " + repr(preset)) raise Exception() busy_dialog.close() if played: jenplayer.keep_alive()
def play(url, windowed, name=None): handled = False getIdle = int(ADDON.getSetting('idle').replace('Never', '0')) maxIdle = getIdle * 60 * 60 dixie.SetSetting('streamURL', url) if 'tv/play_by_name_only_guide/' in url or 'movies/play_by_name_guide' in url or 'tv/play_by_name_guide/' in url: dixie.removeKepmap() xbmc.executebuiltin('XBMC.ActivateWindow(10025,%s)' % url) CheckIdle(maxIdle) else: dixie.loadKepmap() if url.startswith('HDTV'): import hdtv delay = 5 stream = hdtv.getURL(url) if not playAndWait(stream, windowed, maxIdle, delay=delay): dixie.SetSetting('LOGIN_HDTV', '2001-01-01 00:00:00') stream = hdtv.getURL(url) playAndWait(stream, windowed, maxIdle, delay=delay) return if url.startswith('IPLAY'): import iplayer stream = iplayer.getURL(url) playAndWait(stream, windowed, maxIdle) return if url.startswith('IPTV:'): import iptv url = iptv.getURL(url) dixie.log(url) xbmc.executebuiltin('XBMC.RunPlugin(%s)' % url) return if url.startswith('UKTV'): import uktv stream = uktv.getURL(url) dixie.log(stream) playAndWait(stream, windowed, maxIdle) return if url.isdigit(): command = ( '{"jsonrpc": "2.0", "id":"1", "method": "Player.Open","params":{"item":{"channelid":%s}}}' % url) xbmc.executeJSONRPC(command) return if (url.startswith('__SF__')) or ( 'plugin://plugin.program.super.favourites' in url.lower()): handled, url = playSF(url) if handled: return if not checkForAlternateStreaming(url): my_playback = koding.Play_Video(url) if not my_playback: if CLEAN_STREAMS == 'true': clean_ini(url) koding.Notify(title='PLAYBACK FAILED', message='Please try another link', duration=5000)
def get_sources(item): """ get video_link and try to play it Keyword Arguments: item -- JenItem to try playing """ if item.startswith("<plugin>"): # link to plugin link = JenItem(item)["link"] sublinks = JenItem(link).getAll("sublink") if sublinks: if len(sublinks) > 1: link = choose_quality(link) else: link = sublinks[0] link = link.replace("&", "&") xbmc.executebuiltin('Container.update(' + link + ')') return item = JenItem(item) link = item["link"] if not link or link.replace("\t", "") == "": return meta = JenItem(item["meta"]) title = meta["title"] year = meta["year"].split("-")[0].strip() imdb = meta["imdb"] tvdb = meta.get("tvdb", "") season = meta.get("season", "") episode = meta.get("episode", "") tvshowtitle = meta.get("tvshowtitle", None) premiered = meta.get("premiered", "") try: premiered = premiered.split("-")[0].strip() except: if len(premiered) == 4: pass else: xbmc.log("wrong premiered format") busy_dialog = xbmcgui.DialogProgress() dialog = xbmcgui.Dialog() icon = ADDON.getAddonInfo('icon') busy_dialog.create(addon_name, "Processing Link") preset = choose_quality(link) played = False infolabels = {} if preset: preset = preset.replace("&", "&") busy_dialog.update(0, "") listitem = None fetch_meta = ADDON.getSetting("metadata") == "true" listitem = xbmcgui.ListItem(path=link, iconImage=item.get("thumbnail", icon), thumbnailImage=item.get("thumbnail", icon)) if fetch_meta and imdb != "0": # only try valid items with imdb infolabels = {} try: info, created = get_info([item.item_string]) if info and type(info) == dict: infolabels = info except: pass if "plotoutline" not in infolabels: infolabels["plotoutline"] = infolabels.get("plot", "") listitem.setInfo(type="video", infoLabels=infolabels) listitem.setLabel(item.get("title", item.get("name", ""))) if "search" in preset: exclude_scrapers_content = item.get("exclude_scrapers", "") if exclude_scrapers_content: exclude_scrapers = exclude_scrapers_content.split(";") else: exclude_scrapers = None # nanscraper link played = Sources.get_sources(title, year, imdb, tvdb, season, episode, tvshowtitle, premiered, preset=preset, dialog=busy_dialog, listitem=listitem, exclude=exclude_scrapers) if not played: dialog.notification(addon_name, "no link found", icon, 5) elif preset.startswith("http") or preset.startswith("plugin"): # direct link if "/playlist" in preset: busy_dialog.close() xbmc.executebuiltin('Container.update(' + preset + ')') return elif "plugin://plugin.video.youtube/play/?video_id=" in preset: xbmc.executebuiltin("PlayMedia(%s)" % preset) played = True elif item["content"] == "image": busy_dialog.close() xbmc.executebuiltin("ShowPicture(%s)" % preset) played = True else: played = koding.Play_Video(preset, showbusy=False, ignore_dp=True, item=listitem) if not played: dialog.notification(addon_name, "no link found", icon, 5) else: # who knows busy_dialog.close() xbmc.log("unknown link type: " + repr(preset), xbmc.LOGDEBUG) raise Exception() busy_dialog.close() if played: is_playing = True while is_playing: is_playing = xbmc.Player().isPlaying() xbmc.sleep(1000)