
    700j                        d Z ddlmZ ddlZddlZddlmZ ddlmZ ddlm	Z	 ddl
Z
ddlmZ  ee      j                         j                  Zedz  Zed	z  Zdd
Zd Zedk(  r e        yy)uU  BetterBrain Google Trends fetcher — daily cron.

Backend: SerpApi Google Trends (sostituisce pytrends per affidabilità).

Per ogni keyword del config:
  - Time series last 3 months (daily resolution)
  - Time series last 5 years (weekly resolution)
  - Related queries (top + rising)
  - Geographic interest by US state

Più 1 query Compare per le 5 keyword principali (volumi relativi).

Output: JSON files in data/YYYY-MM-DD/ + ultimo snapshot in data/latest.json.

Env vars richieste: SERPAPI_KEY

Run:
    cd ~/agents && uv run python -m projects.symetrics_trends.betterbrain.fetch_trends
    )annotationsN)datetime)Path)Any)serpapi_trendszconfig.yamldatac                 v    t        t              5 } t        j                  |       cd d d        S # 1 sw Y   y xY w)N)openCONFIG_PATHyaml	safe_load)fs    J/Users/sandro/agents/projects/symetrics_trends/betterbrain/fetch_trends.pyload_configr   '   s$    	k	a~~a  
		s   /8c                 F   t               } | d   }| d   }| d   }d}d}t        j                         j                  d      }t        |z  }|j                  dd       t        d	t        j                         j                          d
       t        dt        |       d|        t        d|        t        d|        t        j                         j                         | d   |||||di i d d i i d}d}	|D ]  }
t        d|
 d       	 t        j                  |
||      |d   |
<   t        j                  |	       t        d|
 d       	 t        j                  |
||      |d   |
<   t        j                  |	        t        dt        |       d       	 t        j                  |||      |d<   t        j                  |	       t        dt        |       d       	 t        j                  |||      |d<   t        j                  |	       |D ]  }
t        d |
 d!       g d d"}	 t        j                   |
|d      }|j#                  d#g       |d#<   t        j                  |	       t        d |
 d&       g d d'}	 t        j                   |
|d(      }|j#                  d)g       |d)<   t        j                  |	       |
|d#   |d)   dd(|d%   xs |d%   d+|d,   |
<    |D ]D  }
t        d-|
 d.       	 t        j$                  |
||      |d/   |
<   t        j                  |	       F |d1z  }t        d2z  }t'        |d3      5 }t)        j*                  ||d45       d d d        t'        |d3      5 }t)        j*                  ||d45       d d d        t        d6|        t        d7|        | j#                  d8d9      }t        j                         j-                         |d:z  z
  }d;}t        j/                         D ]k  }|j1                         s|j3                         j4                  |k  s2|j/                         D ]  }|j7                           |j9                          |d<z  }m |rt        d=| d>| d?       y y # t        $ r.}t        d|        |
g t        |      d|d   |
<   Y d }~d }~ww xY w# t        $ r.}t        d|        |
g t        |      d|d   |
<   Y d }~d }~ww xY w# t        $ r+}t        d|        |g t        |      d|d<   Y d }~sd }~ww xY w# t        $ r+}t        d|        |g t        |      d|d<   Y d }~bd }~ww xY w# t        $ r'}t        d$|        t        |      |d%<   Y d }~:d }~ww xY w# t        $ r'}t        d*|        t        |      |d%<   Y d }~d }~ww xY w# t        $ r.}t        d|        |
g t        |      d0|d/   |
<   Y d }~d }~ww xY w# 1 sw Y   xY w# 1 sw Y   xY w)@Nkeywordscompare_setgeoz	today 3-mz	today 5-yz%Y-%m-%dT)parentsexist_ok[z#] Starting BetterBrain Trends fetchz  Keywords (z): z  Geo: z
  Output: client)shortlong)
fetched_atr   r   r   r   
timeframestimeseries_shorttimeseries_longcompare_shortcompare_longrelated_queriesinterest_by_regiong      ?z  -> Fetching time series 'z' (short)...r   z    ! ERROR: )keywordrowserrorz' (long)...r   z  -> Fetching Compare (z keyword, short)...r   )r   r$   r%   z keyword, long)...r    z  -> Fetching related queries 'z' (top, 3m)...)topr%   r&   z    ! ERROR top: r%   z' (rising, 7d)...)risingr%   znow 7-dr'   z    ! ERROR rising: )r#   r&   r'   top_timeframerising_timeframer%   r!   z  -> Fetching geo region 'z'...r"   )r#   regionsr%   zsnapshot.jsonzlatest.jsonw   )indentu   ✓ Saved snapshot: u   ✓ Updated latest: data_retention_daysi  iQ r      z	  Pruned z old daily folders (retention z days))r   r   nowstrftimeDATA_DIRmkdirprint	isoformatlenr   fetch_timeseries	Exceptionstrtimesleepfetch_comparefetch_related_queriesgetfetch_interest_by_regionr
   jsondump	timestampiterdiris_dirstatst_mtimeunlinkrmdir)cfgr   r   r   timeframe_shorttimeframe_longtodayout_dirsnapshotSLEEPkwetop_partrrising_part
daily_filelatest_filer   	retentioncutoffprunedsubdirs                         r   mainr[   ,   sW   
-C:Hm$K
e*C!O NLLN##J/EGMM$M.	Ahlln&&())L
MN	LXs8*
56	GC5/	Jwi
 !
 lln..0h-"$"
   H& E +B4|<=	\/=/N/NC0H'(, 	

5+B4{;<	[.<.M.MC/H&'+ 	

5' , 
#C$4#55H
IJ[$2$@$@o%
! 	JJu	#C$4#55G
HIZ#1#?#?n$
  	JJu /t>BC-	'44RkJAeeE2.HUO 	

5/t3DEF!#d3	*44RiHA$%EE(B$7K! 	

5 E?!(+( )g&>+g*>+
"#B'+ > *2$d34	a1?1X1XC2H)*2. 	

5  ?*J]*K	j#	!		(Aa( 
	k3	1		(Aa( 
  
 
-.	 
./ -s3I\\^%%')e*;;FF""$==?v{{}55>^^%
 &LLNaKF % 	&!?	{&QR K  	\M!%&;=rTWXYTZ/[H'(,	\  	[M!%&:<bSVWXSY.ZH&'+	[  [aS!"1<bSVWXSY$Z![  ZaS!"0;RRUVWRX#Y Z  	'%aS)* #AHW	'  	*(,-#&q6K 	**  	aM!%&=?BY\]^Y_1`H)*2.	a 
			s   RSS; %T2 .,U),V;W	X	6X	R>#R99R>	S8
#S33S8;	T/ T**T/2	U&; U!!U&)	V2VV	W%WW	X#XX	XX __main__)returnzdict[str, Any])__doc__
__future__r   r@   r:   r   pathlibr   typingr   r   projects.symetrics_trends.libr   __file__resolveparentHEREr   r2   r   r[   __name__     r   <module>rj      sr   ( #       8 H~&&]"&=!
USp zF ri   