Ë
    òNj]  ã                   óÒ   — d 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mZm	Z	 dZ
dZ ej                  ej                  «       e	d¬«      z
  Zg d¢Zd	„ Zd
„ Zd„ Zd„ Zedk(  r e«        yy)u‰   
X Account Monitor â€” Scan all watchlist accounts via GetXAPI
Saves high-engagement tweets (last 3 days) to JSON for report generation.
é    N)ÚdatetimeÚtimezoneÚ	timedeltaz:get-x-api-6157f8edb420c3d5e50e062287389aa55635cd7c9630c81fzhttps://api.getxapi.comé   )Údays)HÚrunwaymlÚKling_aiÚ	pika_labsÚ
higgsfieldÚSeedanceÚnofilmschoolÚCuriousRefugeÚDiscussingFilmÚventuretwinsÚEHuangluÚkarenxchengÚazed_aiÚJeffSynthesizedÚ
paultrilloÚCorridorDigitalÚvisiblemakerÚNotionHQÚzapierÚLinearÚa16zÚai_filmmakerÚMagiermogulÚ
WuxiaRocksÚJiamingSuenÚ
moonvalleyÚhiggsfield_aiÚChandan_PerlaÚ	AITOPIAaiÚFaithJaiye2187ÚKammelaBalaÚ	MyStageAIÚAI_Video_DumpsÚChrisLaubAIÚ
GoogleLabsÚTheAIColonyÚcladlabsÚ
AIBuzzNewsÚAlexStudio44ÚDonutAIÚGoogleAIÚAI_with_jasminÚCharaspowerAIÚ
Ai_VaidehiÚ	CINEMA505ÚAIFrontlinerÚ	AIGuideHQÚAIWarperÚAITECHioÚ4aibscÚc_valenzuelabÚhubermanlabÚmattwalkersleepÚsleepfoundationÚ
eightsleepÚOuraÚWhoopÚdrmarkhymanÚSleepDoctorÚdrjenniferkushnerÚ
RickStevesÚLonelyPlanetÚnomadicmattÚFodorsTravelÚAiraloÚHolaflyÚ
Nomad_eSIMÚTurkishCultureÚVisitTurkeyÚanthropicaiÚOpenAIÚ	AndrewYNgÚkaishengtaic                 óH   — | sy 	 t        j                  | d«      }|S #  Y y xY w)Nz%a %b %d %H:%M:%S %z %Y)r   Ústrptime)Ú
created_atÚdts     ú)trends/x/account-monitor/scan_accounts.pyÚ
parse_daterU   /   s/   € ÙØðÜ×Ñ˜zÐ+DÓEˆØˆ	øðÙús   … �!c                 óÌ  — t         › d| › d�}t        j                  j                  |ddt        › �i¬«      }	 t        j                  j                  |d¬«      5 }|j                  «       j                  dd	¬
«      }d d d «       t        j                  d¬«      }|j                  d|«      }t        |t        «      r|g}t        |t        «      sg dfS |d fS # 1 sw Y   Œ]xY w# t        j                  j                  $ rB}|j                  «       j                  dd	¬
«      }g d|j                   › d|d d › �fcY d }~S d }~wt"        $ r}g t%        |«      d d fcY d }~S d }~ww xY w)Nz/twitter/user/tweets?userName=z&count=5ÚAuthorizationzBearer )Úheadersé   )Útimeoutzutf-8Úreplace)ÚerrorsF)ÚstrictÚtweetszunexpected response formatzHTTP z: éÈ   )ÚBASE_URLÚurllibÚrequestÚRequestÚAPI_KEYÚurlopenÚreadÚdecodeÚjsonÚloadsÚgetÚ
isinstanceÚdictÚlistÚerrorÚ	HTTPErrorÚcodeÚ	ExceptionÚstr)	ÚhandleÚurlÚreqÚrespÚbodyÚdatar^   ÚeÚerr_bodys	            rT   Úfetch_tweetsr{   8   sQ  € ÜˆJÐ4°V°H¸HÐ
E€CÜ
�.‰.×
 Ñ
  ¨À'Ì'ÈÐ@SÐ.TÐ
 Ó
U€Cð Ü�^‰^×#Ñ# C°Ð#Ó4ð 	A¸Ø—9‘9“;×%Ñ% g°iÐ%Ó@ˆD÷	Aä�z‰z˜$ uÔ-ˆØ—‘˜( DÓ)ˆÜ�fœdÔ#Ø�XˆFÜ˜&¤$Ô'ØÐ3Ð3Ð3Ø�tˆ|Ð÷	Að 	Aûô �<‰<×!Ñ!ò 6Ø—6‘6“8—?‘? 7°9�?Ó=ˆØ�U˜1Ÿ6™6˜( " X¨d¨s ^Ð$4Ð5Ð5Õ5ûÜò  Ø”3�q“6˜$˜3�<ÐÕûð úsN   ¸!C# Á"CÁ;AC# ÃC# ÃC ÃC# Ã#E#Ä 7D=Ä7E#Ä=E#Å	EÅE#ÅE#c                 ó"  — | j                  dd«      xs d}| j                  dd«      xs d}| j                  dd«      xs d}| j                  dd«      xs d}| j                  dd«      xs d}| j                  di «      xs i }|j                  dd	«      }|j                  d
d«      xs d}| j                  d| j                  dd	«      «      xs d	}	| j                  dd	«      }
| j                  dd	«      }||||||||	dd |
|t        |«      dœS )zHExtract metrics from tweet response, handling different response shapes.Ú	likeCountr   ÚretweetCountÚ
replyCountÚ	viewCountÚbookmarkCountÚauthorÚuserNameÚ Ú	followersÚtextÚfullTextÚidÚ	createdAtNiô  )ÚlikesÚretweetsÚrepliesÚviewsÚ	bookmarksÚauthor_handleÚauthor_followersr†   rˆ   rR   Úparsed_date)rj   rU   )ÚtweetrŠ   r‹   rŒ   r�   rŽ   r‚   r�   r�   r†   Útweet_idrR   s               rT   Úget_tweet_metricsr”   K   s$  € à�I‰I�k 1Ó%Ò*¨€EØ�y‰y˜¨Ó+Ò0¨q€HØ�i‰i˜ aÓ(Ò-¨A€GØ�I‰I�k 1Ó%Ò*¨€EØ—	‘	˜/¨1Ó-Ò2°€Ið �Y‰Y�x Ó$Ò*¨€FØ—J‘J˜z¨2Ó.€MØ—z‘z +¨qÓ1Ò6°QÐð �9‰9�V˜UŸY™Y z°2Ó6Ó7Ò=¸2€Dð �y‰y˜˜rÓ"€HØ—‘˜;¨Ó+€Jð ØØØØØ&Ø,Ø�T�c�
ØØ Ü! *Ó-ñð ó    c            
      óÀ  — g } g }t        t        «      D �]À  \  }}t        d|dz   › dt        t        «      › d|› d�t        j
                  ¬«       t        |«      \  }}|rHt        d|› �t        j
                  ¬«       |j                  ||dœ«       t        j                  d«       Œ”|s1t        d	t        j
                  ¬«       t        j                  d«       ŒÇg }|D ]`  }t        |«      }|d
   sŒ|d
   t        k\  sŒ!|d   |d   dz  z   |d   dz  z   |d   dz  z   }	t        |	d«      |d<   |j                  |«       Œb |ra|j                  d„ d¬«       | j                  |||d   d   dœ«       t        dt        |«      › d|d   d   › d�t        j
                  ¬«       nt        dt        j
                  ¬«       t        j                  d«       �ŒÃ | j                  d„ d¬«       t        j                  t         j"                  «      j%                  d«      t        t        «      t        | «      || dœ}
t        t'        j(                  |
dt*        ¬«      «       y ) Nú[é   ú/z] Scanning @z...)Úfilez  FAIL: )rs   rn   z  No tweets returnedr‘   rŠ   r‹   é   rŒ   g      ø?r�   éd   Úscorec                 ó   — | d   S )Nr�   © ©Úxs    rT   ú<lambda>zmain.<locals>.<lambda>Œ   s
   € ¨a°©j€ r•   T)ÚkeyÚreverser   )rs   r^   Ú
best_scorez  Found z  qualifying tweets (best score: ú)z"  No recent high-engagement tweetsc                 ó   — | d   S )Nr¥   rŸ   r    s    rT   r¢   zmain.<locals>.<lambda>™   s
   €  1 \¡?€ r•   z%Y-%m-%d %H:%M UTC)Ú	scan_dateÚtotal_accountsÚaccounts_with_contentÚfailuresÚaccounts)ÚindentÚdefault)Ú	enumerateÚHANDLESÚprintÚlenÚsysÚstderrr{   ÚappendÚtimeÚsleepr”   ÚCUTOFFÚroundÚsortr   Únowr   ÚutcÚstrftimerh   Údumpsrr   )Úall_resultsr«   Úirs   r^   rn   Úaccount_tweetsr’   Úmetricsr�   Úoutputs              rT   ÚmainrÄ   m   sE  € Ø€KØ€HäœwÓ'ó %‰	ˆˆ6Ü��!�A‘#��aœœG›�~ \°&°¸Ð=ÄCÇJÁJÕOÜ$ VÓ,‰ˆ�áÜ�H˜U˜GÐ$¬3¯:©:Õ6Ø�O‰O v¸Ñ>Ô?Ü�J‰J�qŒMØáÜÐ(´·
±
Õ;Ü�J‰J�qŒMØàˆØò 	/ˆEÜ'¨Ó.ˆGà�}Ó%¨'°-Ñ*@ÄFÓ*Jà Ñ(¨G°JÑ,?À!Ñ,CÑDÈÐPYÑHZÐ]`ÑH`ÑaÐelÐmtÑeuÐx{Ñe{Ñ|�Ü#(¨°£?�˜Ñ Ø×%Ñ% gÕ.ð	/ñ à×ÑÑ$8À$ÐÔGØ×ÑØ Ø(Ø,¨QÑ/°Ñ8ñ ô ô
 �HœS Ó0Ð1Ð1QÐR`ÐabÑRcÐdkÑRlÐQmÐmnÐoÔvy÷  wAñ  wAö  BäÐ6¼c¿j¹jÕIä�
‰
�1ŽðK%ðP ×ÑÑ2¸DÐÔAô —\‘\¤(§,¡,Ó/×8Ñ8Ð9MÓNÜœg›,Ü!$ [Ó!1ØØñ€Fô 
Œ$�*‰*�V A¬sÔ
3Õ4r•   Ú__main__)Ú__doc__Úurllib.requestra   rh   r¶   r³   Úosr   r   r   rd   r`   r»   r¼   r¸   r°   rU   r{   r”   rÄ   Ú__name__rŸ   r•   rT   ú<module>rÊ      sz   ðñó Û Û Û 
Û 	ß 2Ñ 2à
F€Ø$€Ø	ˆ�‰�h—l‘lÓ	#¡i°QÔ&7Ñ	7€ò€ò<ò ò& òD75ðr ˆzÒÙ…Fð r•   