o
    iC                     @   sH   d dl mZ ddlmZmZmZmZ G dd deZG dd deZdS )	   )InfoExtractor   )ExtractorErrormimetype2extparse_iso8601try_getc                   @   s   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d Zdd ZdefddZdd ZdS ) 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                 C   s|   |dkr|  d| j  |   d| }| d|d}t|dd | _| jd u r0|  d d S | jd	d
| j i d S )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                 S   s   | d d d S )NdatarefreshTokenaccessToken xr#   r#   L/home/ubuntu/.local/lib/python3.10/site-packages/yt_dlp/extractor/fancode.py<lambda>:   s    z-FancodeVodIE._perform_login.<locals>.<lambda>zFailed to get Access tokenAuthorizationzBearer )report_warning_LOGIN_HINTreport_logindownload_gqlr   _ACCESS_TOKENheadersupdate)selfusernamepasswordr    
token_jsonr#   r#   r&   _perform_login+   s   
zFancodeVodIE._perform_loginc                 C   sN   d }|r| j d u rd| j }n	|s| j d urd}|r%| j|dd d d S d S )Nz3This video is only available for registered users. z;This video isn't available to the current logged in accountT)metadata_availablemethod)r-   r*   raise_login_required)r0   is_available
is_premiummsgr#   r#   r&   _check_login_required@   s   z"FancodeVodIE._check_login_requiredc                 C   s   | j d|| |||dS )Nzhttps://www.fancode.com/graphql)r    noter.   fatal)_download_jsonencode)r0   variabler    r<   r=   r.   r#   r#   r&   r,   I   s
   zFancodeVodIE.download_gqlc           
      C   s   d}|  |}d}d| }| j||dd}t|dd tpi }t|dd t}|d u r/td	|d
}	| |d|	 d|||f d||d |d|d|dt|d| j	|	d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)r<   c                 S      | d d S )Nr    mediar#   r$   r#   r#   r&   r'   b       z,FancodeVodIE._real_extract.<locals>.<lambda>c                 S   rA   )NmediaSource
brightcover#   r$   r#   r#   r&   r'   c   rC   z%Unable to extract brightcove Video ID	isPremiumisUserEntitledurl_transparentBrightcoveNewr   totalUpvotes
totalViewstagspublishedTime)needs_premium)
_typer   ie_keyr   r   r   r   rL   release_timestampavailability)
	_match_idr,   r   dictstrr   getr;   r   _availability)
r0   r   BRIGHTCOVE_URL_TEMPLATEvideo_idbrightcove_user_idr    metadata_jsonrB   brightcove_video_idr9   r#   r#   r&   _real_extractO   s0   
	


zFancodeVodIE._real_extract)__name__
__module____qualname___WORKINGIE_NAME
_VALID_URLint_TESTSr-   _NETRC_MACHINEr*   r.   r4   r;   r,   r]   r#   r#   r#   r&   r      sB    	r   c                   @   sL   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d ZdS )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              	   C   s   |  |}d| }| ||d}t|dd }|ddkr$tddd	| |d
d ||d| t|dd |tt|dd dt|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                 S   rA   )Nr    matchr#   r$   r#   r#   r&   r'      rC   z-FancodeLiveIE._real_extract.<locals>.<lambda>streamingStatusSTARTEDzThe stream can't be accessedT)expectedrG   namec                 S   rA   )NvideoStreamUrlr   r#   r$   r#   r#   r&   r'      rC   c                 S   rA   )Nrr   deliveryTyper#   r$   r#   r#   r&   r'      rC   	startTime)r   r   formatsr   rj   rQ   )	rS   r,   r   rV   r   r;   _extract_akamai_formatsr   r   )r0   r   rY   r    	info_json
match_infor#   r#   r&   r]      s    
	zFancodeLiveIE._real_extractN)r^   r_   r`   ra   rb   rc   re   r]   r#   r#   r#   r&   rg   z   s,    rg   N)	commonr   utilsr   r   r   r   r   rg   r#   r#   r#   r&   <module>   s    u