diff --git a/app/routes.py b/app/routes.py index a295c6c..fe26ed4 100644 --- a/app/routes.py +++ b/app/routes.py @@ -321,8 +321,13 @@ def watch(): id = request.args.get('v', None) info = ytvids.get_video_info(id) hostName = urllib.parse.urlparse(info['video']['url']).netloc + # Use nginx - url = info['video']['url'].replace(hostName, config['serverName'])+"&hostname="+hostName + try: + url = info['video']['url'].replace(hostName, config['serverName'])+"&hostname="+hostName + except: + url = "#" + video={ 'title':info['video']['title'], 'description':Markup(markupString(info['video']['description'])), diff --git a/app/static/img/live.png b/app/static/img/live.png new file mode 100644 index 0000000..d4b3a87 Binary files /dev/null and b/app/static/img/live.png differ diff --git a/app/static/img/scheduled.png b/app/static/img/scheduled.png new file mode 100644 index 0000000..982f8ce Binary files /dev/null and b/app/static/img/scheduled.png differ diff --git a/app/templates/video.html b/app/templates/video.html index 25183ab..853d9aa 100644 --- a/app/templates/video.html +++ b/app/templates/video.html @@ -4,20 +4,32 @@ {% extends "base.html" %} {% block content %}
-
- + {% if video.nginxUrl == "#" and video.isLive %} +
+ Empty feed image
+ {% elif video.isUpcoming %} +
+
+ Empty feed image +
+
+ {%else%} +
+ +
+ {%endif%}
diff --git a/youtube_data/channels.py b/youtube_data/channels.py new file mode 100644 index 0000000..e69de29 diff --git a/youtube_data/utils.py b/youtube_data/utils.py deleted file mode 100644 index 4812f3b..0000000 --- a/youtube_data/utils.py +++ /dev/null @@ -1,59 +0,0 @@ -import requests -import urllib.parse -import json -from bs4 import BeautifulSoup as bs - -nested_renderer_dispatch = { - 'singleColumnBrowseResultsRenderer', - 'twoColumnBrowseResultsRenderer', # Channel renderer - 'twoColumnSearchResultsRenderer', -} - -# these renderers contain a list of renderers inside them -nested_renderer_list_dispatch = { - 'sectionListRenderer', - 'itemSectionRenderer', - 'gridRenderer', - 'playlistVideoListRenderer', - 'singleColumnWatchNextResults', -} - -_item_types = { - 'movieRenderer', - 'didYouMeanRenderer', - 'showingResultsForRenderer', - - 'videoRenderer', - 'compactVideoRenderer', - 'compactAutoplayRenderer', - 'videoWithContextRenderer', - 'gridVideoRenderer', - 'playlistVideoRenderer', - - 'playlistRenderer', - 'compactPlaylistRenderer', - 'gridPlaylistRenderer', - - 'radioRenderer', - 'compactRadioRenderer', - 'gridRadioRenderer', - - 'showRenderer', - 'compactShowRenderer', - 'gridShowRenderer', - - - 'channelRenderer', - 'compactChannelRenderer', - 'gridChannelRenderer', -} - - -def getRenderers(data): - renderers = [] - for renderer in nested_renderer_dispatch: - renderers.append(data['contents'][renderer]) - return renderers - -def getRenderedItems(renderer): - '''Given a renderer, return its items''' diff --git a/youtube_data/videos.py b/youtube_data/videos.py index fb93d51..5592486 100644 --- a/youtube_data/videos.py +++ b/youtube_data/videos.py @@ -17,19 +17,28 @@ def get_video_primary_info(datad, datai): details = datad['videoDetails'] try: isUpcoming = details['isUpcoming'] + views = "Scheduled video" except: isUpcoming = False + if not isUpcoming: + views = details['viewCount'] + ydl = YoutubeDL() - data = ydl.extract_info(details['videoId'], False) - if not details['isLiveContent']: - url = data['formats'][-1]['url'] + try: + data = ydl.extract_info(details['videoId'], False) + if not details['isLiveContent']: + url = data['formats'][-1]['url'] + else: + url = data['formats'][-1]['url'] + except: + url = "#" try: primaryInfo = { "id": details['videoId'], "title": details['title'], "description": details['shortDescription'], - "views": details['viewCount'], + "views": views, "duration": details['lengthSeconds'], "date": item['dateText']['simpleText'], "rating": details['averageRating'], @@ -53,9 +62,10 @@ def get_video_primary_info(datad, datai): "rating": details['averageRating'], "author": details['author'], "isPrivate":False, - "isLive":False, - "isUpcoming":False, + "isLive":details['isLiveContent'], + "isUpcoming":isUpcoming, "allowRatings":True, + "url":url, "thumbnail": details['thumbnail']['thumbnails'][0]['url'] } return primaryInfo