
    i                         S r SSKJrJr  SSKJrJrJr   " S S\5      r " S S\5      r	 " S	 S
\5      r
 " S S5      rg)z&Extractors for https://www.lofter.com/   )	ExtractorMessage   )textutil	exceptionc                   >    \ 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)LofterExtractor   z Base class for lofter extractorslofterzhttps://www.lofter.com)z
{category}z{blog_name}z{id}_{num}.{extension}z
{id}_{num}c                 $    [        U 5      U l        g N)	LofterAPIapiselfs    H/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/lofter.py_initLofterExtractor._init   s    T?    c              #   ~  #    U R                  5        GH  nUc  M	  SU;   a  US   nUS   S   US'   U R                  US   S-  5      US'   US   nUS	:X  ag  US
   n[        R                  " USS5      nU Vs/ s H  n[        R                  " U5      PM     nnU Vs/ s H  oUR                  S5      S   PM     nnOUS:X  aQ  [        R                  " US   5      nU Vs/ s H  oUS   PM	     nnU Vs/ s H  oUR                  S5      S   PM     nnOUS:X  a   [        R                  " US   5      nUS   /nOyUS:X  aQ  [        R                  " US   5      nU Vs/ s H  oUS   PM	     nnU Vs/ s H  oUR                  S5      S   PM     nnO"SnU R                  R                  SUS   U5        [        U5      US'   [        R                  SU4v   [        US	5       H2  u  US'   n	[        R                  U	[        R                  " X5      4v   M4     GM	     g s  snf s  snf s  snf s  snf s  snf s  snf 7f)NpostblogInfoblogName	blog_namepublishTimei  datetyper   contentz
<img src=""?    r   
photoLinksorign   embed	originUrl   images z%s: Unsupported post type '%s'.idcount num)postsparse_timestampr   extract_iterunescape	partitionr   
json_loadslogwarninglenr   	Directory	enumerateUrlnameext_from_url)
r   r   	post_typer   
image_urlsxphoto_linksr&   r)   urls
             r   itemsLofterExtractor.items   s3    JJLD|~F| $Z 0 <D//]0Cd0JKDLVI A~y/!..wcJ
8BC
1dmmA.

C;EF:akk#.q1:
F
 a"ood<.@A2=>+Qj+
>;EF:akk#.q1:
F
 aW6#K01
 ah8289&Qj&
9;EF:akk#.q1:
F
  
  5J	+  
ODM##R--$-j!$< USkk3(=(=c(HHH %=U ! DF
 ?F :FsP   A6H=8 HH=H$;&H=!H)/H=5H.AH=H3,H=2H8B.H=c                     g)Nr*   r*   r   s    r   r/   LofterExtractor.postsF   s    r   )r   N)__name__
__module____qualname____firstlineno____doc__categoryrootdirectory_fmtfilename_fmtarchive_fmtr   rA   r/   __static_attributes__r*   r   r   r
   r
      s/    *H#D1M+LK#,I\r   r
   c                   *    \ rS rSrSrSrSrSrS rSr	g)	LofterPostExtractorJ   zExtractor for a lofter postr   z>(?:https?://)?[\w-]+\.lofter\.com/post/([0-9a-f]+)_([0-9a-f]+)z.https://BLOG.lofter.com/post/12345678_90abcdefc                     U R                   u  pU R                  R                  [        US5      [        US5      5      nU4$ )N   )groupsr   r   int)r   blog_idpost_idr   s       r   r/   LofterPostExtractor.postsP   s7    ;;xx}}S"-s7B/?@wr   r*   N
rE   rF   rG   rH   rI   subcategorypatternexampler/   rO   r*   r   r   rQ   rQ   J   s    %KOG>Gr   rQ   c                   *    \ rS rSrSrSrSrSrS rSr	g)	LofterBlogPostsExtractorV   z#Extractor for a lofter blog's postsz
blog-postszb(?:https?://)?(?:www\.lofter\.com/front/blog/home-page/([\w-]+)|([\w-]+)\.lofter\.com)/?(?:$|\?|#)zhttps://BLOG.lofter.com/c                     U R                   S   =(       d    U R                   S   nU R                  R                  U5      $ )Nr"   r   )rU   r   
blog_posts)r   r   s     r   r/   LofterBlogPostsExtractor.postsa   s1    KKN4dkk!n	xx""9--r   r*   NrZ   r*   r   r   r_   r_   V   s    -K G )G.r   r_   c                   2    \ rS rSrS rS rS rS rS rSr	g)	r   f   c                     Xl         g r   	extractor)r   rh   s     r   __init__LofterAPI.__init__h   s    "r   c                 <    SnSSSUS-   S.nU R                  X#5      $ )Nz/v2.0/blogHomePage.apigetPostListsr"      z.lofter.com)methodoffsetlimit
blogdomain)_pagination)r   r   endpointparamss       r   rb   LofterAPI.blog_postsk   s2    +$#m3	
 11r   c                 >    SnUUS.nU R                  X45      S   S   $ )Nz/oldapi/post/detail.api)targetblogidpostidr/   r"   )_call)r   rW   rX   rs   rt   s        r   r   LofterAPI.postu   s/    ,#
 zz(+G4Q77r   c                 H   SU-   nSS0nU R                   R                  USXBS9nUR                  5       nUS   S   S:X  a  [        R                  " S	5      eUS   S   S
:w  a<  U R                   R
                  R                  SU5        [        R                  " S5      eUS   $ )Nzhttps://api.lofter.comproductzlofter-android-7.9.10POST)rn   rt   datametastatusih  blogrm   zServer response: %szAPI request failedresponse)rh   requestjsonr   NotFoundErrorr5   debugAbortExtraction)r   rs   r~   r@   rt   r   infos          r   ry   LofterAPI._call}   s    &1.
 >>))v * :}}<!T)))&11<!S(NN$$%:DA++,@AAJr   c              #      #     U R                  X5      nUS   nU S h  vN   US   S:  a  g US   [        U5      -   US   :  a  g US   US'   MM   N17f)Nr/   ro   r"   )ry   r7   )r   rs   rt   r~   r/   s        r   rr   LofterAPI._pagination   sl     ::h/DMEH~!h#e*,tH~=#H~F8  s   AA2Arg   N)
rE   rF   rG   rH   ri   rb   r   ry   rr   rO   r*   r   r   r   r   f   s    #28 $.r   r   N)rI   commonr   r   r-   r   r   r   r
   rQ   r_   r   r*   r   r   <module>r      sB    - & $ $:i :z	/ 	. . 5. 5.r   