
    i@                         S r SSKJrJr  SSKJrJr  S r " S S\5      r\R                  SS	S
S.05      r
 " S S\5      r " S S\5      r " S S\5      r " S S\5      r " S S5      rg	)zExtractors for Blogger blogs   )BaseExtractorMessage   )textutilc                 p    [         R                  " S5      R                  SU 5      R                  SSS5      $ )Nz!(/|=)(?:[sw]\d+|w\d+-h\d+)(?=/|$)z\1s0zhttp:zhttps:r   )r   resubreplace)urls    I/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/blogger.pyoriginalr      s.    GG89S#WWh*,    c                   F    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
 rS rSrg)BloggerExtractor   z!Base class for blogger extractorsblogger)r   z{blog[name]}z#{post[date]:%Y-%m-%d} {post[title]}z{num:>03}.{extension}z{post[id]}_{num}c                    [        U 5      U l        U R                  R                  S5      S   U l        U R                  SS5      U l        U R                  (       a&  [        R                  " S5      R                  U l
        g g )N/r   videosTz;src=["'](https?://www\.blogger\.com/video\.g\?token=[^"']+))
BloggerAPIapiroot
rpartitionblogconfigr   r   r	   findallfindall_videoselfs    r   _initBloggerExtractor._init   se    d#II((-a0	kk(D1;;!%0"118  r   c              #     #    U R                   R                  SU R                  -   5      nUS   S   US'   US   S   US'   U R                  US   5      US'   US	 [        R
                  " S5      R                  nU R                  5       nU R                  U5       GH#  nUS	   nU" U5      n[        U5       H  u  px[        U5      Xg'   M     U R                  (       a  S
U;   d  SU;   a  U R                  Xd5        US   S   US'   US   S   US'   [        R                  " U5      US	'   U R                  US   5      US'   US	 US	 XS.n	U(       a  U	R                  U5        [        R                   SU	4v   [        US5       H6  u  U	S'   nXS'   [        R"                  U[        R$                  " X5      4v   M8     GM&     g 7f)Nzhttp://pages
totalItemsposts	publisheddateselfLinkz{src="(https?://(?:blogger\.googleusercontent\.com/img|lh\d+(?:-\w+)?\.googleusercontent\.com|\d+\.bp\.blogspot\.com)/[^"]+)contentzid="BLOG_video-zclass="BLOG_video_authordisplayNamerepliesr   )r   post r   numr   )r   blog_by_urlr   parse_datetime_isor   r	   r   metadatar&   	enumerater   r   _extract_videosremove_htmlupdater   	DirectoryUrlnameext_from_url)
r    r   findall_imager3   r.   r*   filesidxr   datas
             r   itemsBloggerExtractor.items'   s    xx##I		$9:Wl3WWl3W..tK/@AV./ 07w	 	
 ==?JJt$D9oG!'*E%e,%c]
 - {{%0(G3$$U1!(^M:DN"9ol;DO"..w7DO2243DEDLZ V /DH%##R--$-eQ$7 US!Ukk3(=(=c(HHH %81 %s   GGc                     g)z1Return an iterable with all relevant post objectsN r    r   s     r   r&   BloggerExtractor.postsQ       r   c                     g)zReturn additional metadataNrB   r   s    r   r3   BloggerExtractor.metadataT   rE   r   c                 n   SU R                    SUS    3nSSSSS.nU R                  X4S	9nUS
   S   S   nU R                  U5       Hj  nU R                  U5      R                  n[
        R                  " [        R                  " USS5      5      nUR                  [        US   S S9S   5        Ml     g )Nzhttps://z/feeds/posts/default/idjson21true)altvdynamicviewsrewriteforssl)paramsentryr*   z$tzvar VIDEO_CONFIG =
streamsc                     U S   $ )N	format_idrB   )xs    r   <lambda>2BloggerExtractor._extract_videos.<locals>.<lambda>i   s    anr   )keyplay_url)
r   request_jsonr   requestr   r   
json_loadsextrappendmax)	r    r<   r.   r   rR   r>   htmlpagevideo_configs	            r   r5    BloggerExtractor._extract_videosW   s    #8dE#  #	
    4G}Y'-%%d+C<<$))D??499*D,2 3LLLY',  	 ,r   )r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__basecategorydirectory_fmtfilename_fmtarchive_fmtr!   r?   r&   r3   r5   __static_attributes__rB   r   r   r   r      s7    +L<M*L$K9(IT@)r   r   blogspotNz[\w-]+\.blogspot\.com)r   patternc                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	BloggerPostExtractoru   z Extractor for a single blog postr.   z(/\d\d\d\d/\d\d/[^/?#]+\.html)z,https://BLOG.blogspot.com/1970/01/TITLE.htmlc                 \    U R                   R                  US   U R                  S   5      4$ )NrI   )r   post_by_pathgroupsrC   s     r   r&   BloggerPostExtractor.posts{   s(    %%d4j$++b/BDDr   rB   Nrg   rh   ri   rj   rk   subcategoryBASE_PATTERNrr   exampler&   rp   rB   r   r   rt   rt   u   s     *K>>G<GEr   rt   c                   0    \ rS rSrSrSr\S-   rSrS r	Sr
g)	BloggerBlogExtractor   z$Extractor for an entire Blogger blogr   z/?$zhttps://BLOG.blogspot.com/c                 >    U R                   R                  US   5      $ NrI   )r   
blog_postsrC   s     r   r&   BloggerBlogExtractor.posts   s    xx""4:..r   rB   Nr{   rB   r   r   r   r      s    .KV#G*G/r   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
BloggerSearchExtractor   z#Extractor for Blogger search resulssearchz/search/?\?q=([^&#]+)z(https://BLOG.blogspot.com/search?q=QUERYc                 ^    [         R                  " U R                  S   5      =U l        nSU0$ )Nrw   query)r   unquotery   r   )r    r   s     r   r3   BloggerSearchExtractor.metadata   *    !\\$++b/::
Ur   c                 T    U R                   R                  US   U R                  5      $ r   )r   blog_searchr   rC   s     r   r&   BloggerSearchExtractor.posts   s!    xx##DJ

;;r   )r   Nrg   rh   ri   rj   rk   r|   r}   rr   r~   r3   r&   rp   rB   r   r   r   r      s$    -K55G8G <r   r   c                   6    \ rS rSrSrSr\S-   rSrS r	S r
Srg	)
BloggerLabelExtractor   z$Extractor for Blogger posts by labellabelz/search/label/([^/?#]+)z,https://BLOG.blogspot.com/search/label/LABELc                 ^    [         R                  " U R                  S   5      =U l        nSU0$ )Nrw   r   )r   r   ry   r   )r    r   s     r   r3   BloggerLabelExtractor.metadata   r   r   c                 T    U R                   R                  US   U R                  5      $ r   )r   r   r   rC   s     r   r&   BloggerLabelExtractor.posts   s!    xx""4:tzz::r   )r   Nr   rB   r   r   r   r      s$    .K77G<G ;r   r   c                   N    \ rS rSrSrSrS rS rSS jrS r	S	 r
SS
 jrS rSrg)r      zPMinimal interface for the Blogger API v3

https://developers.google.com/blogger
z'AIzaSyCN9ax34oMMyM07g_M-5pjeDp_312eITK8c                 b    Xl         UR                  S5      =(       d    U R                  U l        g )Nzapi-key)	extractorr   API_KEYapi_key)r    r   s     r   __init__BloggerAPI.__init__   s"    " ''	2Bdllr   c                 ,    U R                  SSU0S5      $ )Nz/blogs/byurlr   r   _call)r    r   s     r   r1   BloggerAPI.blog_by_url   s    zz.5#,??r   Nc                 8    SU S3nSU0nU R                  X45      $ )N/blogs/z/postslabels_pagination)r    blog_idr   endpointrR   s        r   r   BloggerAPI.blog_posts   s+    WIV,E"11r   c                 8    SU S3nSU0nU R                  X45      $ )Nr   z/posts/searchqr   )r    r   r   r   rR   s        r   r   BloggerAPI.blog_search   s*    WI]3u11r   c                 8    SU S3nU R                  USU0S5      $ )Nr   z/posts/bypathpathr.   r   )r    r   r   r   s       r   rx   BloggerAPI.post_by_path   s'    WI]3zz(VTNF;;r   c                 ^    SU-   nU R                   US'   U R                  R                  XBUS9$ )Nz%https://www.googleapis.com/blogger/v3r[   )rR   notfound)r   r   r]   )r    r   rR   r   r   s        r   r   BloggerAPI._call   s:    5@u~~** + 3 	3r   c              #   z   #     U R                  X5      nSU;   a  US    S h  vN   SU;  a  g US   US'   M5   N7f)Nr?   nextPageToken	pageTokenr   )r    r   rR   r>   s       r   r   BloggerAPI._pagination   sN     ::h/D$=((d*"&"7F;  )s   !;9;)r   r   )N)rg   rh   ri   rj   rk   r   r   r1   r   r   rx   r   r   rp   rB   r   r   r   r      s3     8GC@2
2
<38r   r   )rk   commonr   r   r/   r   r   r   r   r7   r}   rt   r   r   r   r   rB   r   r   <module>r      s    # * ,U} Up  &&+( E+ E/+ /<- <;, ;)8 )8r   