Skip to content

Commit aa34842

Browse files
committed
handle missing token gracefully
1 parent d3badb5 commit aa34842

File tree

1 file changed

+31
-14
lines changed

1 file changed

+31
-14
lines changed

resources/lib/twitch/api/usher.py

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222

2323
from six.moves.urllib.parse import urlencode
2424

25+
ACCESS_TOKEN_EXCEPTION = {
26+
'error': 'Error',
27+
'message': 'Failed to retrieve access token',
28+
'status': 404
29+
}
30+
2531

2632
def valid_video_id(video_id):
2733
if video_id.startswith('videos'):
@@ -74,10 +80,11 @@ def _legacy_video(video_id):
7480

7581
def live_request(channel, platform=keys.WEB, headers={}):
7682
token = channel_token(channel, platform=platform, headers=headers)
77-
if keys.ERROR in token:
78-
return token
83+
token = token[0][keys.DATA][keys.STREAM_PLAYBACK_ACCESS_TOKEN]
84+
85+
if not token:
86+
return ACCESS_TOKEN_EXCEPTION
7987
else:
80-
token = token[0][keys.DATA][keys.STREAM_PLAYBACK_ACCESS_TOKEN]
8188
signature = token[keys.SIGNATURE]
8289
access_token = token[keys.VALUE]
8390
q = UsherQuery('api/channel/hls/{channel}.m3u8', headers=headers)
@@ -94,16 +101,19 @@ def live_request(channel, platform=keys.WEB, headers={}):
94101
q.add_param(keys.RTQOS, keys.CONTROL)
95102
q.add_param(keys.PLAYER_BACKEND, keys.MEDIAPLAYER)
96103
url = '?'.join([q.url, urlencode(q.params)])
97-
request_dict = {'url': url, 'headers': q.headers}
104+
request_dict = {
105+
'url': url,
106+
'headers': q.headers
107+
}
98108
log.debug('live_request: |{0}|'.format(str(request_dict)))
99109
return request_dict
100110

101111

102112
@query
103113
def _live(channel, token, headers={}):
104-
token = token[0][keys.DATA][keys.STREAM_PLAYBACK_ACCESS_TOKEN]
105114
signature = token[keys.SIGNATURE]
106115
access_token = token[keys.VALUE]
116+
107117
q = UsherQuery('api/channel/hls/{channel}.m3u8', headers=headers)
108118
q.add_urlkw(keys.CHANNEL, channel)
109119
q.add_param(keys.SIG, signature.encode('utf-8'))
@@ -123,8 +133,9 @@ def _live(channel, token, headers={}):
123133
@m3u8
124134
def live(channel, platform=keys.WEB, headers={}):
125135
token = channel_token(channel, platform=platform, headers=headers)
126-
if keys.ERROR in token:
127-
return token
136+
token = token[0][keys.DATA][keys.STREAM_PLAYBACK_ACCESS_TOKEN]
137+
if not token:
138+
return ACCESS_TOKEN_EXCEPTION
128139
else:
129140
return _live(channel, token, headers=headers)
130141

@@ -133,10 +144,11 @@ def video_request(video_id, platform=keys.WEB, headers={}):
133144
video_id = valid_video_id(video_id)
134145
if video_id:
135146
token = vod_token(video_id, platform=platform, headers=headers)
136-
if keys.ERROR in token:
137-
return token
147+
token = token[0][keys.DATA][keys.VIDEO_PLAYBACK_ACCESS_TOKEN]
148+
149+
if not token:
150+
return ACCESS_TOKEN_EXCEPTION
138151
else:
139-
token = token[0][keys.DATA][keys.VIDEO_PLAYBACK_ACCESS_TOKEN]
140152
signature = token[keys.SIGNATURE]
141153
access_token = token[keys.VALUE]
142154
q = UsherQuery('vod/{id}', headers=headers)
@@ -154,7 +166,10 @@ def video_request(video_id, platform=keys.WEB, headers={}):
154166
q.add_param(keys.BAKING_BROWNIES, Boolean.TRUE)
155167
q.add_param(keys.BAKING_BROWNIES_TIMEOUT, 1050)
156168
url = '?'.join([q.url, urlencode(q.params)])
157-
request_dict = {'url': url, 'headers': q.headers}
169+
request_dict = {
170+
'url': url,
171+
'headers': q.headers
172+
}
158173
log.debug('video_request: |{0}|'.format(str(request_dict)))
159174
return request_dict
160175
else:
@@ -163,9 +178,9 @@ def video_request(video_id, platform=keys.WEB, headers={}):
163178

164179
@query
165180
def _vod(video_id, token, headers={}):
166-
token = token[0][keys.DATA][keys.VIDEO_PLAYBACK_ACCESS_TOKEN]
167181
signature = token[keys.SIGNATURE]
168182
access_token = token[keys.VALUE]
183+
169184
q = UsherQuery('vod/{id}', headers=headers)
170185
q.add_urlkw(keys.ID, video_id)
171186
q.add_param(keys.NAUTHSIG, signature.encode('utf-8'))
@@ -188,8 +203,10 @@ def video(video_id, platform=keys.WEB, headers={}):
188203
video_id = valid_video_id(video_id)
189204
if video_id:
190205
token = vod_token(video_id, platform=platform, headers=headers)
191-
if keys.ERROR in token:
192-
return token
206+
token = token[0][keys.DATA][keys.VIDEO_PLAYBACK_ACCESS_TOKEN]
207+
208+
if not token:
209+
return ACCESS_TOKEN_EXCEPTION
193210
else:
194211
return _vod(video_id, token, headers=headers)
195212
else:

0 commit comments

Comments
 (0)