
    j_                        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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d<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# Z)d=d&Z*d' Z+d>d)Z,d?d,Z-d@d-Z.d. Z/d/ Z0d0 Z1d1 Z2d2 Z3d3 Z4d4 Z5d5 Z6d6 Z7d7 Z8d8 Z9d9 Z:d@d:Z;e<d;k    r e;             dS dS )A    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    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>2   sW    bbbaTUTYTYZ`TaTabAEE&"##%%quuWb'9'9bbbr#    headerss    r!   
header_maprN   1   s    bb7=bbbbbr#   c                     i }| pd                     d          D ]M}d|vr|                     dd          \  }}|                                }|r|                                ||<   N|S )NrD   ;=   )splitstrip)cookie_headeroutpartkvs        r!   parse_cookie_headerrZ   5   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 rK   rF   )rH   rX   abs     r!   
<listcomp>z"cookie_compare.<locals>.<listcomp>E   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)rZ   sortedsetlen)a_headerb_headercommonequalr^   r_   s       @@r!   cookie_comparero   A   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   rM   rD   )r.   
isinstancedictrF   r-   r>   s     r!   read_cookie_jsonru   Q   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])rG   SENSITIVE_KEYSsafe_payloadrH   rX   rY   s      r!   rJ   z safe_payload.<locals>.<dictcomp>Z   s>    rrrZ^Z[]^AGGII$?$?LL\RS__rrrr#   c                 ,    g | ]}t          |          S rK   )ry   rH   xs     r!   r`   z safe_payload.<locals>.<listcomp>\   s    111AQ111r#   )rr   rs   itemslistpayloads    r!   ry   ry   X   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 rK   )rG   rx   rz   s      r!   rJ   z&secretless_payload.<locals>.<dictcomp>c   s0    PPPTQ		0O0OAq0O0O0Or#   )rr   rs   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textrD   )rF   r)   r*   	Exception)entryr   s     r!   json_post_textr   f   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.   rF   r,   s    r!   har_entriesr   p   s.    T??ub))--i<<<r#   c                     |                      di                                dd          }t          j                            |          }||j        |j        fS )Nr   urlrD   )rF   urllibparseurlparsenetlocr-   )r   r   us      r!   request_url_partsr   t   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   rM   r   r   /report/createDownLoadTask.jsond   z/report/(   csrfId
   loginPointIdc                     | d         S )Nr   rK   r}   s    r!   <lambda>z#find_best_request.<locals>.<lambda>   s
    qt r#   TkeyreverserR   )r   endswithrN   rF   r   
startswithappendrh   )r   	preferredfallbackr   r   hostr-   hmr   scoreitems              r!   find_best_requestr   z   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rptTyperD   queryDomains	excelNameaccountr   r   r   r   r   r   r   r   u   营销场景u   计划u	   关键词unknown)strrF   )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   )ri   	enumerater   r   r   r   rr   rs   r   r   r)   r;   addr   REPORT_LABELSrF   ry   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-rR      )days)mapintrS   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   rT   )rC   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 rK   rK   rz   s      r!   rJ   z&load_secret_bundle.<locals>.<dictcomp>   s#    ///$!QQ/A///r#   rq   )r   exists
SystemExitru   r.   r~   )	store
secret_dircookie_pathheaders_pathsession_pathr   rM   sessionrI   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>   rM   methodtimeoutrD   r&   r(   znon-json response status=z ctype=z	 preview=   )r)   r;   encoders   
setdefaultr   r   RequesturlopenreadrM   rF   decoder*   r   RuntimeErrorstatus)r   r  rM   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://)rr   rs   rF   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#   dayc           
         t          |          \  }}t          | d                   }||d<   ||d<   t          |                                          D ]H}	|	                    d          s|	                    d          s|	dk    r|                    |	d            I||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   vsTypevsTime_sumr   r   r   bizCodeuniversalBPsourceasync_dowdloadr   r   r   rD   z%Y%m%d_%H%M%Sr   
