
    VGh'O                         d dl Z d dlZd dlZd dlZddlmZ ddlmZmZm	Z	m
Z
mZmZmZmZmZmZmZmZmZ ddlmZmZ  G d de      Z G d	 d
e      Z G d de      Z G d de      Zy)    N   )InfoExtractor   )KNOWN_EXTENSIONSExtractorErrorextract_attributesfloat_or_noneint_or_noneparse_filesizestr_or_nonetry_getunified_strdateunified_timestampupdate_url_queryurl_or_noneurljoin)find_elementtraverse_objc                       e Zd ZdZdgZddi ddddd	d
ddddddddddddddddddddddddgddgd d!d"i dd#dd$d%d&d	d'dd(dd)dd*dd+d,d-d.d+dd/dd0d1d2dd#dd)dd)d3d4d5d6d7d8d9d:i dd;ddd	d<dd(dd=dd>dd?d,d@d.dAddBddCd1dDdd;dd=dd=d3dEddFddGidHdIdJi ddKddd	dLdd(ddMddNddOd,dPd.dQddRddSd1dTddKddMddUd3dVddWddXidHgZd\dYZdZ Zy[)]
BandcampIEzBhttps?://(?P<uploader>[^/]+)\.bandcamp\.com/track/(?P<id>[^/?#&]+)zC<meta property="og:url"[^>]*?content="(?P<url>.*?bandcamp\.com.*?)"z9http://youtube-dl.bandcamp.com/track/youtube-dl-test-song c557841d5e50261777a6585648adf439id
1812978515extmp3titleuL   youtube-dl "'/\ä↭ - youtube-dl "'/\ä↭ - youtube-dl test song "'/\ä↭durationgOn#@uploaderu   youtube-dl "'/\ä↭upload_date20121129	timestampiѷPtracku5   youtube-dl "'/\ä↭ - youtube-dl test song "'/\ä↭album_artisttrack_idartistuploader_urlzhttps://youtube-dl.bandcamp.comuploader_idz
youtube-dl	thumbnailz+https://f4.bcbits.com/img/a3216802731_5.jpgartistsalbum_artistsz@There is a limit of 200 free downloads / month for the test song)urlmd5	info_dictskipz1http://benprunty.bandcamp.com/track/lanius-battle
2650410135m4aacodecz
re:[fa]laczBen Prunty - Lanius (Battle)zre:^https?://.*\.jpg$z
Ben PruntyiK=S20140403release_timestampi<Srelease_dategy&1Np@zLanius (Battle)track_numberr   albumz FTL: Advanced Edition Soundtrackzhttps://benprunty.bandcamp.com	benprunty)r&   r'   )r+   r-   z5https://relapsealumni.bandcamp.com/track/hail-to-fire fec12ff55e804bb7f7ebeb77a800c8b7
2584466013zMastodon - Hail to FireMastodoni3N20111122i*$@20040207g(\2^@zHail to Fire   zCall of the Mastodonz"https://relapsealumni.bandcamp.comrelapsealumni)r+   r,   r-   z/https://diskotopia.bandcamp.com/track/safehouse 19c5337bca1428afa54129f86a2f6a69
1978174799zsubmerse - submerse - Safehousesubmersei!BX20161203i QGX20161207g'1Bc@zsubmerse - Safehouse   
Diskotopiaz"DSK F/W 2016-2017 Free Compilationzhttps://diskotopia.bandcamp.com
diskotopiac                 ^    | j                  | j                  d| d||dz   d      ||      S )Nzdata-z=(["\'])({.+?})\1z datar   )groupfatal)_parse_json_html_search_regex)selfwebpagevideo_idattrrJ   s        b/var/www/it7/html/youtubeDownloader/venv/lib/python3.12/site-packages/yt_dlp/extractor/bandcamp.py_extract_data_attrzBandcampIE._extract_data_attr|   sI     7 7TF-.7N! !8 !%&.e   = 	=    c                 "
   | j                  |      j                  dd      \  }}| j                  ||      }| j                  ||      }| j	                  |      }d }d }d }	d }
g }t        |d t              }|r|j                  d      }t        |t              rj|j                         D ]W  \  }}t        |      s|j                  dd      \  }}|j                  || j                  |d      |d|t        |      d	       Y |j                  d
      }t        |j                  d      xs |j                  d            }t        |j                  d            }	t!        |j                  d            }
