
    i.                     z    S r SSKJrJr  SSKJrJrJr  SSKJr   " S S\5      r	 " S S	\	5      r
 " S
 S\	5      rg)z*Extractors for https://seiga.nicovideo.jp/   )	ExtractorMessage   )textutil	exception)cachec                   d    \ 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\" SSS9S 5       rSrg)SeigaExtractor   zBase class for seiga extractorsseigaz
{image_id}z.nicovideo.jp)user_sessionzhttps://seiga.nicovideo.jpc                 >    [         R                  " X5        SU l        g )N    )r   __init__start_imageselfmatchs     G/app/mltbenv/lib/python3.13/site-packages/gallery_dl/extractor/seiga.pyr   SeigaExtractor.__init__   s    4'    c              #   f  #    U R                  5         [        U R                  5       5      n[        U5      n[        R
                  SU4v   [        R                  " XR                  5       H@  nUR                  U5        S US'   [        R                  U R                  US   5      U4v   MB     g 7f)N 	extensionimage_id)loginiter
get_imagesnextr   	Directoryr   advancer   updateUrlget_image_url)r   imagesdataimages       r   itemsSeigaExtractor.items   s     

doo'(F|T))\\&*:*:;EKK $D++t11$z2BCTII <s   B/B1c                     g)z.Return iterable containing metadata and imagesN )r   s    r   r   SeigaExtractor.get_images(   s    r   c                     U R                    SU 3nU R                  USS9nSU;   a,  [        R                  " SUR	                  S5      S    S35      eUR                  S	S
S5      $ )z'Get url for an image with id 'image_id'z/image/source/r(   notfoundznicovideo.jp/loginzHTTP redirect to login page (?r   )z/o/z/priv/r   )rootrequest_locationr   AbortExtraction	partitionreplace)r   r   urllocations       r   r%   SeigaExtractor.get_image_url+   sz    >(4((w(?8+++/0B0B30G0J/K1MO Ox33r   c                     U R                  U R                  5      (       a  g U R                  5       u  pU(       a   U R                  U R	                  X5      5      $ [
        R                  " S5      e)Nz5username & password or 'user_session' cookie required)cookies_checkcookies_names_get_auth_infocookies_update_login_implr   AuthorizationError)r   usernamepasswords      r   r   SeigaExtractor.login4   sd    d0011!002&&t'7'7'KLL**CE 	Er   i3r   )maxagekeyargc                    U R                   R                  SU5        SnU R                  US-   5      nUR                  nUUS.nU[        R                  " [        R
                  " USS5      5      -   nU R                  USUS9nS	UR                  ;   a  [        R                  " 5       eS
UR                  ;   a  UR                  n[        R
                  " USS5      nU R                  SU S35      n	U	SSS.nU[        R                  " [        R
                  " USS5      5      -   nU R                  USUS9nUR                  (       d&  SUR                  ;   a  [        R                  " S5      eU R                   V
s0 s HI  n
U
R                  (       d  M  U
R                  U R                  :X  d  M2  U
R                   U
R"                  _MK     sn
$ s  sn
f )NzLogging in as %szhttps://account.nicovideo.jpz/login?site=seiga)mail_telrC   z<form action=""POST)methodr'   zmessage=cant_loginz/mfazclass="userAccount"><zEmail Confirmation Code (z): Logingdl)otploginBtndevice_names   Confirmation code is incorrectzIncorrect Confirmation Code)loginforequestr   unescapeextrr8   r   AuthenticationErrorinputhistorycontentcookiesexpiresdomaincookies_domainnamevalue)r   rB   rC   r3   responsepager'   r8   emailcodecookies              r   r@   SeigaExtractor._login_impl?   s   ((3-<<': :;}} ! 
 T]]499T3CS#IJJ<<F<>8<<///11X\\!==DIId$:C@E:: 9%DED #$D
 tyy7G'MNNC||CT|BH##59I9II3313 3
 ,,
&~~ &"(--43F3F"F &FKK%&
 	
 
s   =GG2Gr   N)__name__
__module____qualname____firstlineno____doc__categoryarchive_fmtr^   r=   r3   r   r)   r   r%   r   r	   r@   __static_attributes__r,   r   r   r   r      sT    )HK$N%M'D
J=4	E )A&'
 ''
