o
    z­jõ#  ã                   @   sè   d Z ddlZddlZddlmZ ddlmZmZmZm	Z	 ddl
Z
ddlmZ ddlZejejd� e e¡ZG dd„ dƒZG d	d
„ d
eƒZG dd„ deƒZddefdd„Zdeeeef  fdd„Zedkrrdd„ Ze eƒ ¡ dS dS )zz
Market price scraper for CropPilot
This module provides tools to scrape agricultural market prices from various sources.
é    N)ÚBeautifulSoup)ÚListÚDictÚAnyÚOptional)Údatetime)Úlevelc                   @   s&   e Zd ZdZdedee fdd„ZdS )ÚMarketScraperz"Base scraper class for market dataÚurlÚreturnc              
   Ã   s¦   �z3t jdd�4 I dH š}| |¡I dH }| ¡  |jW  d  ƒI dH  W S 1 I dH s-w   Y  W dS  tyR } zt d|› d|› �¡ W Y d}~dS d}~ww )zFetch HTML content from a URLg      >@)ÚtimeoutNzError fetching ú: )ÚhttpxÚAsyncClientÚgetÚraise_for_statusÚtextÚ	ExceptionÚloggerÚerror)Úselfr
   ÚclientÚresponseÚe© r   ú>/var/www/html/CropPilot/backend/app/services/market_scraper.pyÚ
fetch_page   s   €4ý€þzMarketScraper.fetch_pageN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ústrr   r   r   r   r   r   r	      s    r	   c                   @   sF   e Zd ZdZdZe› d�Zddedededeee	e	f  fd	d
„Z
dS )ÚAgMarknetScraperz:Scraper for Agmarknet portal (Indian agricultural markets)zhttps://agmarknet.gov.inz/SearchCmmMkt.aspxNÚ	commodityÚstateÚdistrictr   c                 Ã   s¢  ��z(t  ¡  d¡}| ¡ dv r=dddd|dœdd	d
d|dœdddd|dœdd	dd|dœdddd|dœdddd|dœgW S | ¡ dv rpdddd|dœdddd|dœd d!d"d#|dœd$d%d&d'|dœd(d)d*d+|dœd,dd-d.|dœgW S | ¡ d/v rœd0d1d2d3|dœd4d5d6d|dœd7d1d8d9|dœd:d1d;d<|dœd=d>d?d@|dœgW S | ¡ dAv rÏdBdCdDd|dœdEdFdGdH|dœdIdJdKdL|dœdMdNdOdP|dœdQdRdSdT|dœdUdVdWdX|dœgW S | ¡ dYv rûdZd[dDd\|d]œd^d[d_d`|d]œdad[dbdc|d]œddd[dedf|d]œdgd[dhdi|d]œgW S | ¡ djv �r(dkdldmdn|dœdodpdqdr|dœdsdtdudv|dœdwdxdydz|dœd{d|dWd}|dœgW S g W S  t�yP } zt d~|› d|› d€|› d�|› �¡ g W  Y d‚}~S d‚}~ww )ƒzûFetch prices for a specific commodity across different states in India
        
        Note: This is a simplified implementation that would need to be expanded
        to handle the actual form submission and parsing of the AgMarknet portal.
        z%Y-%m-%d)ÚwheatÚgehuÚgahuée   zWheat (Gehu)i’	  zPune Mandi, Maharashtra)ÚidÚcropÚprice_per_quintalÚlocationÚdateéf   zWheat (Premium)i(
  ég   i˜  zIndore Mandi, Madhya Pradeshéh   iØ	  zLudhiana Mandi, Punjabéi   zWheat (Standard)iL	  zKarnal Mandi, Haryanaéj   iÊ  zKanpur Mandi, Uttar Pradesh)ÚonionÚkandaÚpyazéÉ   zOnion (Kanda)iF  zNashik Mandi, MaharashtraéÊ   zOnion (Red)iª  éË   zOnion (Medium)i°  zAhmedabad Mandi, GujaratéÌ   zOnion (Small)i¶  zBengaluru Mandi, KarnatakaéÍ   zOnion (Large)i  zAzadpur Mandi, DelhiéÎ   i   zKurnool Mandi, Andhra Pradesh)ÚsoybeanÚsoyabeani-  ÚSoybeaniä  zUjjain Mandi, Madhya Pradeshi.  zSoybean (Yellow)i*  i/  i¨  zAkola Mandi, Maharashtrai0  iŠ  zKota Mandi, Rajasthani1  zSoybean (Black)i0  zDavangere Mandi, Karnataka)ÚriceÚpaddyÚchawali‘  zRice (Common)i€  i’  zRice (Basmati)i4!  zAmritsar Mandi, Punjabi“  zRice (Sona Masuri)ih  zNizamabad Mandi, Telanganai”  zRice (Ponni)iØ  zThanjavur Mandi, Tamil Nadui•  zRice (Parboiled)i  zBardhaman Mandi, West Bengali–  zRice (Joha)i   zJorhat Mandi, Assam)Ú	sugarcanez