| j                  ||dd      }|j                  d      xs i }|j                  d      xs$ |j                  d      xs |j                  d      }| j#                  d|dd      }t%        |j                  d      xs |j                  d            }|j                  d      }|r_t'        |d         }| j                  ||d      }| j                  ||d      }t        |d d ft              }|r|j                  d      }t        |t              r|s|j                  d
      }|s|j                  d      }|s|j                  d      }i }|j                  d      }t        |t(              rU|d   D ]M  }|j                  d      |j                  d       }}t+        d! ||fD              s:|j-                  d"      ||<   O |j                         D ],  \  }}|j                  d#      }|st/        |j1                  d$d%      d&t3        t5        j4                         d'z  t7        j6                         z        i      } |j                  d(      xs |}| j9                  | |d)| d*d+ d,      }!|!st        |!j                  d-            }"|"s|j                  | j                  |"d      |j                  |      ||j                  d.      t;        |j                  d/            d|j                  d      d0   d1       / |r| d2| n|}|
st!        | j=                  d|d 3            }
i d|d
|d4|d|d5|d6d7| d8d9|d:t%        |j                  d;            d|
d<|d=|	d|d|d>|j                  d?      d@|dA|S )BNr   r   c                     | d   d   S )N	trackinfor    xs    rQ   <lambda>z*BandcampIE._real_extract.<locals>.<lambda>   s    +q0A rS   file-r   zhttp:none)	format_idr+   r   vcodecr1   abrr   r$   	track_numr   embedFcurrentr%   zO<h3 class="albumTitle">[\S\s]*?by\s*<span>\s*<a href="[^>]+">\s*([^>]+?)\s*</a>zalbum artistrI   publish_datealbum_publish_datefreeDownloadPagezDownloading free downloads pageblobc                     | d   d   S )Ndigital_itemsr   rW   rX   s    rQ   rZ   z*BandcampIE._real_extract.<locals>.<lambda>   s    ?!3A!6 rS   c                     | d   d   S )Ndownload_itemsr   rW   rX   s    rQ   rZ   z*BandcampIE._real_extract.<locals>.<lambda>   s    #3!4Q!7 rS   	downloads	thumb_urldownload_formatsnamefile_extensionc              3   <   K   | ]  }t        |t                y w)N)
isinstancestr).0rY   s     rQ   	<genexpr>z+BandcampIE._real_extract.<locals>.<genexpr>   s     "K!:a#5"Ks   .r+   z
/download/z/statdownload/z.randi  encoding_namezDownloading z JSONc                 N    | | j                  d      | j                  d      dz    S )N{}r   )indexrindex)ss    rQ   rZ   z*BandcampIE._real_extract.<locals>.<lambda>   s#    qahhsmVWFW7X rS   )transform_sourcerJ   	retry_urldescriptionsize_mbr   )r+   r   r^   format_notefilesizer_   r1    - )defaultr(   r'   r&   zhttps://z.bandcamp.comr!   r3   album_release_dater"   r5   r6   album_titler#   formats)_match_valid_urlrH   _download_webpagerR   _og_search_thumbnailr   dictgetrr   itemsr   splitappend_proto_relative_urlr
   r   r	   rL   r   rs   listallstripr   replaceinttimerandom_download_jsonr   _html_search_meta)#rM   r+   r   r   rN   tralbumr(   r$   r"   r5   r   r   
