From b126ce1aa674db4f8dd4e29d25e8ebd6b9c03c39 Mon Sep 17 00:00:00 2001 From: James Taylor Date: Sun, 29 Nov 2020 18:56:22 -0800 Subject: Video comments: replace with error message if there is error Such as 429 error, or an exception --- youtube/comments.py | 57 ++++++++++++++++++++++++++++++----------- youtube/templates/comments.html | 20 ++++++++++----- youtube/templates/shared.css | 1 + 3 files changed, 56 insertions(+), 22 deletions(-) (limited to 'youtube') diff --git a/youtube/comments.py b/youtube/comments.py index 8dc9d86..2fb1fa2 100644 --- a/youtube/comments.py +++ b/youtube/comments.py @@ -7,6 +7,7 @@ import json import base64 import urllib import re +import traceback import flask from flask import request @@ -137,23 +138,49 @@ def post_process_comments_info(comments_info): def video_comments(video_id, sort=0, offset=0, lc='', secret_key=''): - if settings.comments_mode: - comments_info = yt_data_extract.extract_comments_info(request_comments(make_comment_ctoken(video_id, sort, offset, lc, secret_key))) - post_process_comments_info(comments_info) - - other_sort_url = util.URL_ORIGIN + '/comments?ctoken=' + make_comment_ctoken(video_id, sort=1 - sort, lc=lc) - other_sort_text = 'Sort by ' + ('newest' if sort == 0 else 'top') - - this_sort_url = (util.URL_ORIGIN - + '/comments?ctoken=' - + make_comment_ctoken(video_id, sort=sort, lc=lc)) - - comments_info['comment_links'] = [(other_sort_text, other_sort_url), - ('Direct link', this_sort_url)] + try: + if settings.comments_mode: + comments_info = {'error': None} + other_sort_url = ( + util.URL_ORIGIN + '/comments?ctoken=' + + make_comment_ctoken(video_id, sort=1 - sort, lc=lc) + ) + other_sort_text = 'Sort by ' + ('newest' if sort == 0 else 'top') + + this_sort_url = (util.URL_ORIGIN + + '/comments?ctoken=' + + make_comment_ctoken(video_id, sort=sort, lc=lc)) + + comments_info['comment_links'] = [ + (other_sort_text, other_sort_url), + ('Direct link', this_sort_url) + ] + + comments_info.update(yt_data_extract.extract_comments_info( + request_comments( + make_comment_ctoken(video_id, sort, offset, lc, secret_key) + ) + )) + post_process_comments_info(comments_info) + + return comments_info + else: + return {} + except util.FetchError as e: + print('Error retrieving comments for ' + str(video_id)) + if e.code == '429' and settings.route_tor: + comments_info['error'] = 'Error: Youtube blocked the request because the Tor exit node is overutilized.' + if e.error_message: + comments_info['error'] += '\n\n' + e.error_message + comments_info['error'] += '\n\nExit node IP address: %s' % e.ip + else: + comments_info['error'] = traceback.format_exc() - return comments_info + except Exception as e: + print('Error retrieving comments for ' + str(video_id)) + comments_info['error'] = traceback.format_exc() - return {} + return comments_info diff --git a/youtube/templates/comments.html b/youtube/templates/comments.html index 8780e37..ad5ab02 100644 --- a/youtube/templates/comments.html +++ b/youtube/templates/comments.html @@ -43,13 +43,19 @@ {{ link_text }} {% endfor %} -
- {% for comment in comments_info['comments'] %} - {{ render_comment(comment, comments_info['include_avatars'], True) }} - {% endfor %} -
- {% if 'more_comments_url' is in comments_info %} - More comments + {% if comments_info['error'] %} +
+
{{ comments_info['error'] }}
+
+ {% else %} +
+ {% for comment in comments_info['comments'] %} + {{ render_comment(comment, comments_info['include_avatars'], True) }} + {% endfor %} +
+ {% if 'more_comments_url' is in comments_info %} + More comments + {% endif %} {% endif %} {% endmacro %} diff --git a/youtube/templates/shared.css b/youtube/templates/shared.css index ee0ceec..2863e7b 100644 --- a/youtube/templates/shared.css +++ b/youtube/templates/shared.css @@ -355,6 +355,7 @@ h1{ margin-bottom: 10px; } .code-box{ + white-space: pre-wrap; padding: 5px; border-style:solid; border-width:1px; -- cgit v1.2.3