def PlayTrailer(youtube_id): import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) xbmc.executebuiltin("PlayMedia(%s)" % stream_url)
def showVideo(url): if url: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(url, quality=1) url = vid.streamURL() plugin.set_resolved_url({'path':url, 'info': {'type': 'Video'}})
def play_trailer(youtube_id="", listitem=None, popstack=False): if not listitem: listitem = xbmcgui.ListItem(xbmc.getLocalizedString(20410)) listitem.setInfo('video', {'Title': xbmc.getLocalizedString(20410), 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() PlayMedia(stream_url, listitem, popstack)
def getVideo(self, episodePagePath): videoUrlRegex = re.compile( r"<iframe (?:.+?)\s+src=\"(?P<video_page>https*://www.youtube.com[-_a-zA-Z0-9\/]+)?") videoPageSource = super(Swarnavahini, self).getSource(episodePagePath) # print "video page source="+videoPageSource YDStreamExtractor.disableDASHVideo(True) video_urls = videoUrlRegex.findall(videoPageSource) url = video_urls[0] vid = YDStreamExtractor.getVideoInfo(url, quality=1) return vid.streamURL()
def PlayTrailer(youtube_id="", listitem=None, popstack=False): if not listitem: listitem =xbmcgui.ListItem ('Trailer') listitem.setInfo('video', {'Title': 'Trailer', 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) PlayMedia(stream_url, listitem, popstack)
def PlayTrailer(youtube_id="", listitem=None, popstack=False): if not listitem: listitem = xbmcgui.ListItem(xbmc.getLocalizedString(20410)) listitem.setInfo('video', {'Title': xbmc.getLocalizedString(20410), 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) PlayMedia(stream_url, listitem, popstack)
def playVideo(name, url): import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) #Kodi (XBMC) only plays the video for DASH streams, so you don't want these normally. Of course these are the only 1080p streams on YouTube # url = "https://www.youtube.com/watch?v=" + url #a youtube ID will work as well and of course you could pass the url of another site vid = YDStreamExtractor.getVideoInfo(url,quality=1) #quality is 0=SD, 1=720p, 2=1080p and is a maximum stream_url = vid.streamURL() #This is what Kodi (XBMC) will play print "stream_url =", stream_url img = " " listitem = xbmcgui.ListItem(name, iconImage=img, thumbnailImage=img) playfile = xbmc.Player() playfile.play(stream_url, listitem)
def resolve(self, url): html = client.request(url) soup = webutils.bs(html) video = soup.find('iframe')['src'] if 'youtube' in video: yt_id = self.yt_video_id(video) l = 'http://www.youtube.com/watch?v=' + yt_id import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(l, quality=1) resolved = vid.streamURL() return resolved
def playYoutubeVideo(self, youtube_id="", listitem=None, popstack=True): if not listitem: listitem = xbmcgui.ListItem(xbmc.getLocalizedString(20410)) listitem.setInfo('video', {'Title': xbmc.getLocalizedString(20410), 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) if youtube_id: vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() self.play(stream_url, listitem) else: Notify("no youtube id found")
def resolve(self,url): html = client.request(url) soup = webutils.bs(html) video=soup.find('iframe')['src'] if 'youtube' in video: yt_id = self.yt_video_id(video) l = 'http://www.youtube.com/watch?v=' + yt_id import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(l,quality=1) resolved = vid.streamURL() return resolved
def playVideo(name, url): pass#print"In playVideo url =", url import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) #Kodi (XBMC) only plays the video for DASH streams, so you don't want these normally. Of course these are the only 1080p streams on YouTube # url = "https://www.youtube.com/watch?v=" + url #a youtube ID will work as well and of course you could pass the url of another site vid = YDStreamExtractor.getVideoInfo(url,quality=1) #quality is 0=SD, 1=720p, 2=1080p and is a maximum stream_url = vid.streamURL() #This is what Kodi (XBMC) will play pass#print"stream_url =", stream_url n1 = stream_url.find("|", 0) stream_url = stream_url[:n1] pass#print"stream_url 2=", stream_url img = " " playfile = xbmc.Player() playfile.play(stream_url)
def playYoutubeVideo(self, youtube_id="", listitem=None, popstack=True): if not listitem: listitem = xbmcgui.ListItem(xbmc.getLocalizedString(20410)) listitem.setInfo('video', {'Title': xbmc.getLocalizedString(20410), 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) if youtube_id: vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) self.play(stream_url, listitem) else: Notify("no youtube id found")
def playYoutubeVideo(self, youtube_id="", listitem=None, popstack=True): if not listitem: listitem = xbmcgui.ListItem ('Trailer') listitem.setInfo('video', {'Title': listitem.getProperty('Label'), 'Plot': listitem.getProperty('Description'), 'Genre': 'Youtube Video'}) import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) if youtube_id: vid = YDStreamExtractor.getVideoInfo(youtube_id, quality=1) if vid: stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) self.play(stream_url, listitem) else: Notify("no youtube id found")
def playVideo(name, url): import YDStreamExtractor YDStreamExtractor.disableDASHVideo( True ) #Kodi (XBMC) only plays the video for DASH streams, so you don't want these normally. Of course these are the only 1080p streams on YouTube # url = "https://www.youtube.com/watch?v=" + url #a youtube ID will work as well and of course you could pass the url of another site vid = YDStreamExtractor.getVideoInfo( url, quality=1) #quality is 0=SD, 1=720p, 2=1080p and is a maximum stream_url = vid.streamURL() #This is what Kodi (XBMC) will play print "stream_url =", stream_url img = " " listitem = xbmcgui.ListItem(name, iconImage=img, thumbnailImage=img) playfile = xbmc.Player() playfile.play(stream_url, listitem)
def youtubeDLDownload(self,vid,path,target=None): import YDStreamExtractor as StreamExtractor import YDStreamUtils as StreamUtils if not target: target = self.chooseDirectory() if not target: return with StreamUtils.DownloadProgress() as prog: try: StreamExtractor.disableDASHVideo(True) StreamExtractor.setOutputCallback(prog) result = StreamExtractor.downloadVideo(vid,path) finally: StreamExtractor.setOutputCallback(None) if not result and result.status != 'canceled': xbmcgui.Dialog().ok(T(32103),'[CR]',result.message) elif result: xbmcgui.Dialog().ok(T(32062),T(32104),'[CR]',result.filepath) if target: xbmcvfs.copy(result.filepath,os.path.join(target,os.path.basename(result.filepath))) xbmcvfs.delete(result.filepath)
def resolve(self, url): html = client.request(url) soup = webutils.bs(html) try: rreg = '<param name="playerID" value="(.+?)" /><param name="@videoPlayer" value="(.+?)" />' ids = re.compile(rreg).findall(html)[0] l = 'http://c.brightcove.com/services/viewer/federated_f9?&width=690&height=388&flashID=bcExperienceObj0&bgcolor=%23FFFFFF&ConvivaConfig.events=%20%3CConvivaEventsMap%3E%20%3Cevent%20name%3D%22mediaPlay%22%20module%3D%22videoPlayer%22%20eventType%3D%22mediaPlay%22%3E%20%3C%2Fevent%3E%20%3Cevent%20name%3D%22mediaError%22%20module%3D%22videoPlayer%22%20eventType%3D%22mediaError%22%3E%20%3Cattr%20key%3D%22errorCode%22%20type%3D%22eventField%22%20value%3D%22code%22%2F%3E%20%3C%2Fevent%3E%20%3C%2FConvivaEventsMap%3E%20&playerID=' + ids[ 0] + '&%40videoPlayer=' + ids[ 1] + '&isVid=true&isUI=true&playerKey=AQ~~%2CAAAA1DWaSzk~%2CCZSkTksiPhQqITLsbi03E4KbEIFdh_zL' except: link = soup.find('iframe', {'class': 'media-youtube-player'})['src'] yt_id = self.yt_video_id(link) l = 'http://www.youtube.com/watch?v=' + yt_id import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(l, quality=1) resolved = vid.streamURL() return resolved
downloader.download(filename, params) elif mode[0] == 'open_option': url = args['url'][0] img = args['img'][0] help = args['help'][0] title = get_title(help) url = url.replace('temporarylink.net', 'moevideo.net') link, need = getlink_nbahd(url) if need: try: import urlresolver link = urlresolver.resolve(link) except: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link, quality=1) link = vid.streamURL() li = xbmcgui.ListItem(title, iconImage=img) li.setThumbnailImage(img) xbmc.Player().play(listitem=li, item=link) elif mode[0] == 'teams': team_list = get_teams() for i in range(len(team_list)): link = team_list[i][1] name = team_list[i][0] img = team_list[i][2] url = build_url({
def getDirectEpisodeLink(self, episode_dirty_link, hosting): """ Gets a dirty link of an episode, returns direct link to a video and subtitle link if exist (for smotret-anime). """ # TODO: выбор разрешения. with requests.Session() as s: s.headers.update(self.headers) r = s.get(episode_dirty_link) soup = BeautifulSoup(r.text, 'html.parser') player = soup.find('div', class_='video-link').a.get('href') # для smotret-anime нужны куки. Получение оных print('HOSTING IS', hosting) if hosting == 'smotret-anime.ru': try: with open(os.path.join(userdata, u'cookies.pickle'), 'rb') as f: cookies = pickle.load(f) cookies['ads-blocked'] = '0' s.cookies['watchedPromoVideo'] = '1531058305789' s.cookies['viboomShown2'] = '1531058284737' except Exception as e: print('CANT OPEN FILE, EXCEPTION:', e) r = s.get(player) s.cookies['ads-blocked'] = '0' s.cookies['watchedPromoVideo'] = '1531058305789' s.cookies['viboomShown2'] = '1531058284737' cookies = s.cookies r = s.get(player, cookies=cookies) print('COOKIES IS', cookies) print('PROFILE DIR IS:', userdata) with open(os.path.join(userdata, u'cookies.pickle'), 'wb') as f: pickle.dump(s.cookies, f) else: r = s.get(player) soup = BeautifulSoup(r.text, 'html.parser') if hosting == 'smotret-anime.ru': middle_serv = 'http://127.0.0.1:8900/playlist.m3u8?' page_url = soup.find('video', { 'id': 'main-video' }).get('data-page-url') try: srcs = soup.find('video', {'id': 'main-video'})['data-sources'] except TypeError: return None try: ass = soup.find('video', {'id': 'main-video'})['data-subtitles'] ass = 'https://smotret-anime.ru/' + ass except TypeError: ass = None print('src is', srcs) srcs_json = json.loads(srcs) print('json_is', srcs_json) urls = srcs_json[0]['urls'] # 0 здесь значит лучшее кач-во if len(urls) > 1: # если ссылок на эп. больше чем 1 serv_request = middle_serv + '+'.join(urls) return serv_request, ass elif len(urls) == 1: if re.search(r'\.big\-sword', urls[0]): #rpage = requests.get(page_url, headers=self.headers) #sasoup = BeautifulSoup(rpage.text, 'html5lib') #cards = sasoup.find('div', { # 'class': 'card-content m-translation-view-download'}) #if cards: # url = cards.find_all('a')[0].get('href') # return url, ass serv_request = middle_serv + urls[0] return serv_request, ass return urls[0], ass else: return None elif hosting == 'vk.com': YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(player, quality=1) if not vid: return None stream_url = vid.streamURL() print('RUTUBE STREAM URL', stream_url) return (stream_url, None) elif hosting == 'sibnet.ru': sibnet = 'http://video.sibnet.ru' script = soup.find('script', type='text/javascript', charset=None, src=None).text m3u8_link = re.findall(r',{src: "(.+.m3u8)", type', script) if not m3u8_link: return None surl = sibnet + m3u8_link[0] return (surl, None) # elif hosting == 'myvi.ru': # script = soup.find_all('script')[-1] # dirty_url = re.findall(r'v=(.+?)\\', script.text)[0] # murl = urllib.unquote(dirty_url) # return murl elif hosting == 'animedia.tv': # Как-нибудь в следующий раз return None elif hosting == 'mail.ru': return None elif hosting == 'sovetromantica.com': script = soup.body.script link = re.search(r'player\.src\(.+?\)', script.string) url = None if link: url = link.group() url = url.strip('player.src(\'').rstrip('\')') else: src = soup.body.video.source url = src.get('src') if src else None if not url: return None return (url, None) else: return None
def download_epizodu(title,url): try: soup=get_soup(url) tag=soup.find('div',{'id':'Playerholder'}) frames=tag.findAll('iframe') if len(frames)>1: sources=[] for i in range(len(frames)): sources+=['%s. dio'%(i+1)] dialog = xbmcgui.Dialog() index = dialog.select('Odaberite:', sources) li = xbmcgui.ListItem('%s'%title) li.setInfo('video', { 'title': '%s'%title }) if index>-1: link=frames[index] title=title+' (%s od %s)'%(index+1,len(frames)) link=link['src'] try: from lib.resolvers import dailymotion resolved=dailymotion.resolve(link) resolved=resolved[0]['url'] except: try: import urlresolver resolved=urlresolver.resolve(link) except: try: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link,quality=1) resolved = vid.streamURL() except: pass download(title,resolved) return else: return except: pass try: soup=get_soup(url) link=soup.findAll('iframe')[1]['src'] except: try: soup=get_soup(url) link=soup.findAll('iframe')[1]['src'] except: try: soup=get_soup(url) try: link=soup.find('div',{'id':'Playerholder'}).find('embed')['src'] except: link=soup.find('div',{'id':'Playerholder'}).find('iframe')['src'] except: html=read_url(url).lower() ind=html.index('player.src') html=html[ind:ind+80] reg=r'watch\?v=(.+?)"' link=re.findall(re.compile(reg),html)[0] link='http://www.youtube.com/watch?v=' + link if 'moevideo' in link or 'playreplay' in link : import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link,quality=1) resolved = vid.streamURL() else: try: from lib.resolvers import dailymotion resolved=dailymotion.resolve(link) resolved=resolved[0]['url'] except: try: import urlresolver resolved=urlresolver.resolve(link) except: try: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link,quality=1) resolved = vid.streamURL() except: pass download(title,resolved)
def _StartInfoActions(self): for info in self.infos: ########### Images ##################### if info == 'xkcd': passDataToSkin('XKCD', GetXKCDInfo(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'flickr': passDataToSkin('Flickr', GetFlickrImages(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'cyanide': passDataToSkin('CyanideHappiness', GetCandHInfo(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'dailybabes': passDataToSkin('DailyBabes', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('DailyBabes', GetDailyBabes(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'dailybabe': passDataToSkin('DailyBabe', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('DailyBabe', GetDailyBabes(single=True), self.prop_prefix, self.window, self.control, self.handle, self.limit) ########### Audio ##################### elif info == 'discography': passDataToSkin('Discography', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) Discography = GetDiscography(self.ArtistName) if len(Discography) == 0: Discography = GetArtistTopAlbums(self.Artist_mbid) passDataToSkin('Discography', Discography, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'mostlovedtracks': passDataToSkin('MostLovedTracks', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('MostLovedTracks', GetMostLovedTracks(self.ArtistName), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'artistdetails': passDataToSkin('Discography', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('MusicVideos', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) ArtistDetails = GetArtistDetails(self.ArtistName) if "audiodbid" in ArtistDetails: MusicVideos = GetMusicVideos(ArtistDetails["audiodbid"]) passDataToSkin('MusicVideos', MusicVideos, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('Discography', GetDiscography(self.ArtistName), self.prop_prefix, self.window, self.control, self.handle, self.limit) passHomeDataToSkin(ArtistDetails, self.prop_prefix) elif info == 'albuminfo': if self.id: AlbumDetails = GetAlbumDetails(self.id) Trackinfo = GetTrackDetails(self.id) passHomeDataToSkin(AlbumDetails, self.prop_prefix) passDataToSkin('Trackinfo', Trackinfo, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'albumshouts': passDataToSkin('Shout', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.ArtistName and self.AlbumName: passDataToSkin('Shout', GetAlbumShouts(self.ArtistName, self.AlbumName), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'artistshouts': passDataToSkin('Shout', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.ArtistName: passDataToSkin('Shout', GetArtistShouts(self.ArtistName), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'topartists': passDataToSkin('TopArtists', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('TopArtists', GetTopArtists(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'hypedartists': passDataToSkin('HypedArtists', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('HypedArtists', GetHypedArtists(), self.prop_prefix, self.window, self.control, self.handle, self.limit) ### RottenTomatoesMovies ################################################################################# elif info == 'intheaters': passDataToSkin('InTheatersMovies', GetRottenTomatoesMovies("movies/in_theaters"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'boxoffice': passDataToSkin('BoxOffice', GetRottenTomatoesMovies("movies/box_office"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'opening': passDataToSkin('Opening', GetRottenTomatoesMovies("movies/opening"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'comingsoon': passDataToSkin('ComingSoonMovies', GetRottenTomatoesMovies("movies/upcoming"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'toprentals': passDataToSkin('TopRentals', GetRottenTomatoesMovies("dvds/top_rentals"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'currentdvdreleases': passDataToSkin('CurrentDVDs', GetRottenTomatoesMovies("dvds/current_releases"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'newdvdreleases': passDataToSkin('NewDVDs', GetRottenTomatoesMovies("dvds/new_releases"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'upcomingdvds': passDataToSkin('UpcomingDVDs', GetRottenTomatoesMovies("dvds/upcoming"), self.prop_prefix, self.window, self.control, self.handle, self.limit) ### The MovieDB ########################################################################################## elif info == 'incinemas': passDataToSkin('InCinemasMovies', GetMovieDBMovies("now_playing"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'upcoming': passDataToSkin('UpcomingMovies', GetMovieDBMovies("upcoming"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'topratedmovies': passDataToSkin('TopRatedMovies', GetMovieDBMovies("top_rated"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'popularmovies': passDataToSkin('PopularMovies', GetMovieDBMovies("popular"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'airingtodaytvshows': passDataToSkin('AiringTodayTVShows', GetMovieDBTVShows("airing_today"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'onairtvshows': passDataToSkin('OnAirTVShows', GetMovieDBTVShows("on_the_air"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'topratedtvshows': passDataToSkin('TopRatedTVShows', GetMovieDBTVShows("top_rated"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'populartvshows': passDataToSkin('PopularTVShows', GetMovieDBTVShows("popular"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'similarmovies': passDataToSkin('SimilarMovies', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.id: MovieId = self.id elif self.dbid and (int(self.dbid) > -1): MovieId = GetImdbID("movie", self.dbid) log("IMDBId from local DB:" + str(MovieId)) else: MovieId = "" if MovieId: passDataToSkin('SimilarMovies', GetSimilarMovies(MovieId), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'studio': passDataToSkin('StudioInfo', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.studio: CompanyId = SearchforCompany(self.studio) passDataToSkin('StudioInfo', GetCompanyInfo(CompanyId), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'set': passDataToSkin('MovieSetItems', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.dbid and not "show" in str(self.type): name = GetMovieSetName(self.dbid) if name: self.setid = SearchForSet(name) if self.setid: SetData = GetSetMovies(self.setid) if SetData: passDataToSkin('MovieSetItems', SetData, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'movielists': passDataToSkin('MovieLists', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.dbid: movieid = GetImdbID("movie", self.dbid) log("MovieDB Id:" + str(movieid)) if movieid: passDataToSkin('MovieLists', GetMovieLists(movieid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'keywords': passDataToSkin('Keywords', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.dbid: movieid = GetImdbID("movie", self.dbid) log("MovieDB Id:" + str(movieid)) if movieid: passDataToSkin('Keywords', GetMovieKeywords(movieid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'popularpeople': passDataToSkin('PopularPeople', GetPopularActorList(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'extendedinfo': from DialogVideoInfo import DialogVideoInfo if self.handle: xbmcplugin.endOfDirectory(self.handle) dialog = DialogVideoInfo(u'script-%s-DialogVideoInfo.xml' % __addonname__, __cwd__, id=self.id, dbid=self.dbid, imdbid=self.imdbid, name=self.name) dialog.doModal() elif info == 'extendedactorinfo': from DialogActorInfo import DialogActorInfo dialog = DialogActorInfo(u'script-%s-DialogInfo.xml' % __addonname__, __cwd__, id=self.id, name=self.name) dialog.doModal() elif info == 'extendedtvinfo': if self.id: tvshowinfo = GetTVShowInfo(self.id) if tvshowinfo: # prettyprint(tvshowinfo) passHomeDataToSkin(tvshowinfo[0], self.prop_prefix) elif info == 'seasoninfo': passDataToSkin("SeasonVideos", None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.tvshow and self.season: seasoninfo, videos = GetSeasonInfo(self.tvshow, self.season) passHomeDataToSkin(seasoninfo, self.prop_prefix) passDataToSkin("SeasonVideos", videos, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'directormovies': passDataToSkin('DirectorMovies', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.director: directorid = GetPersonID(self.director) if directorid: passDataToSkin('DirectorMovies', GetDirectorMovies(directorid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'writermovies': passDataToSkin('WriterMovies', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.writer and not self.writer.split(" / ")[0] == self.director.split(" / ")[0]: writerid = GetPersonID(self.writer) if writerid: passDataToSkin('WriterMovies', GetDirectorMovies(writerid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'similarmoviestrakt': passDataToSkin('SimilarTrakt', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if (self.id or self.dbid): if self.dbid: movieid = GetImdbID("movie", self.dbid) else: movieid = self.id passDataToSkin('SimilarMovies', GetSimilarTrakt("movie", movieid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'similartvshowstrakt': passDataToSkin('SimilarTrakt', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if (self.id or self.dbid): if self.dbid: if self.type == "episode": tvshowid = GetImdbIDfromEpisode(self.dbid) else: tvshowid = GetImdbID("tvshow", self.dbid) else: tvshowid = self.id passDataToSkin('SimilarTVShows', GetSimilarTrakt("show", tvshowid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'airingshows': passDataToSkin('AiringShows', GetTraktCalendarShows("shows"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'premiereshows': passDataToSkin('PremiereShows', GetTraktCalendarShows("premieres"), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'trendingshows': passDataToSkin('TrendingShows', GetTrendingShows(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'trendingmovies': passDataToSkin('TrendingMovies', GetTrendingMovies(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'similarartistsinlibrary': passDataToSkin('SimilarArtists', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.Artist_mbid: passDataToSkin('SimilarArtists', GetSimilarArtistsInLibrary(self.Artist_mbid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'artistevents': passDataToSkin('ArtistEvents', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.Artist_mbid: passDataToSkin('ArtistEvents', GetEvents(self.Artist_mbid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'youtubesearch': homewindow.setProperty('%sSearchValue' % self.prop_prefix, self.id) # set properties passDataToSkin('YoutubeSearch', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.id: passDataToSkin('YoutubeSearch', GetYoutubeSearchVideosV3(self.id, self.hd, self.orderby), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'youtubeplaylist': passDataToSkin('YoutubePlaylist', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.id: passDataToSkin('YoutubePlaylist', GetYoutubePlaylistVideos(self.id), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'youtubeusersearch': passDataToSkin('YoutubeUserSearch', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.id: passDataToSkin('YoutubeUserSearch', GetYoutubeUserVideos(self.id), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'nearevents': passDataToSkin('NearEvents', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('NearEvents', GetNearEvents(self.tag, self.festivalsonly, self.lat, self.lon, self.location, self.distance), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'trackinfo': homewindow.setProperty('%sSummary' % self.prop_prefix, "") # set properties if self.ArtistName and self.TrackName: TrackInfo = GetTrackInfo(self.ArtistName, self.TrackName) homewindow.setProperty('%sSummary' % self.prop_prefix, TrackInfo["summary"]) # set properties elif info == 'venueevents': passDataToSkin('VenueEvents', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) if self.location: self.id = GetVenueID(self.location) if self.id: passDataToSkin('VenueEvents', GetVenueEvents(self.id), self.prop_prefix, self.window, self.control, self.handle, self.limit) else: Notify("Error", "Could not find venue") elif info == 'topartistsnearevents': passDataToSkin('TopArtistsNearEvents', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) artists = GetXBMCArtists() events = GetArtistNearEvents(artists["result"]["artists"][0:49]) passDataToSkin('TopArtistsNearEvents', events, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'channels': channels = create_channel_list() # prettyprint(channels) elif info == 'favourites': if self.id: favourites = GetFavouriteswithType(self.id) else: favourites = GetFavourites() homewindow.setProperty('favourite.count', str(len(favourites))) if len(favourites) > 0: homewindow.setProperty('favourite.1.name', favourites[-1]["Label"]) passDataToSkin('Favourites', favourites, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'json': passDataToSkin('RSS', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) videos = GetYoutubeVideos(self.feed, self.prop_prefix) passDataToSkin('RSS', videos, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'similarlocal' and self.dbid: passDataToSkin('SimilarLocalMovies', None, self.prop_prefix, self.window, self.control, self.handle, self.limit) passDataToSkin('SimilarLocalMovies', GetSimilarFromOwnLibrary(self.dbid), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'iconpanel': passDataToSkin('IconPanel', GetIconPanel(1), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'weather': passDataToSkin('WeatherImages', GetWeatherImages(), self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'updatexbmcdatabasewithartistmbidbg': SetMusicBrainzIDsForAllArtists(False, False) elif info == 'setfocus': self.control = "" # workaround to avoid breaking PlayMedia xbmc.executebuiltin("SetFocus(22222)") elif info == 'playliststats': GetPlaylistStats(self.id) elif info == "sortletters": listitems = GetSortLetters(self.path, self.id) passDataToSkin('SortLetters', listitems, self.prop_prefix, self.window, self.control, self.handle, self.limit) elif info == 'slideshow': windowid = xbmcgui.getCurrentWindowId() Window = xbmcgui.Window(windowid) focusid = Window.getFocusId() itemlist = Window.getFocus() numitems = itemlist.getSelectedPosition() log("items:" + str(numitems)) for i in range(0, numitems): Notify(item.getProperty("Image")) elif info == 'action': xbmc.executebuiltin(self.id) elif info == "youtubevideo": if self.id: self.control = "" # workaround to avoid breaking PlayMedia import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(self.id, quality=1) stream_url = vid.streamURL() log("Youtube Trailer:" + stream_url) xbmc.executebuiltin("PlayMedia(%s)" % stream_url) elif info == 'playtrailer': xbmc.executebuiltin("ActivateWindow(busydialog)") xbmc.sleep(500) if self.id: MovieId = self.id elif self.dbid and (int(self.dbid) > -1): MovieId = GetImdbID("movie", self.dbid) log("MovieDBID from local DB:" + str(MovieId)) elif self.imdbid: MovieId = GetMovieDBID(self.imdbid) else: MovieId = "" if MovieId: trailer = GetTrailer(MovieId) xbmc.executebuiltin("Dialog.Close(busydialog)") if trailer: xbmc.executebuiltin("PlayMedia(%s)" % trailer) self.control = "" # workaround to avoid breaking PlayMedia else: Notify("Error", "No Trailer available") elif info == 'updatexbmcdatabasewithartistmbid': SetMusicBrainzIDsForAllArtists(True, False)
def download_epizodu(title, url): try: soup = get_soup(url) tag = soup.find('div', {'id': 'Playerholder'}) frames = tag.findAll('iframe') if len(frames) > 1: sources = [] for i in range(len(frames)): sources += ['%s. dio' % (i + 1)] dialog = xbmcgui.Dialog() index = dialog.select('Odaberite:', sources) li = xbmcgui.ListItem('%s' % title) li.setInfo('video', {'title': '%s' % title}) if index > -1: link = frames[index] title = title + ' (%s od %s)' % (index + 1, len(frames)) link = link['src'] try: from lib.resolvers import dailymotion resolved = dailymotion.resolve(link) resolved = resolved[0]['url'] except: try: import urlresolver resolved = urlresolver.resolve(link) except: try: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link, quality=1) resolved = vid.streamURL() except: pass download(title, resolved) return else: return except: pass try: soup = get_soup(url) link = soup.findAll('iframe')[1]['src'] except: try: soup = get_soup(url) link = soup.findAll('iframe')[1]['src'] except: try: soup = get_soup(url) try: link = soup.find('div', { 'id': 'Playerholder' }).find('embed')['src'] except: link = soup.find('div', { 'id': 'Playerholder' }).find('iframe')['src'] except: html = read_url(url).lower() ind = html.index('player.src') html = html[ind:ind + 80] reg = r'watch\?v=(.+?)"' link = re.findall(re.compile(reg), html)[0] link = 'http://www.youtube.com/watch?v=' + link if 'moevideo' in link or 'playreplay' in link: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link, quality=1) resolved = vid.streamURL() else: try: from lib.resolvers import dailymotion resolved = dailymotion.resolve(link) resolved = resolved[0]['url'] except: try: import urlresolver resolved = urlresolver.resolve(link) except: try: import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(link, quality=1) resolved = vid.streamURL() except: pass download(title, resolved)
def onClick(self, controlID): homewindow.setProperty("WindowColor", xbmc.getInfoLabel("Window(home).Property(movie.ImageColor)")) if controlID in [50, 750]: actorid = self.getControl(controlID).getSelectedItem().getProperty("id") AddToWindowStack("video", self.MovieId) dialog = DialogActorInfo.DialogActorInfo(u'script-%s-DialogInfo.xml' % __addonname__, __cwd__, id=actorid) self.close() dialog.doModal() elif controlID in [150, 250]: movieid = self.getControl(controlID).getSelectedItem().getProperty("id") self.close() AddToWindowStack("video", self.MovieId) dialog = DialogVideoInfo(u'script-%s-DialogVideoInfo.xml' % __addonname__, __cwd__, id=movieid) dialog.doModal() elif controlID == 350: listitem = self.getControl(350).getSelectedItem() import YDStreamExtractor YDStreamExtractor.disableDASHVideo(True) vid = YDStreamExtractor.getVideoInfo(listitem.getProperty("youtube_id"), quality=1) stream_url = vid.streamURL() self.close() log("Youtube Trailer:" + stream_url) xbmc.executebuiltin("PlayMedia(%s)" % stream_url) elif controlID == 550: xbmc.executebuiltin("ActivateWindow(busydialog)") studioitems = GetCompanyInfo(self.getControl(controlID).getSelectedItem().getProperty("id")) AddToWindowStack("video", self.MovieId) self.close() dialog = DialogVideoList.DialogVideoList(u'script-%s-VideoList.xml' % __addonname__, __cwd__, listitems=studioitems) xbmc.executebuiltin("Dialog.Close(busydialog)") dialog.doModal() elif controlID == 950: xbmc.executebuiltin("ActivateWindow(busydialog)") keywordid = self.getControl(controlID).getSelectedItem().getProperty("id") keyworditems = GetMoviesWithKeyword(keywordid) AddToWindowStack("video", self.MovieId) self.close() xbmc.executebuiltin("Dialog.Close(busydialog)") dialog = DialogVideoList.DialogVideoList(u'script-%s-VideoList.xml' % __addonname__, __cwd__, listitems=keyworditems) dialog.doModal() elif controlID == 850: xbmc.executebuiltin("ActivateWindow(busydialog)") genreid = self.getControl(controlID).getSelectedItem().getProperty("id") genreitems = GetMoviesWithGenre(genreid) AddToWindowStack("video", self.MovieId) self.close() dialog = DialogVideoList.DialogVideoList(u'script-%s-VideoList.xml' % __addonname__, __cwd__, listitems=genreitems) xbmc.executebuiltin("Dialog.Close(busydialog)") dialog.doModal() elif controlID == 650: xbmc.executebuiltin("ActivateWindow(busydialog)") country = self.getControl(controlID).getSelectedItem().getProperty("iso_3166_1") certification = self.getControl(controlID).getSelectedItem().getProperty("certification") cert_items = GetMoviesWithCertification(country, certification) AddToWindowStack("video", self.MovieId) self.close() dialog = DialogVideoList.DialogVideoList(u'script-%s-VideoList.xml' % __addonname__, __cwd__, listitems=cert_items) xbmc.executebuiltin("Dialog.Close(busydialog)") dialog.doModal() elif controlID == 450: xbmc.executebuiltin("ActivateWindow(busydialog)") list_items = GetMoviesFromList(self.getControl(controlID).getSelectedItem().getProperty("id")) self.close() AddToWindowStack("video", self.MovieId) dialog = DialogVideoList.DialogVideoList(u'script-%s-VideoList.xml' % __addonname__, __cwd__, listitems=list_items) xbmc.executebuiltin("Dialog.Close(busydialog)") dialog.doModal()