16
16
from .. import keys
17
17
from ..api .parameters import Boolean
18
18
from ..parser import m3u8 , clip_embed
19
- from ..queries import ClipsQuery , HiddenApiQuery , UsherQuery
19
+ from ..queries import ClipsQuery , HiddenApiQuery , UsherQuery , GQLQuery
20
20
from ..queries import query
21
21
from ..log import log
22
22
@@ -33,21 +33,35 @@ def valid_video_id(video_id):
33
33
34
34
@query
35
35
def channel_token (channel , platform = keys .WEB , headers = {}):
36
- q = HiddenApiQuery ('channels/{channel}/access_token' , headers = headers )
37
- q .add_urlkw (keys .CHANNEL , channel )
38
- q .add_param (keys .NEED_HTTPS , Boolean .TRUE )
39
- q .add_param (keys .PLATFORM , platform )
40
- q .add_param (keys .PLAYER_BACKEND , keys .MEDIAPLAYER )
36
+ data = [{
37
+ "operationName" : "PlaybackAccessToken_Template" ,
38
+ "query" : "query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: \" web\" , playerBackend: \" mediaplayer\" , playerType: $playerType}) @include(if: $isLive) { value signature __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: \" web\" , playerBackend: \" mediaplayer\" , playerType: $playerType}) @include(if: $isVod) { value signature __typename }}" ,
39
+ "variables" : {
40
+ "isLive" : True ,
41
+ "login" : channel ,
42
+ "isVod" : False ,
43
+ "vodID" : "" ,
44
+ "playerType" : "site"
45
+ }
46
+ }]
47
+ q = GQLQuery ('' , headers = headers , data = data , use_token = True )
41
48
return q
42
49
43
50
44
51
@query
45
52
def vod_token (video_id , platform = keys .WEB , headers = {}):
46
- q = HiddenApiQuery ('vods/{vod}/access_token' , headers = headers )
47
- q .add_urlkw (keys .VOD , video_id )
48
- q .add_param (keys .NEED_HTTPS , Boolean .TRUE )
49
- q .add_param (keys .PLATFORM , platform )
50
- q .add_param (keys .PLAYER_BACKEND , keys .MEDIAPLAYER )
53
+ data = [{
54
+ "operationName" : "PlaybackAccessToken_Template" ,
55
+ "query" : "query PlaybackAccessToken_Template($login: String!, $isLive: Boolean!, $vodID: ID!, $isVod: Boolean!, $playerType: String!) { streamPlaybackAccessToken(channelName: $login, params: {platform: \" web\" , playerBackend: \" mediaplayer\" , playerType: $playerType}) @include(if: $isLive) { value signature __typename } videoPlaybackAccessToken(id: $vodID, params: {platform: \" web\" , playerBackend: \" mediaplayer\" , playerType: $playerType}) @include(if: $isVod) { value signature __typename }}" ,
56
+ "variables" : {
57
+ "isLive" : False ,
58
+ "login" : "" ,
59
+ "isVod" : True ,
60
+ "vodID" : video_id ,
61
+ "playerType" : "site"
62
+ }
63
+ }]
64
+ q = GQLQuery ('' , headers = headers , data = data , use_token = True )
51
65
return q
52
66
53
67
@@ -63,10 +77,13 @@ def live_request(channel, platform=keys.WEB, headers={}):
63
77
if keys .ERROR in token :
64
78
return token
65
79
else :
80
+ token = token [0 ][keys .DATA ][keys .STREAM_PLAYBACK_ACCESS_TOKEN ]
81
+ signature = token [keys .SIGNATURE ]
82
+ access_token = token [keys .VALUE ]
66
83
q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
67
84
q .add_urlkw (keys .CHANNEL , channel )
68
- q .add_param (keys .SIG , token [ keys . SIG ] .encode ('utf-8' ))
69
- q .add_param (keys .TOKEN , token [ keys . TOKEN ] .encode ('utf-8' ))
85
+ q .add_param (keys .SIG , signature .encode ('utf-8' ))
86
+ q .add_param (keys .TOKEN , access_token .encode ('utf-8' ))
70
87
q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
71
88
q .add_param (keys .ALLOW_SPECTRE , Boolean .TRUE )
72
89
q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
@@ -84,10 +101,13 @@ def live_request(channel, platform=keys.WEB, headers={}):
84
101
85
102
@query
86
103
def _live (channel , token , headers = {}):
104
+ token = token [0 ][keys .DATA ][keys .STREAM_PLAYBACK_ACCESS_TOKEN ]
105
+ signature = token [keys .SIGNATURE ]
106
+ access_token = token [keys .VALUE ]
87
107
q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
88
108
q .add_urlkw (keys .CHANNEL , channel )
89
- q .add_param (keys .SIG , token [ keys . SIG ] .encode ('utf-8' ))
90
- q .add_param (keys .TOKEN , token [ keys . TOKEN ] .encode ('utf-8' ))
109
+ q .add_param (keys .SIG , signature .encode ('utf-8' ))
110
+ q .add_param (keys .TOKEN , access_token .encode ('utf-8' ))
91
111
q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
92
112
q .add_param (keys .ALLOW_SPECTRE , Boolean .TRUE )
93
113
q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
@@ -116,10 +136,13 @@ def video_request(video_id, platform=keys.WEB, headers={}):
116
136
if keys .ERROR in token :
117
137
return token
118
138
else :
139
+ token = token [0 ][keys .DATA ][keys .VIDEO_PLAYBACK_ACCESS_TOKEN ]
140
+ signature = token [keys .SIGNATURE ]
141
+ access_token = token [keys .VALUE ]
119
142
q = UsherQuery ('vod/{id}' , headers = headers )
120
143
q .add_urlkw (keys .ID , video_id )
121
- q .add_param (keys .NAUTHSIG , token [ keys . SIG ] .encode ('utf-8' ))
122
- q .add_param (keys .NAUTH , token [ keys . TOKEN ] .encode ('utf-8' ))
144
+ q .add_param (keys .NAUTHSIG , signature .encode ('utf-8' ))
145
+ q .add_param (keys .NAUTH , access_token .encode ('utf-8' ))
123
146
q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
124
147
q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
125
148
q .add_param (keys .CDM , keys .WV )
@@ -140,10 +163,13 @@ def video_request(video_id, platform=keys.WEB, headers={}):
140
163
141
164
@query
142
165
def _vod (video_id , token , headers = {}):
166
+ token = token [0 ][keys .DATA ][keys .VIDEO_PLAYBACK_ACCESS_TOKEN ]
167
+ signature = token [keys .SIGNATURE ]
168
+ access_token = token [keys .VALUE ]
143
169
q = UsherQuery ('vod/{id}' , headers = headers )
144
170
q .add_urlkw (keys .ID , video_id )
145
- q .add_param (keys .NAUTHSIG , token [ keys . SIG ] .encode ('utf-8' ))
146
- q .add_param (keys .NAUTH , token [ keys . TOKEN ] .encode ('utf-8' ))
171
+ q .add_param (keys .NAUTHSIG , signature .encode ('utf-8' ))
172
+ q .add_param (keys .NAUTH , access_token .encode ('utf-8' ))
147
173
q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
148
174
q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
149
175
q .add_param (keys .CDM , keys .WV )
0 commit comments