1616from .. import keys
1717from ..api .parameters import Boolean
1818from ..parser import m3u8 , clip_embed
19- from ..queries import ClipsQuery , HiddenApiQuery , UsherQuery
19+ from ..queries import ClipsQuery , HiddenApiQuery , UsherQuery , GQLQuery
2020from ..queries import query
2121from ..log import log
2222
@@ -33,21 +33,35 @@ def valid_video_id(video_id):
3333
3434@query
3535def 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 )
4148 return q
4249
4350
4451@query
4552def 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 )
5165 return q
5266
5367
@@ -63,10 +77,13 @@ def live_request(channel, platform=keys.WEB, headers={}):
6377 if keys .ERROR in token :
6478 return token
6579 else :
80+ token = token [0 ][keys .DATA ][keys .STREAM_PLAYBACK_ACCESS_TOKEN ]
81+ signature = token [keys .SIGNATURE ]
82+ access_token = token [keys .VALUE ]
6683 q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
6784 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' ))
7087 q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
7188 q .add_param (keys .ALLOW_SPECTRE , Boolean .TRUE )
7289 q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
@@ -84,10 +101,13 @@ def live_request(channel, platform=keys.WEB, headers={}):
84101
85102@query
86103def _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 ]
87107 q = UsherQuery ('api/channel/hls/{channel}.m3u8' , headers = headers )
88108 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' ))
91111 q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
92112 q .add_param (keys .ALLOW_SPECTRE , Boolean .TRUE )
93113 q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
@@ -116,10 +136,13 @@ def video_request(video_id, platform=keys.WEB, headers={}):
116136 if keys .ERROR in token :
117137 return token
118138 else :
139+ token = token [0 ][keys .DATA ][keys .VIDEO_PLAYBACK_ACCESS_TOKEN ]
140+ signature = token [keys .SIGNATURE ]
141+ access_token = token [keys .VALUE ]
119142 q = UsherQuery ('vod/{id}' , headers = headers )
120143 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' ))
123146 q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
124147 q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
125148 q .add_param (keys .CDM , keys .WV )
@@ -140,10 +163,13 @@ def video_request(video_id, platform=keys.WEB, headers={}):
140163
141164@query
142165def _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 ]
143169 q = UsherQuery ('vod/{id}' , headers = headers )
144170 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' ))
147173 q .add_param (keys .ALLOW_SOURCE , Boolean .TRUE )
148174 q .add_param (keys .ALLOW_AUDIO_ONLY , Boolean .TRUE )
149175 q .add_param (keys .CDM , keys .WV )
0 commit comments