
    \j                        S r SSKJr  SSKrSSKrSSKJrJrJr  SSKJ	r	  SSK
Jr  \" SS9rSS	 jrSS
 jrSS jrSS jr        SS jrg)u;   Генерация выходных JSON и MD из SQLite.    )annotationsN)datetimetimezone	timedelta)Path)connect   )hoursc                6   [        U 5       nUR                  SU45      R                  5       nSSS5        / nW H  nUS   =(       d    Sn0 SUS   _SUS   _SUS   _SUS   _S	US	   _S
US
   _SUS   _SUS   _SUS   _SUS   _S[        U5      _S[        UR	                  5       5      _SU_SUS   _S[        US   5      _SUS   _nUS   (       a  [        R                  " US   5      US'   UR                  U5        M     U$ ! , (       d  f       N= f)u   Собирает список постов из БД в формате, совместимом с историческим архивом.z8SELECT * FROM posts WHERE channel = ? ORDER BY date DESCNtext post_iddatelinkviewsforwardsrepostscomments	reactionsererrtext_len
word_count
media_type
is_deletedstats_updated_atviews_growth)	r   executefetchalllensplitbooljsonloadsappend)db_pathchannelconnrowsrecordsrr   records           "/home/rasp/tgstat-puller/render.pybuild_json_recordsr.      s   		T||FJ
 (* 	 
 GyB
q|
AfI
 AfI
 QwZ	

 *
 q|
 *
 ;
 !D'
 1U8
 D	
 #djjl+
 D
 !L/
 $q/
  "4 5!
$ ^%)ZZ.0A%BF>"v- . N= 
	s   "D


Dc                    [        X5      nUR                  R                  SSS9  UR                  [        R
                  " USSS9SS9  g )NTparentsexist_okF   )ensure_asciiindentutf-8encoding)r.   parentmkdir
write_textr#   dumps)r&   r'   out_pathr*   s       r-   render_channel_jsonr>   1   sI     2GOO$6

7q9      c                    [         R                  " U R                  SS5      5      nUR                  [	        [
        5      5      nUR                  S5      $ )NZz+00:00z%Y-%m-%d %H:%M)r   fromisoformatreplace
astimezoner   
MSK_OFFSETstrftime)isodtmsks      r-   _iso_utc_to_msk_strrJ   :   s@    			C :	;B
--,
-C<<())r?   c               	   [        U 5       nUR                  SU45      R                  5       nUc  SS S.nUR                  SU45      R                  5       nS S S 5        [        X5      n[	        U5      nU(       a  SOSn	[
        R                  " [        R                  S9R                  S5      n
WS	   nUb  [        U5      OSnUb  W(       a}  US	   bw  XS	   -
  n[
        R                  " [        R                  S9R                  5       [
        R                  " US
   S5      R                  5       -
  R                  nUSUS SU S3-  n/ nUR                  SU 35        UR                  S5        UR                  SU
 SU	 SU SU S3	5        UR                  S5        U(       a  [        US SS9S S nUR                  S5        [!        US5       H  u  nn[#        US
   5      nUS   =(       d    SR%                  SS5      R'                  5       n[	        U5      S:  a  US S S-   nUR                  U S UR)                  S!S5       S"U S#UR)                  S$5      =(       d    S S%35        U(       d  M  UR                  S&U 35        M     UR                  S5        UR                  S'5        UR                  S5        U GH  n[#        US
   5      nUR)                  S$5      =(       d    SnS(UR)                  S!5      b  UR)                  S!5      OS 3S)UR)                  S*5      b  UR)                  S*5      OS 3S+UR)                  S,5      b  UR)                  S,5      OS 3S-UR)                  S.5      b  UR)                  S.5      OS 3/nUR)                  S/5      (       a  UR                  S0US/    35        UR)                  S15      b  UR                  S2US1    S335        UR)                  S45      b  UR                  S5US4    S335        UR                  S6U S7U S8U S%35        UR                  S9S:R+                  U5      -   S9-   5        US   =(       d    SR'                  5       nU(       a  UR                  U5        OUR                  S;5        UR                  S5        GM     UR,                  R/                  SSS<9  UR1                  SR+                  U5      S=S>9  g ! , (       d  f       GN= f)?Nz:SELECT title, subscribers FROM channels WHERE username = ?u   —)titlesubscriberszSELECT date, subscribers FROM channel_snapshots
               WHERE channel = ? AND date <= date('now', '-6 days')
                 AND date >= date('now', '-31 days') AND subscribers IS NOT NULL
               ORDER BY date DESC LIMIT 1u'   частичное обновлениеu   полное)tzz%Y-%m-%drM   r   z (z+du    за u    дн.)u/   # TGStat архив постов канала @r   u   Обновлено: u   ). Всего постов: u   . Подписчики: .c                6    U R                  S5      =(       d    S$ )Nr   r   )get)r+   s    r-   <lambda>$render_personal_md.<locals>.<lambda>i   s    AEE'N,?a,?r?   T)keyreverse
   u&   ## Топ-10 по просмотрам   r   
 x   u   …z. **r   u   ** просмотров · u    · [ссылка](r   )z   > u.   ## Все посты (новые сверху)u   Просмотры: u   Реакции: r   u   Комменты: r   u   Пересылки: r   r   u!   Репосты каналами: r   zER: %r   zERR: z### u    — [z](z**u    · u0   _(без текста, только медиа)_r0   r6   r7   )r   r   fetchoner.   r    r   nowr   utcrF   strr   strptimedaysr%   sorted	enumeraterJ   rC   striprQ   joinr9   r:   r;   )r&   r'   r=   partialr(   chweek_agor*   totallabelupdatedsubssubs_strdeltaspanlinestopir+   dpreviewr   metricsr   s                           r-   render_personal_mdrw   @   s   		T\\HJ
 (* 	 : 6B <<- J
 (* 	 
" !2GLE9@5nEllhll+44Z@GmD ,s4y%HH-)@)L..-224##HV$4jAFFHIJN$ 	br
&g66E	LLB7)LM	LL	LL
wir%0LUG T!!)
!	- 
LLW"?NsPRS=>c1%DAq#AfI.AyB//c:@@BG7|c!!$3-%/LLA3d155%#8"99TUVTWWjklkpkpqwkxk~|~j  @A  B  CwuWI./ & 	R	LLAB	LL&	*uuV}"
 #QUU7^5O155>UZ"[\QUU;5G5Squu[1Y^_` aeeJ6G6Sz!2Y^ _`"j8I8U155#4[`"ab	
 55NN>q|nMN55;"NNT!D'!,-55<#NNU1U8*A./tA3fTF"TF!45TFKK00478&	R&&(LLLLKLR3 6 OO$6		%(7;e 
	s   AS**
S9c                   SU S3nU R                  U5       H7  nUR                  5       UR                  5       :w  d  M'  UR                  5         M9     g)u]   Удалить все файлы по маске для канала, кроме `keep_file`.u(   {mars} {source} посты канала u    – *.jsonN)globresolveunlink)
output_dirchannel_username	keep_filemaskps        r-   cleanup_dated_snapshotsr      sG     ::J9K;WD__T"99;)++--HHJ #r?   )r&   r   r'   r`   returnz
list[dict])r&   r   r'   r`   r=   r   r   None)rG   r`   r   r`   )
r&   r   r'   r`   r=   r   rg   r"   r   r   )r|   r   r}   r`   r~   r   r   r   )__doc__
__future__r   r#   sqlite3r   r   r   pathlibr   dbr   rE   r.   r>   rJ   rw   r    r?   r-   <module>r      si    A "   2 2  Q
 F*S<l

 
 	

 

r?   