
    yf2                     `    d dl mZ ddlmZ ddlmZmZmZmZ  G d de      Z	 G d de	      Z
y	)
   )InfoExtractor   )
compat_str)parse_iso8601ExtractorErrortry_getmimetype2extc                   |    e Zd ZdZdZdZdddiddd	d
deeddd	ddddgZdZdZ	dZ
ddddZd Zd ZdefdZd Zy)FancodeVodIEFzfancode:vodz6https?://(?:www\.)?fancode\.com/video/(?P<id>[0-9]+)\bz8https://fancode.com/video/15043/match-preview-pbks-vs-miskip_downloadT6249806281001mp4zMatch Preview: PBKS vs MIzre:^https?://.*\.jpg$iv9`202104226008340455001)	idexttitle	thumbnail	timestamp
view_count
like_countupload_dateuploader_id)urlparams	info_dictzhttps://fancode.com/video/15043r   only_matchingNfancodezRUse "--username refresh --password <refresh_token>" to login using a refresh tokenzapplication/jsonzhttps://fancode.com)zcontent-typeoriginrefererc                 N   |dk7  r| j                  d| j                          | j                          d|z  }| j                  d|d      }t	        |d       | _        | j
                  | j                  d       y | j                  j                  dd	| j
                  z  i       y )
Nrefreshz>Login using username and password is not currently supported. a
  {
            "query":"mutation RefreshToken($refreshToken: String\u0021) { refreshToken(refreshToken: $refreshToken) { accessToken }}",
            "variables":{
                "refreshToken":"%s"
            },
            "operationName":"RefreshToken"
        }zrefresh tokenzGetting the Access tokenc                     | d   d   d   S )NdatarefreshTokenaccessToken xs    :/usr/lib/python3/dist-packages/yt_dlp/extractor/fancode.py<lambda>z-FancodeVodIE._perform_login.<locals>.<lambda>A   s    1V9^;TUb;c     zFailed to get Access tokenAuthorizationz	Bearer %s)report_warning_LOGIN_HINTreport_logindownload_gqlr   _ACCESS_TOKENheadersupdate)selfusernamepasswordr%   
token_jsons        r+   _perform_loginzFancodeVodIE._perform_login2   s    y "`aeaqaq`r st  &&>XY
$Z1cd% <=LL+@R@R2R STr-   c                     d }|r| j                   d| j                   }n|s| j                   d}|r| j                  |dd        y y )Nz3This video is only available for registered users. z;This video isn't available to the current logged in accountT)metadata_availablemethod)r3   r0   raise_login_required)r6   is_available
is_premiummsgs       r+   _check_login_requiredz"FancodeVodIE._check_login_requiredG   sX    $,,4GHXHXGYZC$"4"4"@PC%%cd4%P r-   c                 L    | j                  d||j                         |||      S )Nzhttps://www.fancode.com/graphql)r%   noter4   fatal)_download_jsonencode)r6   variabler%   rD   rE   r4   s         r+   r2   zFancodeVodIE.download_gqlP   s/    ""-xT5 # * 	*r-   c                     d}| j                  |      }d}d|z  }| j                  ||d      }t        |d t              xs i }t        |d t              }|t        d      |j                  d	      }	| j                  |j                  d
      |	       d|||fz  d||d   |j                  d      |j                  d      |j                  d      t        |j                  d            | j                  |	      d
S )NzGhttps://players.brightcove.net/%s/default_default/index.html?videoId=%sr   a  {
            "query":"query Video($id: Int\u0021, $filter: SegmentFilter) { media(id: $id, filter: $filter) { id contentId title contentId publishedTime totalViews totalUpvotes provider thumbnail { src } mediaSource {brightcove } duration isPremium isUserEntitled tags duration }}",
            "variables":{
                "id":%s,
                "filter":{
                    "contentDataType":"DEFAULT"
                }
            },
            "operationName":"Video"
        }zDownloading metadata)rD   c                     | d   d   S )Nr%   mediar(   r)   s    r+   r,   z,FancodeVodIE._real_extract.<locals>.<lambda>i   s    671C r-   c                     | d   d   S )NmediaSource
