diff options
-rw-r--r-- | http_errors.py | 11 | ||||
-rw-r--r-- | server.py | 6 | ||||
-rw-r--r-- | youtube/channel.py | 6 |
3 files changed, 22 insertions, 1 deletions
diff --git a/http_errors.py b/http_errors.py new file mode 100644 index 0000000..975e0d4 --- /dev/null +++ b/http_errors.py @@ -0,0 +1,11 @@ +class Error4xx(Exception): + pass +class Error404(Error4xx): + pass + +class Error5xx(Exception): + pass +class Error500(Error5xx): + pass +class Error502(Error5xx): + pass @@ -4,6 +4,7 @@ import gevent.socket from gevent.pywsgi import WSGIServer from youtube.youtube import youtube +import http_errors import urllib import socket import socks @@ -114,7 +115,10 @@ def site_dispatch(env, start_response): yield error_code('404 Not Found', start_response) return - + except http_errors.Error404 as e: + start_response('404 Not Found', ()) + yield str(e).encode('utf-8') + except socket.error as e: start_response('502 Bad Gateway', ()) print(str(e)) diff --git a/youtube/channel.py b/youtube/channel.py index 8c44700..d246495 100644 --- a/youtube/channel.py +++ b/youtube/channel.py @@ -1,6 +1,7 @@ import base64 import youtube.common as common from youtube.common import default_multi_get, URL_ORIGIN, get_thumbnail_url, video_id +import http_errors import urllib import json from string import Template @@ -193,6 +194,11 @@ def channel_videos_html(polymer_json, current_page=1, current_sort=3, number_of_ for alert in response['alerts']: result += alert['alertRenderer']['text']['simpleText'] + '\n' return result + elif 'errors' in response['responseContext']: + for error in response['responseContext']['errors']['error']: + if error['code'] == 'INVALID_VALUE' and error['location'] == 'browse_id': + raise http_errors.Error404('This channel does not exist') + raise else: raise channel_url = microformat['urlCanonical'].rstrip('/') |