
    jR                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z
d dlZ
d dlZd dlmZ  ed          ZdZdZh dZh dZg dZd	d
ddddddZd Zd Zd9dZd Zd Zd Zd Zd Zd Zd Zd Z d Z!d Z"d Z#d Z$d  Z%d! Z&d" Z'd# Z(d:d&Z)d' Z*d9d(Z+d;d+Z,d<d,Z-d- Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d<d7Z8e9d8k    r e8             dS dS )=    N)Pathz8/Users/bot1/.hermes/profiles/it/secrets/alimama-exporterzhttps://one.alimama.comzhttps://bpcommon.alimama.com>   csrfsigntokencookiecsrfid
_tb_token_loginpointidauthorization>   
user-agentcontent-typex-requested-withacceptoriginreferer)scenecampaignbidworditem_promotioncrowdcreativeareau   营销场景报表u   计划报表u   关键词报表   商品报表u   人群报表u   创意报表u   地域报表c                  2    t          | dt          j        i d S )Nfile)printsysstderrargss    z   /Users/bot1/Volumes/root_for_ai/AI工作区/良渚_阿里妈妈投放报表导出CLI_20260603_1400/alimama_exporter/cli.pyeprintr"      s    	4!cj!!!!!    c                 n    t          j        t          |                               dd                    S )Nutf-8replace)encodingerrors)jsonloadsr   	read_textpaths    r!   	load_jsonr.   #   s+    :d4jj**GI*NNOOOr#   Fc                     t          |           } | j                            dd           |                     t	          j        |dd          d           |rt          j        | d           | S )	NTparentsexist_okF   ensure_asciiindentr%   )r'   i  )r   parentmkdir
write_textr)   dumpsoschmod)r-   datasecrets      r!   
write_jsonr?   '   sn    ::DKdT222OODJt%BBBWOUUU 
uKr#   c                     d | pg D             S )Nc                     i | ]T}|                     d           |                     d d                                          |                     dd          US )name value)getlower).0hs     r!   
<dictcomp>zheader_map.<locals>.<dictcomp>1   sW    bbbaTUTYTYZ`TaTabAEE&"##%%quuWb'9'9bbbr#    headerss    r!   
header_maprM   0   s    bb7=bbbbbr#   c                     i }| pd                     d          D ]M}d|vr|                     dd          \  }}|                                }|r|                                ||<   N|S )NrC   ;=   )splitstrip)cookie_headeroutpartkvs        r!   parse_cookie_headerrY   4   sx    
C$"++C00  d??zz#q!!1GGII 	WWYYCFJr#   c                 <   t          |           t          |          t          t                    t                    z            }fd|D             }t                    t                    t          |          t          |          | |k    ||dS )Nc                 l    g | ]0}                     |                               |          k    .|1S rJ   rE   )rG   rW   abs     r!   
<listcomp>z"cookie_compare.<locals>.<listcomp>D   s7    7771!%%((aeeAhh"6"6Q"6"6"6r#   )a_cookie_countb_cookie_countcommon_cookie_names_countequal_name_value_countidentical_cookie_headercommon_cookie_namesequal_cookie_names)rY   sortedsetlen)a_headerb_headercommonequalr]   r^   s       @@r!   cookie_comparern   @   s    H%%AH%%ACFFSVVO$$F77777777Ea&&a&&%([["%e**#+x#7%#  r#   c                     t          |           }t          |t                    rU|                    d          p?|                    d          p*|                    di                               d          pdS dS )NCookier   rL   rC   )r.   
isinstancedictrE   r-   r=   s     r!   read_cookie_jsonrt   P   sp    T??D$ gxx!!fTXXh%7%7f488Ir;R;R;V;VW_;`;`fdff2r#   c                     t          | t                    rd |                                 D             S t          | t                    rd | D             S | S )Nc                 n    i | ]2\  }}||                                 t          v rd nt          |          3S )z
[REDACTED])rF   SENSITIVE_KEYSsafe_payloadrG   rW   rX   s      r!   rI   z safe_payload.<locals>.<dictcomp>Y   s>    rrrZ^Z[]^AGGII$?$?LL\RS__rrrr#   c                 ,    g | ]}t          |          S rJ   )rx   rG   xs     r!   r_   z safe_payload.<locals>.<listcomp>[   s    111AQ111r#   )rq   rr   itemslistpayloads    r!   rx   rx   W   sa    '4   srrbibobobqbqrrrr'4   2111111Nr#   c                 l    t          | t                    s| S d |                                 D             S )Nc                 P    i | ]#\  }}|                                 t          v ||$S rJ   )rF   rw   ry   s      r!   rI   z&secretless_payload.<locals>.<dictcomp>b   s0    PPPTQ		0O0OAq0O0O0Or#   )rq   rr   r}   r   s    r!   secretless_payloadr   _   s5    gt$$ PPW]]__PPPPr#   c                     |                      d          pi                      d          pi                      d          pd}|sd S 	 t          j        |          S # t          $ r Y d S w xY w)NrequestpostDatatextrC   )rE   r)   r*   	Exception)entryr   s     r!   json_post_textr   e   s    YYy!!'R,,Z88>BCCFKKQrD tz$   tts   A 
A)(A)c                 p    t          |                               di                               dg           S )Nlogentriesr.   rE   r,   s    r!   har_entriesr   o   s.    T??ub))--i<<<r#   c                     |                      di                                dd          }t          j                            |          }||j        |j        fS )Nr   urlrC   )rE   urllibparseurlparsenetlocr-   )r   r   us      r!   request_url_partsr   s   sK    
))Ir
"
"
&
&ub
1
1Cc""A!&  r#   c                 V   g }g }| D ]}t          |          \  }}}|                    d          s+t          |                    di                               d                    }|                    d          swt	          |          pi }d}	d|v r|	dz  }	|                    d          r|	d	z  }	d
|v r|	dz  }	d|v r|	dz  }	|	|f}
|	r|                    |
           |                    |
           |rt          |d d          d         d         S |r|d         d         S d S )None.alimama.comr   rL   r   r   /report/createDownLoadTask.jsond   z/report/(   csrfId
   loginPointIdc                     | d         S )Nr   rJ   r|   s    r!   <lambda>z#find_best_request.<locals>.<lambda>   s
    qt r#   TkeyreverserQ   )r   endswithrM   rE   r   
startswithappendrg   )r   	preferredfallbackr   r   hostr-   hmr   scoreitems              r!   find_best_requestr   y   sx   IH " "+E22T4}}.// 			)R0044Y??@@vvh 	 ''-2,44SLE??:&& 	RKEwRKEW$$RKEu~ 	"T""""OOD!!!! Ii^^TBBB1EaHH {1~4r#   c                     | D ]4}t          |          \  }}}|                    d          r
||k    r|c S 5t          |z   S )Nr   )r   r   BASE_URL)r   path_suffixr   r   r   r-   s         r!   find_first_urlr      sX      +E22T4==*++ 	0C0CJJJk!!r#   c                 l   t          |                     d          pd          }|                     d          pg }t          |                     d          pd          }|dk    rd|v rdS |dk    rdS |dk    rdS |d	k    sd
|v rd	S |dk    rdS |dk    rdS |dk    rdS d|v rdS d|v rdS d|v rdS |pdS )NrptTyperC   queryDomains	excelNameaccountr   r   r   r   r   r   r   r   u   营销场景u   计划u	   关键词unknown)strrE   )r   rptqdexcels       r!   infer_report_keyr      s   
gkk)$$*
+
+C	^	$	$	*BK((.B//E
iGrMMw
jz
iy
.E"9"9
g~~w
jz
f}}vw5zey)r#   c                    g }t                      }t          t          |                     D ]z\  }}t          |          \  }}}|                    d          r|dk    r5t          |          }t          |t                    sZt          |          }	t          |          }
|	t          j        |
dd          f}||v r|                    |           |                    |	t                              |	|                    d          p|	          |d|
t!          |          |                    d          |                    d          |                    d          |                    d	          |                    d
          |                    d          d           ||                    d            |S )Nr   r   FT)r5   	sort_keysr   r   r   	startTimeendTime	splitType)
report_keyreport_labelhar_entry_indexendpoint_pathr   payload_previeworiginal_excel_namer   r   r   r   r   c                 d    | d         t           v r t                               | d                   ndS )Nr   c   )REPORT_PRIORITYindexr   s    r!   r   z,collect_download_templates.<locals>.<lambda>   s-    1\?^mKmKm!6!6q!G!G!Gsu r#   )r   )rh   	enumerater   r   r   r   rq   rr   r   r   r)   r:   addr   REPORT_LABELSrE   rx   sort)har_path	templatesseenidxr   r   r   r-   r   r   	nonsecretr   s               r!   collect_download_templatesr      s   I55DH 5 566  
U+E22T4}}.// 	4;\3\3\ '''4(( 	%g..
&w//	4:ietTTTU$;;$)--j'++k:R:R:`V`aa"> +G44#*;;{#;#;{{9--#KK77 [11{{9-- [11
 
 	 	 	 	 NNuuNvvvr#   c                    t          t          |                     dd                    \  }}t          j        ||d          }|dk    r0t          j        |dz   dd          t          j        d          z
  }n/t          j        ||dz   d          t          j        d          z
  }|                                |                                fS )N-rQ      )days)mapintrR   dtdate	timedelta	isoformat)monthymstartends        r!   month_ranger      s    sEKKQ''((DAqGAq!EBwwga!eQ""R\q%9%9%99gaQ""R\q%9%9%99??cmmoo--r#   c                 v    t          j        ddt          |                                         d          } | pdS )Nz[\\/:*?"<>|\s]+_alimama_report)resubr   rS   )rB   s    r!   sanitize_filenamer      s6    6$c3t9955;;C@@D###r#   c                    t          |          }||  dz  }||  dz  }||  dz  }|                                r(|                                r|                                st          d|  d          t          |          }t	          |          }t	          |          }d |                                D             }||d<   ||fS )N_cookie.json_headers.json_session.jsonzMISSING credentials for store=z; run extract-credentials firstc                     i | ]
\  }}|||S rJ   rJ   ry   s      r!   rI   z&load_secret_bundle.<locals>.<dictcomp>   s#    ///$!QQ/A///r#   rp   )r   exists
SystemExitrt   r.   r}   )	store
secret_dircookie_pathheaders_pathsession_pathr   rL   sessionrH   s	            r!   load_secret_bundler      s    j!!J%5555K5 7 7 77L5 7 7 77L b|':':'<'< bLDWDWDYDY b`%```aaak**F%%G%%G//'--/////AAhKg:r#   GET   c                    |pi }d }|Ot          j        |dd                              d          }t          |          }|                    dd           t
          j                            | |||          }t
          j                            ||          5 }|	                                }|j
                            dd	          }	|                    dd
          }
	 t          j        |
          |j
        fcd d d            S # t          $ r& t          d|j         d|	 d|
d d                   w xY w# 1 swxY w Y   d S )NF),:)r5   
separatorsr%   zContent-Typezapplication/json;charset=UTF-8)r=   rL   methodtimeoutrC   r&   )r(   znon-json response status=z ctype=z	 preview=   )r)   r:   encoderr   
setdefaultr   r   RequesturlopenreadrL   rE   decoder*   r   RuntimeErrorstatus)r   r  rL   r   r  r=   reqrespbodyctyper   s              r!   open_json_requestr     s   mGDz'*MMMTTU\]]w-->+KLLL
.
 
 4
 
P
PC			W		5	5 oyy{{  44{{79{55	o:d##T\1o o o o o o o o  	o 	o 	om4;mmumm_cdhehdh_immnnn	oo o o o o o o o o os%   AD>$D0D;;D>>EEc                 x   t          | t                    rudD ]E}|                     |          }t          |t                    r|                    d          r|c S F|                                 D ]}t          |          }|r|c S n/t          | t                    r| D ]}t          |          }|r|c S d S )N)downloadUrlr   fileUrlossUrl)zhttp://zhttps://)rq   rr   rE   r   r   valuesextract_download_urlr~   )objr   valfounds       r!   r  r    s    #t > 	 	C''#,,C#s## 7N(O(O 


::<< 	 	C(--E 	 
C		  	 	C(--E 4r#   c           
      H   t          |          \  }}t          | d                   }||d<   ||d<   d|d<   | d         dk    rd|d<   |                    d          |d<   |                    d	          |d	<   |                    d
|                    d
          pd           |                    d          pd|d<   t                              | d         | d                   }| d|                    dd           dt          j                                        	                    d           |d<   |                    d          p	t          dz   }	|r d| d         |d         t          |          dS t          |	d||d          \  }
}|
pi                     d          pi                     d          }|
pi                     d          pi                     d          }|s+t          d| d          d| d t          |
                     || d         |d         |d!S )"Nr   r   r   r   r   r   r   r   r   bizCodeuniversalBPsourceasync_dowdloadr   r   rC   z%Y%m%d_%H%M%Sr   
create_urlr   T)dry_runr   r   r   POST<   )r  rL   r   r  r=   taskIdinfookzcreate task failed for z: ok=z
 response=)r%  r   r   response_ok)r   rr   rE   r  r   r&   r   datetimenowstrftimer   rx   r  r  )templaterL   r   r   r"  r   r   r   labelr   r=   r   task_idr'  s                 r!   create_taskr/     sj   U##JE38I&''G GKGI"GK**&H--GH%kk.99GNy'++i"8"8"IMJJJH--A1AGHh|4h|6LMME#llemmC&<&<llr{?P?P?Y?YZi?j?jllGK
++l
#
#
U3T(TC Tx/ET[\gTh  ~J  KR  ~S  ~S  T  T  	TFGW^`aaaGD!  ((.B33H==GJBF##)r
.
.t
4
4B vtXl5KttRTtt`lmq`r`rttuuuXl-CRYZeRfwyzzzr#   P      c                    |                     d          p	t          dz   }t          j                            |          }|j        dk    r1|j                            d          r|                    dd          }t          t          j        
                    |j        d	                    }|                    t          |           |                     d
          pdd           t          j                            |                    t          j                            |                              }d }	t!          d|dz             D ]}
t#          |d|d          \  }}|}	t%          |          }|r||
fc S d }	 |                     di                                di                                d          }n# t&          $ r d }Y nw xY wt)          t+          j        d| |
|t/          |          dd                     t1          j        |           t5          d|  d| dt7          |	                     )Nget_download_url+/commonapi/report/async/getDownloadUrl.jsonr   z/commonapi/httpszbpcommon.alimama.com)schemer   T)keep_blank_valuesr  r  )r%  r  )queryrQ   r   r   )r  rL   r  r=   resultr  poll)eventr%  attemptr  r  Fr5   ztask z# did not produce downloadUrl after z attempts; last=)rE   COMMONAPI_BASE_URLr   r   r   r   r-   r   _replacerr   	parse_qslr8  updater   
urlunparse	urlencoderanger  r  r   r   r)   r:   booltimesleepTimeoutErrorrx   )r.  rL   r   attemptssecondsbaseparsedqsr   lastr<  r=   r   dlr  s                  r!   poll_download_urlrP  :  sO   ;;)**r/ADq/qD\""4((F})))fk.D.D].S.S)8NOO	fl$$V\T$JJ	K	KBIIW'++i2H2H2YMZZ[[[
,
!
!&//8N8Nr8R8R/"S"S
T
TCDHqL))  #CwPRSSSa!$'' 	w;	XXfb))--h;;??IIFF 	 	 	FFF	dj6W\bswxzs{s{||  LQ  R  R  R  	S  	S  	S
7
ywyy8yyeqrvewewyy
z
zzs   =F??GGc                    t           j                            | d |pi                                 D                       }t           j                            |d          5 }|                                }d d d            n# 1 swxY w Y   t          |          }|j                            dd           |	                    |           t          |          S )Nc                 J    i | ] \  }}|                                 d k    ||!S )r   )rF   ry   s      r!   rI   z!download_file.<locals>.<dictcomp>T  s6    .q.q.q1[\[b[b[d[dhp[p[pq![p[p[pr#   rK   x   r  Tr0   )r   r   r  r}   r	  r
  r   r7   r8   write_bytesri   )r   out_pathrL   r  r  r=   s         r!   download_filerV  S  s    
.
 
 .q.qB@U@U@W@W.q.q.q
 
r
rC			S		1	1 Tyy{{              H~~HO$666t99s   !BB	Bc                    t          t          j        dt          j                                        d         t          t          | j                  	                                          g dddd                     d S )NTr   )scan-harextract-credentialscompare-credentialsbuild-downloadsexport-month)r'  pythonr   commandsFr3   r4   )
r   r)   r:   r   versionrR   r   r   r   
expanduserr   s    r!   
cmd_doctorra  ]  s    	$*+##%%a($t//::<<==qqq	 
 !% % % & & & & &r#   c                    t          | j                  }t          | j                  }i }|D ]1}t          |          \  }}}|                    |d          dz   ||<   2t          | j                  t          |          t          |                                d d          d d         t          |          d |D             d}| j	        rt          | j	        |           t          t          j        |d	d
                     d S )Nr   rQ   c                     | d         S )NrQ   rJ   r   s    r!   r   zcmd_scan_har.<locals>.<lambda>m  s    rsturv r#   Tr      c                 J    g | ] }d  |                                 D             !S )c                 &    i | ]\  }}|d k    ||S r   rJ   ry   s      r!   rI   z+cmd_scan_har.<locals>.<listcomp>.<dictcomp>m  sk      O}  O}  O}  Y]  YZ  \]  no  s|  n|  n|  PQ  ST  n|  n|  n|r#   r}   rG   ts     r!   r_   z cmd_scan_har.<locals>.<listcomp>m  sy      NQ  NQ  NQ  BC  O}  O}  ab  ah  ah  aj  aj  O}  O}  O}  NQ  NQ  NQr#   )harentry_count	hosts_topdownload_template_countdownload_templatesFr3   r4   )r   rj  r   r   rE   r   ri   rg   r}   rU   r?   r   r)   r:   )	r    r   r   hostser   r   r-   r9  s	            r!   cmd_scan_harrq  f  s\   $(##G*4844IE - -)!,,4iia((1,d]]3w<<fUZU`U`UbUbhvhv  AE  OF  OF  OF  GJ  HJ  GJ  OK  hk  lu  hv  hv  NQ  NQ  GP  NQ  NQ  NQ  R  RFx %48V$$$	$*V%
:
:
:;;;;;r#   c                    t          | j                  }t          |          }|t          d          t	          |                    di                               d                    }t          |          pi }i }|                                D ]E\  }}|t          v r7d	                    d |
                    d          D                       }|||<   F|                    dt                     |                    dt          dz              |                    d	d
          }	t          | j                  }
|
                    dd           | j        }t#          t%          |	                                                    }|t          | j                  j        t          |                    d          pd|                    d          |                    d          t+          |d          t,          dz   t,          dz   |t.          j                                                            d          d}t7          |
| dz  d|	id           t7          |
| dz  |d           t7          |
| dz  |d           d }| j        r-t;          |	| j                  }t7          |
| dz  |d           d|| d| d| dgt=          |          t?          |                    d                    t?          |                    d                    |rtA          |          nd d}tC          tE          j#        |dd                      d S )!Nz,No one.alimama.com request with Cookie foundr   rL   r   c              3   >   K   | ]}|                                 V  d S N)
capitalize)rG   rV   s     r!   	<genexpr>z*cmd_extract_credentials.<locals>.<genexpr>}  s,       L Lt!2!2 L L L L L Lr#   OriginRefererz/index.htmlr   rC   Tr0   r  r  r   r   r   r4  z%/commonapi/report/async/findPage.jsonrJ  timespec)r   source_har_namebase_urlr  r   r   r!  r3  find_page_urlcookie_names
created_atr   rp   )r>   r   r   z_qianniu_compare.json)r'  r   secret_filescookie_count
has_csrfIdhas_loginPointIdqianniu_compareFr3   r4   )$r   rj  r   r   rM   rE   r   r}   SAFE_HEADER_NAMESjoinrR   r  r   r   r   r8   r   rg   rY   keysrB   r   r>  r   r)  r*  r   r?   compare_qianniu_dircompare_with_qianniuri   rE  summarize_comparer   r)   r:   )r    r   bestr   r   safe_headersrW   rX   	canonicalrT   r   r   r~  r   compare_summarypublics                   r!   cmd_extract_credentialsr  s  s^   $(##GW%%D|GHHH	DHHY++//	::	;	;BT""(bGL

 ( (1!!! L Lqwws|| L L LLLI&'L#Hh///Ix-'?@@@FF8R((Mdo&&JTD111JE-m<<AACCDDL>>.;;y)):]++h''N33$W.OPP.1^^+.UU$koo''1191EE G zu2222X}4MVZ[[[[zu3333\$OOOOzu3333WTJJJJO _.}d>VWW:5 ? ? ??Y]^^^^!///E1H1H1HUJaJaJabL))7;;x0011 ^!<!<==APZ,_===VZ F 
$*V%
:
:
:;;;;;r#   c                 "   t          |          }i }t          |                    d                    D ]Z}	 t          |          }t	          | |          ||j        <   +# t          $ r#}dt          |          i||j        <   Y d }~Sd }~ww xY w|S )Nz*_cookie.jsonerror)r   rg   globrt   rn   rB   r   r   )rT   qn_dirresultsr-   otherexcs         r!   r  r    s    &\\FGv{{?3344 5 5	5$T**E!/u!E!EGDI 	5 	5 	5")3s88!4GDI	5Ns   'A
B)BBc                 j    | sd S i }|                                  D ]\  }fddD             ||<   |S )Nc                 <    i | ]}|                     |          S rJ   r\   )rG   rW   r   s     r!   rI   z%summarize_compare.<locals>.<dictcomp>  s7      e  e  eQ  e  e  er#   )rd   rb   rc   r`   ra   rg  )comparerU   rB   r   s      @r!   r  r    so     t
Cmmoo e e
d e  e  e  e  .d  e  e  eD		Jr#   c                     t          | j                  }t          || j                  }t	          t          j        t          |          dd                     d S )NFr3   r4   )rt   cookie_filer  qianniu_dirr   r)   r:   r  )r    leftr  s      r!   cmd_compare_credentialsr    sR    D,--D"4)9::G	$*&w//eA
N
N
NOOOOOr#   c           	         t          | j                  }t          | j                  t          j                                                            d          |g dddgddgd}t          | j        |           t          t          j        d	t          | j                  t          |          d
 |D             ddd                     d S )NrJ  ry  )r   r   r   r   r   r   r   )
