aboutsummaryrefslogtreecommitdiffstats
path: root/youtube
diff options
context:
space:
mode:
Diffstat (limited to 'youtube')
-rw-r--r--youtube/comments.py57
-rw-r--r--youtube/templates/comments.html20
-rw-r--r--youtube/templates/shared.css1
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;