brightcover(   r)   s    r+   r,   z,FancodeVodIE._real_extract.<locals>.<lambda>j   s    q7G7U r-   z%Unable to extract brightcove Video ID	isPremiumisUserEntitledurl_transparentBrightcoveNewr   totalUpvotes
totalViewstagspublishedTime)needs_premium)
_typer   ie_keyr   r   r   r   rU   release_timestampavailability)
	_match_idr2   r   dictr   r   getrB   r   _availability)
r6   r   BRIGHTCOVE_URL_TEMPLATEvideo_idbrightcove_user_idr%   metadata_jsonrK   brightcove_video_idr@   s
             r+   _real_extractzFancodeVodIE._real_extractV   s   "k>>#&,	 	 ))(D?U)V'CTJPb%e-UWab& !HIIYY{+
""599-=#>
K '*.@BU-VV%7^))N3))L1IIf%!.uyy/I!J ..Z.H
 	
r-   )__name__
__module____qualname___WORKINGIE_NAME
_VALID_URLint_TESTSr3   _NETRC_MACHINEr0   r4   r:   rB   r2   re   r(   r-   r+   r   r      s    HGJJ JT
 "01#%*

" 1!F* MNfK +'(GU*Q 8=g *(
r-   r   c                   J    e Zd ZdZdZdZdddddd	d
ddddd	ddd	dgZd Zy)FancodeLiveIEFzfancode:livez4https?://(www\.)?fancode\.com/match/(?P<id>[0-9]+).+z[https://fancode.com/match/35328/cricket-fancode-ecs-hungary-2021-bub-vs-blb?slug=commentary35328r   z
BUB vs BLBips`T20210628)r   r   r   r   is_liver   Ended)r   r   skipz https://fancode.com/match/35328/r   z.https://fancode.com/match/35567?slug=scorecardc           
         | j                  |      }d|z  }| j                  ||d      }t        |d       }|j                  d      dk7  rt	        dd      | j                  |j                  d	      d       ||j                  d
      | j                  t        |d       |      t        t        |d             dt        |j                  d            dS )Na  {
            "query":"query MatchResponse($id: Int\u0021, $isLoggedIn: Boolean\u0021) { match: matchWithScores(id: $id) { id matchDesc mediaId videoStreamId videoStreamUrl { ...VideoSource } liveStreams { videoStreamId videoStreamUrl { ...VideoSource } contentId } name startTime streamingStatus isPremium isUserEntitled @include(if: $isLoggedIn) status metaTags bgImage { src } sport { name slug } tour { id name } squads { name shortName } liveStreams { contentId } mediaId }}fragment VideoSource on VideoSource { title description posterUrl url deliveryType playerType}",
            "variables":{
                "id":%s,
                "isLoggedIn":true
            },
            "operationName":"MatchResponse"
        }z	Info jsonc                     | d   d   S )Nr%   matchr(   r)   s    r+   r,   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    !F)G2D r-   streamingStatusSTARTEDzThe stream can't be accessedT)expectedrP   namec                     | d   d   S )NvideoStreamUrlr   r(   r)   s    r+   r,   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    RSTdRefkRl r-   c                     | d   d   S )Nr~   deliveryTyper(   r)   s    r+   r,   z-FancodeLiveIE._real_extract.<locals>.<lambda>   s    a@P>QR`>a r-   	startTime)r   r   formatsr   rs   rZ   )	r\   r2   r   r^   r   rB   _extract_akamai_formatsr	   r   )r6   r   r   r%   	info_json
match_infos         r+   re   zFancodeLiveIE._real_extract   s    ^^C   %%b$<	Y(DE
>>+,	9 !@4PP"":>>2B#CTJ ^^F+33GJHl4moqr
4a bc!.z~~k/J!K
 	
r-   N)rf   rg   rh   ri   rj   rk   rm   re   r(   r-   r+   rp   rp      s_    HGHJ m!#%
  2 @F&
r-   rp   N)commonr   compatr   utilsr   r   r   r	   r   rp   r(   r-   r+   <module>r      s0    !  r
= r
j4
L 4
r-   