22
22
23
23
from six .moves .urllib .parse import urlencode
24
24
25
+ ACCESS_TOKEN_EXCEPTION = {
26
+ 'error' : 'Error' ,
27
+ 'message' : 'Failed to retrieve access token' ,
28
+ 'status' : 404
29
+ }
30
+
25
31
26
32
def valid_video_id (video_id ):
27
33
if video_id .startswith ('videos' ):
@@ -74,10 +80,11 @@ def _legacy_video(video_id):
74
80
75
81
def live_request (channel , platform = keys .WEB , headers = {}):
76
82
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
79
87
else :
80
- token = token [0 ][keys .DATA ][keys .STREAM_PLAYBACK_ACCESS_TOKEN ]
81
88
signature = token [keys .SIGNATURE ]
82
89
access_token = token [keys .VALUE ]
83
90
q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
@@ -94,16 +101,19 @@ def live_request(channel, platform=keys.WEB, headers={}):
94
101
q .add_param (keys .RTQOS , keys .CONTROL )
95
102
q .add_param (keys .PLAYER_BACKEND , keys .MEDIAPLAYER )
96
103
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
+ }
98
108
log .debug ('live_request: |{0}|' .format (str (request_dict )))
99
109
return request_dict
100
110
101
111
102
112
@query
103
113
def _live (channel , token , headers = {}):
104
- token = token [0 ][keys .DATA ][keys .STREAM_PLAYBACK_ACCESS_TOKEN ]
105
114
signature = token [keys .SIGNATURE ]
106
115
access_token = token [keys .VALUE ]
116
+
107
117
q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
108
118
q .add_urlkw (keys .CHANNEL , channel )
109
119
q .add_param (keys .SIG , signature .encode ('utf-8' ))
@@ -123,8 +133,9 @@ def _live(channel, token, headers={}):
123
133
@m3u8
124
134
def live (channel , platform = keys .WEB , headers = {}):
125
135
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
128
139
else :
129
140
return _live (channel , token , headers = headers )
130
141
@@ -133,10 +144,11 @@ def video_request(video_id, platform=keys.WEB, headers={}):
133
144
video_id = valid_video_id (video_id )
134
145
if video_id :
135
146
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
138
151
else :
139
- token = token [0 ][keys .DATA ][keys .VIDEO_PLAYBACK_ACCESS_TOKEN ]
140
152
signature = token [keys .SIGNATURE ]
141
153
access_token = token [keys .VALUE ]
142
154
q = UsherQuery ('vod/{id}' , headers = headers )
@@ -154,7 +166,10 @@ def video_request(video_id, platform=keys.WEB, headers={}):
154
166
q .add_param (keys .BAKING_BROWNIES , Boolean .TRUE )
155
167
q .add_param (keys .BAKING_BROWNIES_TIMEOUT , 1050 )
156
168
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
+ }
158
173
log .debug ('video_request: |{0}|' .format (str (request_dict )))
159
174
return request_dict
160
175
else :
@@ -163,9 +178,9 @@ def video_request(video_id, platform=keys.WEB, headers={}):
163
178
164
179
@query
165
180
def _vod (video_id , token , headers = {}):
166
- token = token [0 ][keys .DATA ][keys .VIDEO_PLAYBACK_ACCESS_TOKEN ]
167
181
signature = token [keys .SIGNATURE ]
168
182
access_token = token [keys .VALUE ]
183
+
169
184
q = UsherQuery ('vod/{id}' , headers = headers )
170
185
q .add_urlkw (keys .ID , video_id )
171
186
q .add_param (keys .NAUTHSIG , signature .encode ('utf-8' ))
@@ -188,8 +203,10 @@ def video(video_id, platform=keys.WEB, headers={}):
188
203
video_id = valid_video_id (video_id )
189
204
if video_id :
190
205
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
193
210
else :
194
211
return _vod (video_id , token , headers = headers )
195
212
else :
0 commit comments