r   r   c                   D    \ 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)SeigaUserExtractorj   z6Extractor for images of a user from seiga.nicovideo.jpuser)z
{category}z
{user[id]}z,{category}_{user[id]}_{image_id}.{extension}zg(?:https?://)?(?:www\.|(?:sp\.)?seiga\.)?nicovideo\.jp/user/illust/(\d+)(?:\?(?:[^&]+&)*sort=([^&#]+))?z,https://seiga.nicovideo.jp/user/illust/12345c                 v    [         R                  X5        UR                  5       u  U l        U l        SU l        g Nr   )r   r   groupsuser_idorder
start_pager   s     r   r   SeigaUserExtractor.__init__s   s+    ,#(<<> djr   c                 v    [        US5      u  p#U =R                  U-  sl        U =R                  U-  sl        U$ )N(   )divmodry   r   )r   numpagesr&   s       r   skipSeigaUserExtractor.skipx   s3    sB5 F"
r   c                 8   [         R                  " US5      S   nUS   (       d  SU;   a  [        R                  " S5      e[         R                  " U R
                  5      US   US   =(       d    SR                  5       S.[         R                  " US	   5      S
.$ )zCollect metadata from 'page'))r_   z
<img alt="rI   )msgz<li class="user_message"></li>)Nu*   <span class="target_name">すべて</span>r   )countz<span class="count "></span>r   r_   u3   ユーザー情報が取得出来ませんでしたrs   r   r   )idr_   messager   )rs   r   )r   extract_allr   NotFoundError	parse_intrw   strip)r   rb   r'   s      r   get_metadataSeigaUserExtractor.get_metadata~   s     '
 
  F| UY] ]))&11 nnT\\2V K-2446
 ^^DM2
 	
r   c              #     #    U R                    SU R                   3nU R                  U R                  SS.n SnU R	                  XS9R
                  nUS   U R                  :X  a  U R                  U5      v   [
        R                  " USS5       HI  n[
        R                  " US	5      S   nS
 H  n[
        R                  " Xg   5      Xg'   M     Uv   US-  nMK     US:  a  g US==   S-  ss'   M  7f)Nz/user/illust/
illust_all)sortrb   targetr   )paramsrb   z<li class="list_itemz
</a></li> ))r   	/seiga/imrI   )titlez<li class="title">r   )viewsr   r   )commentsr   r   )clipsr   r   )r   r   r   r   r   r|   )
r3   rw   rx   ry   rT   r   r   extract_iterr   r   )r   r8   r   cntrb   rS   r'   keys           r   r   SeigaUserExtractor.get_images   s    =7**doo(* C<<<388Df~0''--))0,@'' /   FC $ty 9DI F
q@ Rx6NaN/ s   C3C5)rx   ry   rw   N)rh   ri   rj   rk   rl   subcategorydirectory_fmtfilename_fmtpatternexampler   r   r   r   ro   r,   r   r   rq   rq   j   s5    @K0MALCG<G

* r   rq   c                   :    \ rS rSrSrSrSrSrSrS r	S r
S	 rS
rg)SeigaImageExtractor   z3Extractor for single images from seiga.nicovideo.jpr(   z!{category}_{image_id}.{extension}z(?:https?://)?(?:(?:seiga\.|www\.)?nicovideo\.jp/(?:seiga/im|image/source/)|sp\.seiga\.nicovideo\.jp/seiga/#!/im|lohas\.nicoseiga\.jp/(?:thumb|(?:priv|o)/[^/]+/\d+)/)(\d+)z(https://seiga.nicovideo.jp/seiga/im12345c                 B    [         R                  X5        US   U l        g ru   )r   r   r   r   s     r   r   SeigaImageExtractor.__init__   s    ,ar   c                 0    U =R                   U-  sl         U$ )Nrg   )r   r~   s     r   r   SeigaImageExtractor.skip   s    C
r   c                    U R                   R                  SSSS9  U R                   SU R                   3nU R	                  USS9R
                  n[
        R                  " US5      S	   n[
        R                  " US
5      S	   US'   [
        R                  " US   5      US'   [
        R                  " U R                  5      US'   U R                  US   S-   S5      US'   X34$ )Nskip_fetish_warning1zseiga.nicovideo.jp)r]   r   Tr/   ))datez'<li class="date"><span class="created">rL   )r   z<h1 class="title">z</h1>)descriptionz<p class="discription">z</p>r   ))r   z<a href="/user/illust/rI   )r_   z<span itemprop="title">rL   rs   r   r   r   z:00+0900u   %Y年%m月%d日 %H:%M:%S%z)
r[   setr3   r   rT   r   r   remove_htmlr   parse_datetime)r   r8   rb   r'   s       r   r   SeigaImageExtractor.get_images   s    !3/C 	 	E 9T]]O4||C$|/44 '
  	 '' /
  V
 #..tM/BC]>>$--8Z**L:%'CEV |r   )r   N)rh   ri   rj   rk   rl   r   r   r   r   r   r   r   ro   r,   r   r   r   r      s-    =K6LNG 9G!r   r   N)rl   commonr   r   r   r   r   r   r	   r   rq   r   r,   r   r   <module>r      s@    1 & $ $ W
Y W
tE  E P). )r   