track_infofile_r^   
format_urlr   abr_strrb   rc   r%   r#   r!   download_linkdownload_webpagerg   inforl   rn   download_formats_listfro   stat_urlstatr   s#                                      rQ   _real_extractzBandcampIE._real_extract   s   //4::4Lx((e4))'59--g6	W&A4H
NN6*E%&-2[[] )Iz&z2 #,??3#:LCNN%.#77
GL""("%*73$ 	 NN7+E"z*BjnnT.BDH&z~~k'BCL$Z^^J%?@H''G++i(.B8$VH(=VXAV..^^5 / 2 &KK'L7;;7K+LN	  $6774=)H#55x)J L **+;XvND679:>@D  HH[1	i.  $ 1!!%(!3$$(HH[$9	')$,0HH5G,H)!"7>!%&8!9 HA()fquu=M7N#D""Kc{"KK9<3 0 6H
 )2(9 	1%&UU5\
)$ $4&..|=MN 'TYY[4-?&--/-Q)RQ$ %&EE/$:$Gi	#22$h,yk0O-X"'  3  )  $$$/0E$F	($#'#;#;Iw#O#3#7#7	#B)2+,55+?(6quuY7G(H&,&/ooc&:1&=( )< *06(#eW%U$T%;%;GT &< &3 4H
(
U
 
 	

 8
 hxj>
 
  !27;;?S3T!U
 
 U
 L
 
 f
 UYY}-
 L
  w!
 	
rS   N)r   T)__name__
__module____qualname__
_VALID_URL_EMBED_REGEX_TESTSrR   r   rW   rS   rQ   r   r      s   VJZ[LJ1
,
5
 i
 	

 0
 :
 
 P
 4
 
 .
 =
 <
 F
 01
  67!
$ S+0 C
,
5
 m
 3	

 1
 
 
 :
  
 J
 
 &
 A
 
 l
  L!
" 7#
$ =&'
4 G1
,
5
 .
 1	

 

 
 :
  
 J
 
 ^
 A
 
 j
 J
  +!
" @#
$ ?%
	4 A1
,
5
 6
 1	

 

 
 :
  
 J
 
 +
 A
 
 j
 L
  9!
" =#
$ <%
	M^F@=
~
rS   r   c            	           e Zd ZdZdZddi ddddd	d
ddddddddddgdddddddddddddd d!dgd"d#d$did%d&i dd'ddd	d(dd)dddddd*ddd$d'dd+d"d,dddd ddddgd!dgddddid%gd d-dd.d/d0d+id1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@d9dAdBdCdDdEdFd+dGgZe fdH       ZdI Z xZ	S )JBandcampAlbumIEzBandcamp:albumzHhttps?://(?:(?P<subdomain>[^.]+)\.)?bandcamp\.com/album/(?P<id>[^/?#&]+)z9http://blazo.bandcamp.com/album/jazz-format-mixtape-vol-1 39bc1eded3476e927c724321ddf116cfr   
1353101989r   r   r   zBlazo - Intror!   i/Nr   20110727r   Blazor(   z+https://f4.bcbits.com/img/a1721150828_5.jpgr*   r&   zhttps://blazo.bandcamp.comr4   r3   g   @ՋAr"   Intror'   blazor5   r   r6   zJazz Format Mixtape vol.1r)   r   g(\U3@r$   )r,   r-    1a2c32e2691474643e912cc6cd4bffaa38097443z.Blazo - Kero One - Keep It Alive (Blazo remix)i/Nz&Kero One - Keep It Alive (Blazo remix)r   gmf@zjazz-format-mixtape-vol-1z$md5:38052a93217f3ffdc033cd5dbbce2989)r   r   r'   r   playlistendz!Bandcamp imposes download limits.)r+   playlistr-   paramsr.   zChttp://nightbringer.bandcamp.com/album/hierophany-of-the-open-gravezHierophany of the Open Gravenightbringerzhierophany-of-the-open-grave)r   r'   r   	   r+   r-   playlist_mincountz0https://jstrecords.bandcamp.com/album/entropy-epz"Entropy" EP
jstrecordsz
entropy-epz$md5:0ff22959c943622972596062f2f366a5)r   r'   r   r   rD   z6https://insulters.bandcamp.com/album/we-are-the-plaguezwe-are-the-plaguezWE ARE THE PLAGUE	insultersz$md5:b3cf845ee41b2b1141dc7bde9237255f)r   r   r'   r   r+   r-   playlist_countc                 z    t         j                  |      st        j                  |      rdS t        |   |      S )NF)BandcampWeeklyIEsuitabler   super)clsr+   	__class__s     rQ   r   zBandcampAlbumIE.suitable`  s<     $,,S1Z5H5H5M  	,W%c*	,rS   c                 n   | j                  |      j                         \  }}|xs |}| j                  ||      }| j                  ||      }|j	                  d      }|st        d      |D cg c]  }|j	                  d      rm| j                  t        ||d         t        j                         t        |j	                  d      xs |j	                  d            |j	                  d             }	}|j	                  d      xs i }
d	|||
j	                  d      |
j	                  d
      |	dS c c}w )NrV   z#The page doesn't contain any tracksr   
title_linkr$   r   r   rc   r   about)_typer'   r   r   r   entries)r   groupsr   rR   r   r   
url_resultr   r   ie_keyr   )rM   r+   r'   album_idplaylist_idrN   r   r   tr   rc   s              rQ   r   zBandcampAlbumIE._real_extractf  s-    $ 5 5c : A A CX-+((k:))';?[[-
 !GHH  	" uuZ 	 OOQ|_-z/@/@/BAEE*-<t=quuW~O" " ++i(.B  &[[)";;w/
 	
"s   /BD2)
r   r   r   IE_NAMEr   r   classmethodr   r   __classcell__)r   s   @rQ   r   r     s   G\J K :,5 _  	
 ":   !N $gY #$@ #J ( W "7 #A 8  y!" #$ %0 :*5 M  	
 ":  E #J 
 #A  #$@ 8 "7 $gY  y!"  !N#$ (%1/
b 1-"A	
 1
 4w<z U3)0

  B#'A	
 
 H%(&A	
 
]XFt , ,

rS   r   c                   J    e Zd ZdZdZddddddd	d
dddd	ddiddddgZd Zy)r   zBandcamp:weeklyz=https?://(?:www\.)?bandcamp\.com/?\?(?:.*?&)?show=(?P<id>\d+)zhttps://bandcamp.com/?show=224 61acc9a002bed93986b91168aa3ab433224r   z(BC Weekly April 4th 2017 - Magic Momentsz$md5:5d48150916e8e02d030623a48512c874gQŶ@20170404Bandcamp WeeklyzMagic Moments)	r   r   r   r   r   r4   seriesepisode
episode_idformatzmp3-128)r+   r,   r-   r   z)https://bandcamp.com/?blah/blah@&show=228T)r+   only_matchingc                 b   | j                  |      }| j                  ||      }| j                  ||d      }|d   |   }g }|d   j                         D ]<  \  }}t	        |      st
        D ]
  }	|	|v s|	}
 n d }
|j                  |||
dd       > |j                  d      xs d}|j                  d      }|r|d	| z  }|||j                  d
      xs |j                  d      t        |j                  d            dt        |j                  d            d|j                  d      ||d
S )Nrg   bcw_dataaudio_streamr]   )r^   r+   r   r_   audio_titler   subtitler   desc
short_descaudio_durationFpublished_date)
r   r   r   r   is_liver4   r   r   r   r   )
	_match_idr   rR   r   r   r   r   r   r	   r   )rM   r+   show_idrN   rg   showr   r^   r   	known_extr   r   r   s                rQ   r   zBandcampWeeklyIE._real_extract  sZ   ..%((g6&&w@J(%).%9%?%?%A 	!Izz*- 		)#C
 NN&! 	 	  '<+<88J's8*%%E 88F+Etxx/E%dhh/?&@A+DHH5E,FG'xx
+!
 	
rS   N)r   r   r   r   r   r   r   rW   rS   rQ   r   r     s\    GQJ/1?A&'&

 i
$ ;#F,)
rS   r   c            
           e Zd ZdZdZddddddd	d
ddddddddddddddddddddddddddddgZd Zd  Zy!)"BandcampUserIEzBandcamp:userzEhttps?://(?!www\.)(?P<id>[^.]+)\.bandcamp\.com(?:/music)?/?(?:[#?]|$)z%https://adrianvonziegler.bandcamp.comadrianvonzieglerzDiscography of adrianvonziegler)r   r      r   zhttp://dotscale.bandcamp.comdotscalezDiscography of dotscaler   r   z&https://nightcallofficial.bandcamp.comnightcallofficialz Discography of nightcallofficial   z'https://steviasphere.bandcamp.com/music/   steviaspherezDiscography of steviasphere)r+   r   r-   z,https://coldworldofficial.bandcamp.com/music   coldworldofficialz Discography of coldworldofficialz3https://nuclearwarnowproductions.bandcamp.com/musici  nuclearwarnowproductionsz'Discography of nuclearwarnowproductionsc           
   #      K   t        j                  d|      xs t        j                  d|      E d {    t        |t        dd      ht        hdt
        j                  hddt        hf      E d {    y 7 E7 w)	NzH<li data-item-id=["\'][^>]+>\s*<a href=["\'](?![^"\'/]*?/merch)([^"\']+)z-<div[^>]+trackTitle["\'][^"\']+["\']([^"\']+)z
music-gridT)r   htmlzdata-client-items.page_url)refindallr   r   r   jsonloadsrs   )rM   rN   s     rQ   _yield_itemszBandcampUserIE._yield_items  s     JJbdkl UzzJGT	V 	V  \569K8L$**sJ*G H 	H 	H		V	Hs!   2A>A:?A>4A<5A><A>c                     | j                  |      }| j                  ||      }| j                  | j                  |      |d| t	        |            S )NzDiscography of )getter)r   r   playlist_from_matchesr  r   )rM   r+   r   rN   s       rQ   r   zBandcampUserIE._real_extract  sZ    >>#&((h7))g&OH:2N3< * ! 	!rS   N)r   r   r   r   r   r   r  r   rW   rS   rQ   r   r     s    GYJ 7$6
   ..
  8%7
  9 2
 >%7
 E ,>
M-F^H!rS   r   )r   r   r   r   commonr   utilsr   r   r   r	   r
   r   r   r   r   r   r   r   r   utils.traversalr   r   r   r   r   r   rW   rS   rQ   <module>r	     sh      	  !    9f
 f
R}
j }
@B
z B
JB!] B!rS   