source_harr  r   recommended_reportsoptional_reportsdeferred_reportsTc                     g | ]
}|d          S r   rJ   rh  s     r!   r_   z'cmd_build_downloads.<locals>.<listcomp>  s8      fJ  fJ  fJz{fghtfu  fJ  fJ  fJr#   )r'  rU   template_countreportsFr3   r4   )r   rj  r   r   r)  r*  r   r?   rU   r   r)   r:   ri   )r    r   manifests      r!   cmd_build_downloadsr    s   *4844I$(mmkoo''1191EE???-w7'0 H tx"""	$*DTX#i..  fJ  fJ  @I  fJ  fJ  fJ  K  K  Z_  hi  j  j  j  k  k  k  k  kr#   c                 N    t          |           }|                    d          pg S )Nr   r   rs   s     r!   load_manifestr    s$    T??D88K  &B&r#   c                    t          | j        | j                  \  }}t          | j                  }d | j                            d          D             fd|D             }| j        r|d | j                 }|st          d           t          | j
                  }|                    dd           g }|D ]D}t          |||| j        | j                  }|                    dd	i|           t!          t#          j        |d
         d                     | j        rkt'          |d         ||| j        | j                  \  }	}
t-          |d                   dz   }||z  }t/          |	||          }t1          j        |          }d|d         |d         |
t5          |          ||d}|                    |           t!          t#          j        |d                     |st7          d|           Ft9          |dz  | j        | j        |d           t!          t#          j        d| j        | j        t5          |          t;          |          ddd                     d S )Nc                 ^    g | ]*}|                                 |                                 +S rJ   )rS   r{   s     r!   r_   z$cmd_export_month.<locals>.<listcomp>  s-    FFFAAGGIIFaggiiFFFr#   r   c                 B    g | ]}|                     d           v |S r  r\   )rG   ri  wanteds     r!   r_   z$cmd_export_month.<locals>.<listcomp>  s/    FFFal(;(;v(E(E(E(E(Er#   z!No matching reports in manifest: Tr0   )r"  r;  r/  Fr=  r%  )rI  rJ  r   z.xlsxrK   
downloadedr   )r;  r   r%  poll_attemptr   bytes
valid_xlsxz#Downloaded file is not valid xlsx: zexport_manifest.json)r   r   events)r'  r   r   out_direvent_countr3   r4   )r   r   r   r  r  r  rR   limitr   r   r  r8   r/  r   r"  r   r   r)   r:   rP  poll_attemptspoll_secondsr   rV  zipfile
is_zipfiler   r  r?   ri   )r    rL   r   r   selectedr  r  ri  createddl_urlr  filenamerU  sizer  r;  r  s                   @r!   cmd_export_monthr    s   )$*doFFGWdm,,IFF!3!3C!8!8FFFFFFFF9FFFHz )KTZK( GEVEEFFF4<  GMM$M...F Q Qa'4:t|TTTw99:::dj%888999< 	01BGW_c_q{  |M   N   N   N$W[%9::WDX%VXw???'11
&aoQXYaQb  uA  KN  OW  KX  KX  cg  wA  B  BedjU333444 	QOXOOPPP	Qw//4:PTPZfl1m1mnnn	$*D4:
WZ[bWcWctwx~tt  A  A  PU  ^_  `  `  `  a  a  a  a  ar#   c                  >   t          j        dd          } |                     dt          t                               |                     dd          }|                    d	          }|                    t          
           |                    d          }|                    d           |                    d           |                    t          
           |                    d          }|                    d           |                    dd           |                    d           |                    t          
           |                    d          }|                    dd           |                    dd           |                    t          
           |                    d          }|                    d           |                    dd           |                    t          
           |                    d          }|                    ddd           |                    dd           |                    dd           |                    dd           |                    dd           |                    dd            |                    d!t          "           |                    d#t          d$%           |                    d&t          d'%           |                    t          
           | S )(Nzalimama-exportz.HAR-driven Alimama/Wanxiangtai report exporter)progdescriptionz--secret-dir)defaultcmdT)destrequireddoctor)funcrX  rj  z--outrY  z--store)r  z--compare-qianniu-dirrZ  z--cookie-filez--qianniu-dirr[  r\  z--monthzYYYY-MM)r  helpz
--manifestz	--reportszcampaign,scene,bidwordz	--out-dirz	--dry-run
store_true)actionz--limit)typez--poll-attemptsr0  )r  r  z--poll-secondsr1  )argparseArgumentParseradd_argumentr   SECRET_DIR_DEFAULTadd_subparsers
add_parserset_defaultsra  rq  r  r  r  r   r  )pr   sps      r!   build_parserr    s   %5CstttANN>3/A+B+BNCCC




5
5C		!	!BOOO$$$	
	#	#BOOEOOGOOO&&&	-	.	.BOOEOOIO---OO+,,,OO0O111	-	.	.BOOOdO333OOOdO333OO0O111	)	*	*BOOEOOGdO+++OO,O---		'	'BOOI9O===OOIO---OOL4O000OOK)AOBBBOOK$O///OOKO555OOICO(((OO%CO<<<OO$3O:::OO)O***Hr#   c                 v    t                      }|                    |           }|                    |           d S rt  )r  
parse_argsr  )argvparserr    s      r!   mainr    s1    ^^FT""DIIdOOOOOr#   __main__)F)r   NNr   )r0  r1  rt  ):r  r)  r   hashlibr)   r;   r   r   rF  urllib.parser   urllib.requestr  pathlibr   r  r   r>  rw   r  r   r   r"   r.   r?   rM   rY   rn   rt   rx   r   r   r   r   r   r   r   r   r   r   r   r  r  r/  rP  rV  ra  rq  r  r  r  r  r  r  r  r  r  __name__rJ   r#   r!   <module>r     sT          				 				 



                TTUU $3 mmmeee aaa! $ " " "P P P   c c c	 	 	       Q Q Q  = = =! ! !  @" " "  6  D. . .$ $ $
  o o o o$  ${ { { {4{ { { {2   & & &
< 
< 
<0< 0< 0<f	 	 	  P P Pk k k' ' '
a a a@( ( (V    zDFFFFF r#   