create_urlr   T)dry_runr   r   r   POST<   )r  rM   r   r  r>   taskIdinfookzcreate task failed for z: ok=z
 response=)r+  r   r   response_ok)r   rs   r   keysr   poprF   r	  r   r&   r   datetimenowstrftimer   ry   r  r  )templaterM   r   r   r(  
split_typer   r   r   r   labelr   r>   r   task_idr-  s                   r!   create_taskr8  !  s   U##JE38I&''G GKGI GLLNN## # #>>(## 	#s~~h'?'? 	#3&==KKT"""%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#  )queryrR   r   r   )r  rM   r  r>   resultr  poll)eventr+  attemptr  r  Fr5   ztask z# did not produce downloadUrl after z attempts; last=)rF   COMMONAPI_BASE_URLr   r   r   r   r-   r   _replacers   	parse_qslrA  updater   
urlunparse	urlencoderanger  r  r   r   r)   r;   booltimesleepTimeoutErrorry   )r7  rM   r   attemptssecondsbaseparsedqsr   lastrE  r>   r   dlr  s                  r!   poll_download_urlrY  ?  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                    i }|r |                     d          r|d         |d<   t          j                            | |          }t          j                            |d          5 }|                                }d d d            n# 1 swxY w Y   t          |          }|j                            dd           |	                    |           t          |          S )Nz
User-AgentrL   x   r  Tr0   )rF   r   r   r
  r  r  r   r8   r9   write_bytesrj   )r   out_pathrM   minimal_headersr  r  r>   s          r!   download_filer_  X  s    O >7;;|,, >(/(=%
.
 
 o
 
>
>C			S		1	1 Tyy{{              H~~HO$666t99s   'BBBc                     dD ]+}	 |                      |          |fc S # t          $ r Y (w xY w|                      dd          dfS )N)z	utf-8-siggb18030gbkr%   r&   r  zutf-8-replace)r  UnicodeDecodeError)rawencs     r!   decode_csv_bytesrf  g  sl    .  	::c??C''''! 	 	 	D	::gi:00/AAs   
,,c           
         t          |           } | j        }t          |           |                                 j        d}t          j        |           rHt          j        |           5 }|                                }||d<   d|v ri|| dz  }| |k    r'|	                    | 
                                           |                    t          |          ddd           |cddd           S d	 |D             }|r|                    |d
                   }t          |          \  }	}
|| dz  }|                    |	d           |                    t          |          |
dd           	 d
dl}|                                }|j        }d|_        t'          j        |	                                          D ]}|                    |           || dz  }|                    |           |                    t          |          t          j        |          dd           nK# t0          $ r>}|                    t          |          ddt          |          d           Y d}~nd}~ww xY w|cddd           S 	 ddd           n# 1 swxY w Y   |                    t          |           ddd           |S )zTReturn safe event details and produce a real .xlsx when platform returns zip-of-csv.)raw_file	raw_bytes	zip_namesz[Content_Types].xmlz.xlsxTxlsx)r   
valid_xlsxkindNc                 `    g | ]+}|                                                     d           )|,S ).csv)rG   r   )rH   ns     r!   r`   z/normalize_download_artifact.<locals>.<listcomp>  s3    HHHqQWWYY-?-?-G-GHHHHr#   r   ro  r%   r7   zip_csv)csv_filecsv_encodingrm  r>   )r   rl  xlsx_convertedF)r   rl  rt  
xlsx_errorrd  )r   r8   r   statst_sizezipfile
is_zipfileZipFilenamelistr\  
read_bytesrJ  r  rf  r:   openpyxlWorkbookactivetitlecsvreader
splitlinesr   saver   )raw_pathstemout_dirrB  znames	xlsx_path	csv_names	csv_bytesr   re  csv_pathr}  wbwsrowexcs                    r!   normalize_download_artifactr  p  sv   H~~HoGh--hmmoo6MNNF(## _X&& 	!JJLLE"'F;$--#nnn4	y(())(*=*=*?*?@@@s9~~TSYZZ[[[	 	 	 	 	 	 	 	 IHEHHHI FF9Q<00	,Y77	c"]]]2##D7#;;;3x==#W`aabbbA#OOO!**,,BB%BH"z$//*;*;<< ' '		# 'T... 8IGGI&&&MM3y>>I[\eIfIfz~""  A  A  A  A  A A AMM3x==afvyz}v~v~""  A  A  A  A  A  A  A  AA9	 	 	 	 	 	 	 		 	 	 	 	 	 	 	 	 	 	 	 	 	 	< MM3x==uMMNNNMsE   )A:J0BJ2B9H,+J,
I464I/*J/I44JJJ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   versionrS   r   r   r   
expanduserr   s    r!   
cmd_doctorr    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   rR   c                     | d         S )NrR   rK   r   s    r!   r   zcmd_scan_har.<locals>.<lambda>  s    rsturv r#   Tr      c                 J    g | ] }d  |                                 D             !S )c                 &    i | ]\  }}|d k    ||S r   rK   rz   s      r!   rJ   z+cmd_scan_har.<locals>.<listcomp>.<dictcomp>  sk      O}  O}  O}  Y]  YZ  \]  no  s|  n|  n|  PQ  ST  n|  n|  n|r#   r~   rH   ts     r!   r`   z cmd_scan_har.<locals>.<listcomp>  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   r  r   r   rF   r   rj   rh   r~   rV   r@   r   r)   r;   )	r    r   r   hostser   r   r-   rB  s	            r!   cmd_scan_harr    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   rM   r   c              3   >   K   | ]}|                                 V  d S N)
capitalize)rH   rW   s     r!   	<genexpr>z*cmd_extract_credentials.<locals>.<genexpr>  s,       L Lt!2!2 L L L L L Lr#   OriginRefererz/index.htmlr   rD   Tr0   r#  r$  r   r   r   r=  z%/commonapi/report/async/findPage.jsonrS  timespec)r   source_har_namebase_urlr#  r   r   r'  r<  find_page_urlcookie_names
created_atr   rq   )r?   r   r   z_qianniu_compare.json)r-  r   secret_filescookie_count
has_csrfIdhas_loginPointIdqianniu_compareFr3   r4   )$r   r  r   r   rN   rF   r   r~   SAFE_HEADER_NAMESjoinrS   r	  r   r   r   r9   r   rh   rZ   r/  rC   r   rG  r   r1  r2  r   r@   compare_qianniu_dircompare_with_qianniurj   rN  summarize_comparer   r)   r;   )r    r   bestr   r   safe_headersrX   rY   	canonicalrU   r   r   r  r   compare_summarypublics                   r!   cmd_extract_credentialsr    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   rh   globru   ro   rC   r   r   )rU   qn_dirresultsr-   otherr  s         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 rK   r]   )rH   rX   r   s     r!   rJ   z%summarize_compare.<locals>.<dictcomp>  s7      e  e  eQ  e  e  er#   )re   rc   rd   ra   rb   r  )comparerV   rC   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   )ru   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 )NrS  r  )r   r   r   r   r   r   r   )
source_harr  r   recommended_reportsoptional_reportsdeferred_reportsTc                     g | ]
}|d          S r   rK   r  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-  rV   template_countreportsFr3   r4   )r   r  r   r   r1  r2  r   r@   rV   r   r)   r;   rj   )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   rt   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 ]L}t          |||| j        | j        | j                  }|                    dd	i|           t#          t%          j        |d
         d                     | j        rqt)          |d         ||| j        | j                  \  }	}
t/          |d                   }|| dz  }t1          |	||          }t3          ||          }d|d         |d         |
|d|}|                    |           t#          t%          j        |d                     |                    d          st7          d|           Nt9          |dz  | j        | j        |d           t#          t%          j        d| j        | j        t;          |          t=          |          ddd                     d S )Nc                 ^    g | ]*}|                                 |                                 +S rK   )rT   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]   )rH   r  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(  r5  rD  r8  FrF  r+  )rR  rS  r   z.ziprL   
downloadedr   )rD  r   r+  poll_attemptbytesrl  z<Downloaded artifact could not be converted to a valid xlsx: zexport_manifest.json)r   r   events)r-  r   r   r  event_countr3   r4   )r   r   r   r  r  r  rS   limitr   r   r  r9   r8  r   r(  r5  r   r   r)   r;   rY  poll_attemptspoll_secondsr   r_  r  rF   r  r@   r   rj   )r    rM   r   r   selectedr  r  r  createddl_urlr  r  r  sizeartifactrD  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 g ga'4:t|`d`opppw99:::dj%888999< 	01BGW_c_q{  |M   N   N   N !566]]]*VXw???.x>>&aoQXYaQb  uA  LP  ]  ]  T\  ]edjU333444yy&& 	ge^ceefff	gw//4:PTPZfl1m1mnnn	$*D4:
WZ[bWcWctwx~tt  A  A  PU  ^_  `  `  `  a  a  a  a  ar#   c                  t   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!d"d"d#g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)funcr  r  z--outr  z--store)r   z--compare-qianniu-dirr  z--cookie-filez--qianniu-dirr  r  z--monthzYYYY-MM)r   helpz
--manifestz	--reportszcampaign,scene,bidwordz	--out-dirz	--dry-run
store_true)actionz--split-typer  r   zTday is default for exact natural-month aggregation; month follows the UI month split)r  choicesr  z--limit)typez--poll-attemptsr9  )r  r  z--poll-secondsr:  )argparseArgumentParseradd_argumentr   SECRET_DIR_DEFAULTadd_subparsers
add_parserset_defaultsr  r  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OONEE7;K  SiO  j  j  jOOICO(((OO%CO<<<OO$3O:::OO)O***Hr#   c                 v    t                      }|                    |           }|                    |           d S r  )r  
parse_argsr  )argvparserr    s      r!   mainr  [  s1    ^^FT""DIIdOOOOOr#   __main__)F)r   NNr   )Fr  )r9  r:  r  )=r  r1  r   r  hashlibr)   r<   r   r   rO  urllib.parser   urllib.requestrx  pathlibr   r  r   rG  rx   r  r   r   r"   r.   r@   rN   rZ   ro   ru   ry   r   r   r   r   r   r   r   r   r   r   r   r  r  r8  rY  r_  rf  r  r  r  r  r  r  r  r  r  r  r  r  __name__rK   r#   r!   <module>r     s        



   				 				 



                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$  ${ { { {<{ { { {2   B B B% % %P& & &
< 
< 
<0< 0< 0<f	 	 	  P P Pk k k' ' '
a a a@) ) )X    zDFFFFF r#   