sugar caneÚoosiõ  Ú	SugarcanezMill Gate Rate, Maharashtra)r*   r+   Úprice_per_tonner-   r.   iö  iN  zMill Gate Rate, Uttar Pradeshi÷  iÐ  zMill Gate Rate, Karnatakaiø  il  zMill Gate Rate, Tamil Naduiù  i”  zMill Gate Rate, Gujarat)ÚcottonÚkapasiY  zCotton (Medium Staple)i8  zRajkot Mandi, GujaratiZ  zCotton (Long Staple)i�  zAdilabad Mandi, Telanganai[  zCotton (J-34)iÔ  zSirsa Mandi, Haryanai\  zCotton (Shankar-6)i,  zAhmednagar Mandi, Maharashtrai]  zCotton (DCH-32)zDharwad Mandi, KarnatakazError fetching prices for z in z, r   N)r   ÚnowÚstrftimeÚlowerr   r   r   )r   r#   r$   r%   Útodayr   r   r   r   Ú
get_prices%   sl   €úúûúûû"€þzAgMarknetScraper.get_prices©NN)r   r   r   r    ÚBASE_URLÚ
SEARCH_URLr!   r   r   r   rM   r   r   r   r   r"      s
    
,r"   c                   @   s<   e Zd ZdZdZd
dedededeeeef  fdd	„Z	dS )ÚKrishiMandiScraperz/Scraper for KrishiMandi (another market source)zhttps://krishimandi.example.comNr+   r$   r%   r   c                 Ã   s   �g S )z)Get prices from Krishi Mandi across Indiar   )r   r+   r$   r%   r   r   r   rM   u   s   €zKrishiMandiScraper.get_pricesrN   )
r   r   r   r    rO   r!   r   r   r   rM   r   r   r   r   rQ   p   s    ,rQ   Ú	agmarknetÚsourcec                 C   s0   t tdœ}| |  ¡ ¡}|std| › �ƒ‚|ƒ S )z/Return appropriate scraper based on source name)rR   ÚkrishimandizUnknown scraper source: )r"   rQ   r   rK   Ú
ValueError)rS   ÚscrapersÚscraper_classr   r   r   Úget_scraper|   s   þrX   r   c                  ƒ   sP   �t dƒ‰ g d¢} ‡ fdd„| D ƒ}tj|Ž I dH }g }|D ]}| |¡ q|S )zMGet current prices for common crops across all of India from multiple sourcesrR   )r&   r4   r=   rC   r@   rG   c                    s   g | ]}ˆ   |¡‘qS r   )rM   )Ú.0r+   ©Úscraperr   r   Ú
<listcomp>�   s    z"get_all_prices.<locals>.<listcomp>N)rX   ÚasyncioÚgatherÚextend)Úcommon_cropsÚtasksÚresultsÚ
all_pricesÚresultr   rZ   r   Úget_all_prices‰   s   €re   Ú__main__c                  Ã   s$   �t ƒ I d H } ttj| dd�ƒ d S )Né   )Úindent)re   ÚprintÚjsonÚdumps)Úpricesr   r   r   Útest›   s   €rm   )rR   )r    r   r]   Úbs4r   Útypingr   r   r   r   rj   r   ÚloggingÚbasicConfigÚINFOÚ	getLoggerr   r   r	   r"   rQ   r!   rX   re   rm   Úrunr   r   r   r   Ú<module>   s&    
Qû