diff options
-rw-r--r-- | youtube/comments.py | 57 | ||||
-rw-r--r-- | youtube/templates/comments.html | 20 | ||||
-rw-r--r-- | youtube/templates/shared.css | 1 |
3 files changed, 56 insertions, 22 deletions
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 @@ <a class="sort-button" href="{{ link_url }}">{{ link_text }}</a> {% endfor %} </div> - <div class="comments"> - {% for comment in comments_info['comments'] %} - {{ render_comment(comment, comments_info['include_avatars'], True) }} - {% endfor %} - </div> - {% if 'more_comments_url' is in comments_info %} - <a class="page-button more-comments" href="{{ comments_info['more_comments_url'] }}">More comments</a> + {% if comments_info['error'] %} + <div class="comments"> + <div class="code-box"><code>{{ comments_info['error'] }}</code></div> + </div> + {% else %} + <div class="comments"> + {% for comment in comments_info['comments'] %} + {{ render_comment(comment, comments_info['include_avatars'], True) }} + {% endfor %} + </div> + {% if 'more_comments_url' is in comments_info %} + <a class="page-button more-comments" href="{{ comments_info['more_comments_url'] }}">More comments</a> + {% 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; |