Team Ai
Apppublic

Deepvest/ProfilingAI

sourceHugging Faceupdated 2y agoView on Hugging Face
0likes
data_fetcher.cpython-310.pyc36 linesDownload Raw Back to __pycache__
1o

2J��g�6�@s�ddlZddlZddlZddlZddlmZm	Z	m3Z4ddlmZmZddl
Z
ddlZddlZddlmZddlZddlmZddlZddlZddlmZeej�ej�e�ddd	��Gd5d�d�ZGdd
�d
�ZGdd�d�ZdS)�N)�List�Dict�Optional)�datetime�	timedelta)�
BeautifulSoup)�Article)�load_dotenvZDeepvest_system�srczdata_API.envc@s6eZdZdZdd�Zd"deededejfdd	�Z	d#deede7deefdd
�Zdeedefdd�Z
deedeefdd�Zdeedejfdd�Zdeedefdd�Zdedeefdd�Zdedejfdd�Zdedeefdd�Zdeedefdd �Zd!S)$�DataFetcheru6Gestionnaire centralisé de récupération de donnéescCs<tjdd�|_t�dd�|_|j�dd�t�|j�|_dS)NZ(cu9bhbhr01qnf5nmldv0cu9bhbhr01qnf5nmldvg)�api_keyZHaynwOOFiEd2Ty3m6Xu7sPhrdZ2nuu7y46JtjB7qbYnhK79w86AqR9PC2maDzl2qDpJZLceQeEe5Yz21871112111419486208-taeYKwppobslPmDa4NaDMCqCEG9qoaZ-N2izETc3KGe6tPE8yc1rvKTo20lnZewhxWw19HhzlebRp)	�finnhub�Client�finnhub_client�tweepyZOAuthHandlerZtwitter_authZset_access_tokenZAPI�twitter_api)�self�r�8/Users/sandrine/Deepvest_system/src/core/data_fetcher.py�__init__s��zDataFetcher.__init__�2y�symbols�period�returnc	�s��t��}|D];}ztj||d�}|�|�}tj||gdd�}|d||<WqtyB}ztd|�d|���WYd}~qd}~ww|S)u&Récupération des données de marché)r�)�axis�Closeu3Erreur lors de la récupération des données pour �: N)�pd�	DataFrame�yf�downloadZ_get_finnhub_data�concat�	Exception�print)	rrr�data�symbolZyf_dataZfinnhub_dataZ
combined_data�errr�fetch_market_data%s�8 ��zDataFetcher.fetch_market_data��daysc9�sR�g}t��4IdH��}|D]�}zd|jj|t��t|d��d�t���d�d�}|D]G}z,t|d�}|�	�|�10�|�||d|j|d|dt�
|d�|�d	�d11��Wq+tyr}	z
td|	���WYd}	~	q+d}	~	wwWqty�}	ztd|�d
|	���WYd}	~	qd}	~	wwWd�IdH|S1IdHs�wY|S)u)Récupération des nouvelles financièresN)r*z%Y-%m-%d)�_from�to�urlZheadline�sourcer�	sentiment)r&�title�contentr.r-rr/z'Erreur lors de l'analyse de l'article: u4Erreur lors de la récupération des nouvelles pour r)�aiohttp�
ClientSessionrZcompany_newsr�nowr�strftimerr!�parse�append�text�
fromtimestamp�getr#r$)12rrr*�	news_data�sessionr&Zfinnhub_news�news�articler'rrr�fetch_news_data:sL���	��� ���� � zDataFetcher.fetch_news_datac�s2�|�|�IdH|�|�IdH|�|�IdHd�S)u(Récupération des données alternativesN)�social_media�web_traffic�	satellite)�_fetch_social_media_data�_fetch_web_traffic_data�_fetch_satellite_data)rrrrr�fetch_alternative_data`s13��z"DataFetcher.fetch_alternative_datac�s��g}|D]C}z%|jjd|��dddd�}|D]}|�d|j|j|j|j|d��qWqtyH}ztd|�d	|���WYd14}~qd15}~ww|S)u0Récupération des données des réseaux sociaux�$�en�d�extended)�q�lang�countZ16tweet_mode�twitter)�platformr8�	timestampZ17engagementr&u<Erreur lors de la récupération des données sociales pour rN)	rZ
search_tweetsr7Z	full_text�18created_atZfavorite_countZ
retweet_countr#r$)rr�social_datar&ZtweetsZtweetr'rrrrChs0��1920�� ��z$DataFetcher._fetch_social_media_datac�sz�t��}|D]3}z|�|�}|r|�|�IdH}|||<Wqty:}ztd|�d|���WYd}~qd}~ww|S)u)Récupération des données de trafic webNu4Erreur lors de la récupération du trafic web pour r)rr�_get_company_domain�_get_similerweb_metricsr#r$)rr�traffic_datar&Zcompany_domainZtraffic_metricsr'rrrrD�s�21� ��z#DataFetcher._fetch_web_traffic_datac�sv�i}|D]3}z|�|�}|r|�|�IdH}|||<Wqty8}ztd|�d|���WYd}~qd}~ww|S)u%Récupération des données satelliteNu=Erreur lors de la récupération des données satellite pour r)�_get_company_locations�_get_satellite_metricsr#r$)rrZsatellite_datar&Zcompany_locationsZsatellite_metricsr'rrrrE�s�22� ��z!DataFetcher._fetch_satellite_datar&cCs:z|jj|d�}|�dd��dd��dd�WSYdS)u/Récupère le domaine principal de l'entreprise)r&Zweburl�zwww.zhttps://N)rZcompany_profile2r:�replace)rr&Zcompany_profilerrrrS�s23zDataFetcher._get_company_domain�domainc���dS)u6Récupère les métriques de trafic web via SimilerwebNr)rrZrrrrT�s�z#DataFetcher._get_similerweb_metricscCszWdSgYS)u6Récupère les emplacements principaux de l'entrepriseNr�rr&rrrrV�sz"DataFetcher._get_company_locations�	locationsc�r[)uARécupère les métriques satellite pour les emplacements donnésNr)rr]rrrrW�s�z"DataFetcher._get_satellite_metricsN)r)r))�__name__�24__module__�__qualname__�__doc__rr�strrrr(�intrr?rFrCrDrErrS�SeriesrTrVrWrrrrrs &rc@sjeZdZdZdeedeeeffdd�Zdeedeeeffdd�Z	deedeeeffd	d25�Z26dS)�SatelliteDataAnalyzeru<Analyse des données satellite pour indicateurs économiquesr]rc�s��i}|D]H}z(|j|d|ddd�IdH}||d|�|�|�|d|�d�||d	<WqtyM}ztd27|d	�d|���WYd}~qd}~ww|S)uAAnalyse l'activité de vente au détail via le trafic de parkings�latitude�	longitudei���lat�lon�radiusNZtotal_spaces�id)Zparking_occupancyZcustomer_trafficZ28yoy_change�namezErreur analyse retail pour r)Z_analyze_parking_occupancyZ_estimate_customer_trafficZ_calculate_yoy_changer#r$)rr]Zretail_metrics�locationZ
parking_countr'rrr�get_retail_activity�s$��29�$��z)SatelliteDataAnalyzer.get_retail_activityc�s��i}|D]N}z.|j|d|dd�IdH}|j|d|dd�IdH}|d|d|dd�||d	<WqtyS}ztd30|d	�d|���WYd}~qd}~ww|S)uDAnalyse l'activité industrielle via imagerie thermique et pollutionrfrg�rirjN�activity_score�level�operational_status)Zactivity_levelZemissions_levelrsrmz!Erreur analyse industrielle pour r)Z_analyze_thermal_activityZ_analyze_emissionsr#r$)rr]Zindustrial_metricsrnZheat_signature�	emissionsr'rrr�get_industrial_activity�s*����$��z-SatelliteDataAnalyzer.get_industrial_activity�portsc�s��i}|D]S}z3|j|d|ddd�IdH}|j|d|dd�IdH}||d||�||d�d�||d	<WqtyX}ztd31|d	�d|���WYd}~qd}~ww|S)u*Analyse l'activité maritime et logistiquerfrgi�rhNrp�capacity)Zvessel_occupancyZcontainer_volumeZport_congestionrmzErreur analyse maritime pour r)Z_analyze_vessel_trafficZ_analyze_container_stacksZ_calculate_congestion_scorer#r$)rrvZshipping_metrics�portZvessel_countZcontainer_countr'rrr�get_shipping_activity�s,���32�$��z+SatelliteDataAnalyzer.get_shipping_activityN)r^r_r`rarrrb�floatroruryrrrrre�s33"rec@szeZdZdZdeedeeeffdd�Zdeedefdd�Z	d	edefd34d�Z35dedefd
d�Zd	edefdd�Z
dS)�SocialMediaAnalyzeruHAnalyse avancée des médias sociaux pour le sentiment des investisseursrrc�s��i}|D]^}z@|�|�IdH}|�|�IdH}|�|�IdH}|�|d|d|dg�|�|�|�|d|d|d�|�|�d�||<Wqtyc}ztd|�d|���WYd}~qd}~ww|S)u0Analyse complète du sentiment des investisseursN�score�volume)Zoverall_sentiment�sentiment_momentumZretail_interestZinstitutional_hintszErreur analyse sentiment pour r)	�_analyze_reddit_sentimentZ_analyze_stocktwits_sentiment�_analyze_twitter_sentiment�_aggregate_sentiment_scores�_calculate_sentiment_momentum�_gauge_retail_interest�_detect_institutional_activityr#r$)rrZsentiment_datar&Zreddit_sentimentZstocktwits_sentimentZtwitter_sentimentr'rrr�analyze_investment_sentiments2���� ��z0SocialMediaAnalyzer.analyze_investment_sentiment�scorescCs gd�}tdd�t||�D��S)u1Agrège les scores de sentiment avec pondération)g�������?�333333�?r�css�|]	\}}||VqdS)Nr)�.0r|�weightrrr�	<genexpr>As�zBSocialMediaAnalyzer._aggregate_sentiment_scores.<locals>.<genexpr>)�sum�zip)rr��weightsrrrr�>sz/SocialMediaAnalyzer._aggregate_sentiment_scoresr&cC�dS)z!Calcule la dynamique du sentimentNrr\rrrr�C�z1SocialMediaAnalyzer._calculate_sentiment_momentum�volumescGs|r36t|�t|�SdS)u2Évalue l'intérêt des investisseurs particuliersr)r��len)rr�rrrr�Hsz*SocialMediaAnalyzer._gauge_retail_interestcCr�)u0Détecte les signes d'activité institutionnelleNrr\rrrr�Lr�z2SocialMediaAnalyzer._detect_institutional_activityN)r^r_r`rarrbrr�rzr�r�rcr�r�rrrrr{s$r{) �yfinancer r
�pandasr�numpy�np�typingrrrrrr2�asyncio�json�bs4r�requestsZ	newspaperrr�osZdotenvr	�path�join�dirname�__file__rrer{rrrr�<module>s(/S