def channel(connect_handle, id_number): url = urls.base_url + urls.channel_url % (plugin_info.get_setting('language'), id_number) response = connect_handle.url(url) content = connect_handle.json(response) for item in content['items']: title = item['title'] thumb = item['landscape_large'] date = int(re.search('(\d+)', item['schedule_date_time']).groups()[0]) date = string.decode(time.strftime('%d.%m.%Y', time.gmtime(date / 1000.0))) duration = int(item['duration']) * 60 mediatype = 'video' mpaa = item['rating'] plot = item['synopsis'] sorttitle = item['sort_title'] tagline = item['information'] add.video(title=title, mode='play', thumb=thumb, id_number=id_number, date=date, duration=duration, mediatype=mediatype, mpaa=mpaa, plot=plot, sorttitle=sorttitle, tagline=tagline) xbmcplugin.setContent(plugin_handle, 'movies') if plugin_info.get_setting('force_view') == 'true': xbmc.executebuiltin('Container.SetViewMode(%s)' % plugin_info.get_setting('view_id_live')) xbmcplugin.endOfDirectory(plugin_handle)
def video_add(video_metadata, removable = False, viewing_activity = False): add.video(video_metadata, removable, viewing_activity = viewing_activity)
def video(video_id, title, thumb_url, is_episode, hide_movies, video_type, url): added = False year = '' mpaa = '' duration = '' description = '' director = '' genre = '' rating = 0.0 video_details = get.video_info(video_id) match = re.compile('<span class="title.*?>(.+?)</span', re.DOTALL).findall(video_details) if not title: title = match[0].strip() match = re.compile('<span class="year.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: year = match[0].partition('-')[0] if not thumb_url: match = re.compile('src="(.+?)"', re.DOTALL).findall(video_details) thumb_url = match[0].replace('/webp/', '/images/').replace('.webp', '.jpg') match = re.compile('<span class="mpaaRating.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: mpaa = match[0].strip() match = re.compile('<span class="duration.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: duration = match[0].lower() if duration.split(' ')[-1].startswith('min'): type = 'movie' video_type_temp = type duration = duration.split(' ')[0] else: video_type_temp = 'tv' if is_episode: type = 'episode' else: type = 'tvshow' duration = '' if utility.get_setting('use_tmdb') == 'true': year_temp = year title_temp = title if ' - ' in title_temp: title_temp = title_temp[title_temp.index(' - '):] if '-' in year_temp: year_temp = year_temp.split('-')[0] filename = utility.clean_filename(video_id) + '.jpg' filename_none = utility.clean_filename(video_id) + '.none' cover_file = xbmc.translatePath(utility.cover_cache_dir() + filename) cover_file_none = xbmc.translatePath(utility.cover_cache_dir() + filename_none) if not (xbmcvfs.exists(cover_file) or xbmcvfs.exists(cover_file_none)): utility.log( 'Downloading cover art. type: %s, video_id: %s, title: %s, year: %s' % (video_type_temp, video_id, title_temp, year_temp)) get.cover(video_type_temp, video_id, title_temp, year_temp) match = re.compile('src=".+?">.*?<.*?>(.+?)<', re.DOTALL).findall(video_details) if match: description_temp = match[0] # replace all embedded unicode in unicode (Norwegian problem) description_temp = description_temp.replace('u2013', unicode('\u2013')).replace( 'u2026', unicode('\u2026')) description = utility.unescape(description_temp) match = re.compile('Director:</dt><dd>(.+?)<', re.DOTALL).findall(video_details) if match: director = match[0].strip() match = re.compile('<span class="genre.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: genre = match[0] match = re.compile('<span class="rating">(.+?)</span', re.DOTALL).findall(video_details) if len(match) > 0: rating = float(match[0]) title = utility.unescape(title) next_mode = 'play_video_main' if utility.get_setting('browse_tv_shows') == 'true' and type == 'tvshow': next_mode = 'list_seasons' if '/my-list' in url and video_type_temp == video_type: add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, remove=True) added = True elif type == 'movie' and hide_movies: pass elif video_type_temp == video_type or video_type == 'both': add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating) added = True return added
def video(video_id, title, thumb_url, is_episode, hide_movies, video_type, url): added = False director = '' genre = '' playcount = 0 video_details = get.video_info(video_id) match = json.loads(video_details)['value']['videos'][video_id] if not title: title = match['title'] year = match['releaseYear'] if not thumb_url: try: thumb_url = match['boxarts']['_665x375']['jpg']['url'] except Exception: try: thumb_url = match['boxarts']['_342x192']['jpg']['url'] except Exception: thumb_url = utility.addon_fanart() mpaa = match['maturity']['rating']['value'] duration = match['runtime'] offset = match['bookmarkPosition'] try: if (duration > 0 and float(offset) / float(duration)) >= 0.9: playcount = 1 except Exception: pass type = match['summary']['type'] if type == 'movie': video_type_temp = type else: video_type_temp = 'tv' if is_episode: type = 'episode' else: type = 'tvshow' duration = '' if utility.get_setting('use_tmdb') == 'true': year_temp = year title_temp = title if ' - ' in title_temp: title_temp = title_temp[title_temp.index(' - '):] filename = video_id + '.jpg' filename_none = video_id + '.none' cover_file = xbmc.translatePath(utility.cover_cache_dir() + filename) cover_file_none = xbmc.translatePath(utility.cover_cache_dir() + filename_none) if not (xbmcvfs.exists(cover_file) or xbmcvfs.exists(cover_file_none)): utility.log('Downloading cover art. type: %s, video_id: %s, title: %s, year: %s' % (video_type_temp, video_id, title_temp, year_temp)) get.cover(video_type_temp, video_id, title_temp, year_temp) description = match['details']['synopsis'] try: director = match['details']['directors'][0]['name'] except Exception: pass try: genre = match['details']['genres'][0]['name'] except Exception: pass rating = match['userRating']['average'] next_mode = 'play_video_main' if utility.get_setting('browse_tv_shows') == 'true' and type == 'tvshow': next_mode = 'list_seasons' if '/my-list' in url and video_type_temp == video_type: add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, playcount, remove=True) added = True elif type == 'movie' and hide_movies: pass elif video_type_temp == video_type or video_type == 'both': add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, playcount) added = True return added
def sorting(connect_handle, id_number, sort): genre_list = {} trailer = '' url = urls.base_url + urls.landing_url % (plugin_info.get_setting('language'), id_number) params = 'orderBy=%s&page=0&size=20' % sort response = connect_handle.url(url, params=params) content = connect_handle.json(response) for genre in content['genres']: genre_list[genre['id']] = genre['name'] for item in content['items']: genres = [] try: title = item['series_title'] year = 0 except KeyError: title = item['title'] year = item['information'] id_number = content['id'] thumb = item['landscape_thumbnail'].replace('140x79', '745x419').replace('140_79', '745_419') try: duration = int(item['duration']) * 60 except KeyError: duration = 0 try: episode = int(item['episode_number']) except KeyError: episode = 0 enddate = int(re.search('(\d+)', item['offer']['end_date']).groups()[0]) enddate = string.decode(time.strftime('%Y-%m-%d', time.gmtime(enddate / 1000.0))) for genre in item['primary_genres_ids']: if genre != item['genre']: try: genres.append(genre_list[genre]) except KeyError: pass genres = ', '.join(genres) mediatype = 'video' mpaa = item['rating'] plot = item['synopsis'] try: season = int(re.match('S(\d+)', item['information']).groups()[0]) except AttributeError: season = 0 sorttitle = item['sort_title'] startdate = int(re.search('(\d+)', item['offer']['start_date']).groups()[0]) startdate = string.decode(time.strftime('%Y-%m-%d', time.gmtime(startdate / 1000.0))) try: for trailer in item['trailer_items']: if 'cellular' in trailer: trailer = trailer['url'] except KeyError: trailer = '' add.video(title=title, mode='play', thumb=thumb, id_number=id_number, duration=duration, episode=episode, enddate=enddate, genre=genres, mediatype=mediatype, mpaa=mpaa, plot=plot, season=season, sorttitle=sorttitle, startdate=startdate, trailer=trailer, year=year) xbmcplugin.setContent(plugin_handle, 'movies') xbmcplugin.addSortMethod(plugin_handle, 10) xbmcplugin.addSortMethod(plugin_handle, 16) xbmcplugin.addSortMethod(plugin_handle, 18) xbmcplugin.addSortMethod(plugin_handle, 21) xbmcplugin.addSortMethod(plugin_handle, 44) if plugin_info.get_setting('force_view') == 'true': xbmc.executebuiltin('Container.SetViewMode(%s)' % plugin_info.get_setting('view_id_videos')) xbmcplugin.endOfDirectory(plugin_handle)
def video_add(video_metadata, removable=False, viewing_activity=False): add.video(video_metadata, removable, viewing_activity=viewing_activity)
def video(video_id, title, thumb_url, is_episode, hide_movies, video_type, url): added = False director = '' genre = '' playcount = 0 video_details = get.video_info(video_id) match = json.loads(video_details)['value']['videos'][video_id] if not title: title = match['title'] year = match['releaseYear'] if not thumb_url: try: thumb_url = match['boxarts']['_665x375']['jpg']['url'] except Exception: try: thumb_url = match['boxarts']['_342x192']['jpg']['url'] except Exception: thumb_url = utility.addon_fanart() mpaa = match['maturity']['rating']['value'] duration = match['runtime'] offset = match['bookmarkPosition'] try: if (duration > 0 and float(offset) / float(duration)) >= 0.9: playcount = 1 except Exception: pass type = match['summary']['type'] if type == 'movie': video_type_temp = type else: video_type_temp = 'tv' if is_episode: type = 'episode' else: type = 'tvshow' duration = '' if utility.get_setting('use_tmdb') == 'true': year_temp = year title_temp = title if ' - ' in title_temp: title_temp = title_temp[title_temp.index(' - '):] filename = video_id + '.jpg' filename_none = video_id + '.none' cover_file = xbmc.translatePath(utility.cover_cache_dir() + filename) cover_file_none = xbmc.translatePath(utility.cover_cache_dir() + filename_none) if not (xbmcvfs.exists(cover_file) or xbmcvfs.exists(cover_file_none)): utility.log( 'Downloading cover art. type: %s, video_id: %s, title: %s, year: %s' % (video_type_temp, video_id, title_temp, year_temp)) get.cover(video_type_temp, video_id, title_temp, year_temp) description = match['details']['synopsis'] try: director = match['details']['directors'][0]['name'] except Exception: pass try: genre = match['details']['genres'][0]['name'] except Exception: pass rating = match['userRating']['average'] next_mode = 'play_video_main' if utility.get_setting('browse_tv_shows') == 'true' and type == 'tvshow': next_mode = 'list_seasons' if '/my-list' in url and video_type_temp == video_type: add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, playcount, remove=True) added = True elif type == 'movie' and hide_movies: pass elif video_type_temp == video_type or video_type == 'both': add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, playcount) added = True return added
def video(video_id, title, thumb_url, is_episode, hide_movies, video_type, url): added = False year = '' mpaa = '' duration = '' description = '' director = '' genre = '' rating = 0.0 video_details = get.video_info(video_id) match = re.compile('<span class="title.*?>(.+?)</span', re.DOTALL).findall(video_details) if not title: title = match[0].strip() match = re.compile('<span class="year.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: year = match[0].partition('-')[0] if not thumb_url: match = re.compile('src="(.+?)"', re.DOTALL).findall(video_details) thumb_url = match[0].replace('/webp/', '/images/').replace('.webp', '.jpg') match = re.compile('<span class="mpaaRating.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: mpaa = match[0].strip() match = re.compile('<span class="duration.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: duration = match[0].lower() if duration.split(' ')[-1].startswith('min'): type = 'movie' video_type_temp = type duration = duration.split(' ')[0] else: video_type_temp = 'tv' if is_episode: type = 'episode' else: type = 'tvshow' duration = '' if utility.get_setting('use_tmdb') == 'true': year_temp = year title_temp = title if ' - ' in title_temp: title_temp = title_temp[title_temp.index(' - '):] if '-' in year_temp: year_temp = year_temp.split('-')[0] filename = utility.clean_filename(video_id) + '.jpg' filename_none = utility.clean_filename(video_id) + '.none' cover_file = xbmc.translatePath(utility.cover_cache_dir() + filename) cover_file_none = xbmc.translatePath(utility.cover_cache_dir() + filename_none) if not (xbmcvfs.exists(cover_file) or xbmcvfs.exists(cover_file_none)): utility.log('Downloading cover art. type: %s, video_id: %s, title: %s, year: %s' % (video_type_temp, video_id, title_temp, year_temp)) get.cover(video_type_temp, video_id, title_temp, year_temp) match = re.compile('src=".+?">.*?<.*?>(.+?)<', re.DOTALL).findall(video_details) if match: description_temp = match[0] # replace all embedded unicode in unicode (Norwegian problem) description_temp = description_temp.replace('u2013', unicode('\u2013')).replace('u2026', unicode('\u2026')) description = utility.unescape(description_temp) match = re.compile('Director:</dt><dd>(.+?)<', re.DOTALL).findall(video_details) if match: director = match[0].strip() match = re.compile('<span class="genre.*?>(.+?)</span', re.DOTALL).findall(video_details) if match: genre = match[0] match = re.compile('<span class="rating">(.+?)</span', re.DOTALL).findall(video_details) if len(match) > 0: rating = float(match[0]) title = utility.unescape(title) next_mode = 'play_video_main' if utility.get_setting('browse_tv_shows') == 'true' and type == 'tvshow': next_mode = 'list_seasons' if '/my-list' in url and video_type_temp == video_type: add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating, remove=True) added = True elif type == 'movie' and hide_movies: pass elif video_type_temp == video_type or video_type == 'both': add.video(title, video_id, next_mode, thumb_url, type, description, duration, year, mpaa, director, genre, rating) added = True return added