o
    ht(                  	   @   s  d dl mZmZmZmZmZ d dlZd dlZd dlm	Z	m
Z
 d dlmZ d dlmZ d dlmZ d dlZe  eddkZed	Zed
ZedZe	eZee Zee Zed ZeeZdZdddddZdddddddddZdddddddddZdd Z d d! Z!d"d# Z"ej#d$d%gd&d'd( Z$ej#d)d%gd&d*d+ Z%ej#d,d%gd&d-d. Z&e#d/d0d1 Z'e#d2d3d4 Z(ed5krej)ed6 dS dS )7    )Flaskjsonifyrequestsend_from_directoryabortN)MongoClient	UpdateOne)load_dotenv)datetime)EmailMessageDEBUGTrue	MONGO_URIMONGO_DBMONGO_COLLECTION
fetch_logszhttps://olx.ba/api/searchzMozilla/5.0zhttps://olx.bazapplication/jsonzen-US,en;q=0.9)z
User-AgentRefererAcceptzAccept-Language   9z80,133,132,131,130,105datedesc(   373032302850726f64616a6129   )category_idcantoncitiessort_by
sort_orderper_pageattrattr_encoded   چ373032312850726f64616a61293a373235382850617263696a616c6e6f2072656e6f766972616e2c5a612072656e6f766972616e6a652c5520697a677261646e6a6929c           	      C   s  | rdnd}| rodd | D }dd | D }d}|r@|d7 }|D ]}|d|d	  d
|d  d|d  d|d  d	7 }q |d7 }|rh|d7 }|D ]}|d|d	  d
|d  d|d  d|d  d	7 }qH|d7 }|sn|snd}nd}t  }||d< td|d< td|d< td|d< |d |j|dd z<ttdttd#}|  |	tdtd  |
| td! W d    W d S 1 sw   Y  W d S  ty } ztd"|  W Y d }~d S d }~ww )#NzOLX.ba Update - Novi Oglasiz!OLX.ba Update - Nema novih oglasac                 S      g | ]}| d dkr|qS )	item_typelandget.0item r-   /var/www/html/olx_land/run.py
<listcomp>;       z%send_update_email.<locals>.<listcomp>c                 S   r%   )r&   houser(   r*   r-   r-   r.   r/   <   r0    u1   <h3>Sljedeća nova zemljišta su dodana:</h3><ul>zW
                    <li style="margin-bottom: 10px;">
                        <strong>titleu(   </strong> – <span style="color: red;">pricez-</span><br>
                        <a href="urlz">z/</a>
                    </li>
                z</ul>u,   <h3>Sljedeće nove kuće su dodane:</h3><ul>z)<p>Nema novih oglasa u ovom update-u.</p>Subject
EMAIL_FROMFromEMAIL_TOToEMAIL_CCCcu,   Vaš email klijent ne podržava HTML prikaz.html)subtype	SMTP_HOST	SMTP_PORT	SMTP_USER	SMTP_PASSzEmail sent.zError sending email: )r   osgetenvset_contentadd_alternativesmtplibSMTPintstarttlsloginsend_messageprint	Exception)	new_items_listsubject
land_itemshouse_itemshtml_contentr,   msgserverer-   r-   r.   send_update_email7   sj   


&rW   c                 C   s@   |dkrt  nt }| |d< tjtt|d}|  | S )Nr'   page)headersparams)	DEFAULT_LAND_PARAMScopyDEFAULT_HOUSE_PARAMSrequestsr)   OLX_API_URLDEFAULT_HEADERSraise_for_statusjson)page_numr&   rZ   respr-   r-   r.   
fetch_pagel   s
   re   c                  C   s  d} g }t  }ddg}|D ]}d}d }|d u s||krt||}|dg }|di }	|d u r6|	dd}g }
|D ]g}|d }|| ||d	 |d
 |d |d |d tdd |dg D d |d|dg d| |d|d}td|i}|d u }||d< |rt |d< |	| |
	t
d|id|idd q:|
rt|
}| |j|j 7 } td| d| d| d |d7 }|d u s||ksqtddt|ii}td |j d! tt | t||jd" | t|||jfS )#Nr   r'   r1   r   datameta	last_pageidr3   display_pricer4   locationcity_idc                 s   s&    | ]}| d dkr|d V  qdS )labelKvadratavalueNr(   )r+   rm   r-   r-   r.   	<genexpr>   s    z,fetch_and_store_all_pages.<locals>.<genexpr>special_labelsimageimageszhttps://olx.ba/artikal/r   )ri   r3   r4   	raw_pricerk   rl   area_m2	thumbnailrs   r5   r   r&   is_new
created_atz$setT)upsertzProcessed page z of z for ''z$ninzRemoved z stale listings)	timestamptotal_upserts	new_itemsdeleted_items)setre   r)   addnext
collectionfind_oner
   utcnowappendr   
bulk_writeupserted_countmodified_countrM   delete_manylistdeleted_countlog_collection
insert_onelen)r|   rO   seen_ids
item_typesr&   current_pagerh   resultlistingsrg   bulk_operationsr,   item_idsimplified_itemexistingrw   deleted_resultr-   r-   r.   fetch_and_store_all_pagest   sv   





4r   z/api/update-listingsGET)methodsc               
   C   s   t jdvrtddd zt \} }}}t| td|  d||dW S  ty? } ztdt|id	fW  Y d }~S d }~ww )
N)z	127.0.0.1z::1i  z(Access forbidden from non-local address.)descriptionz	Upserted z
 listings.)messager}   r~   error  )r   remote_addrr   r   rW   r   rN   str)r|   r}   rO   r~   rV   r-   r-   r.   update_listings   s   


 r   z/api/listingsc               
   C   s  zt tjdd} t tjdd}| d | }tjdd}tjd}tjd}tjd	}tjd
}tjd}i }	|rH| |	d< |d urT| dk|	d< |sX|ri }
|rnzt ||
d< W n	 tym   Y nw |rzt ||
d< W n	 ty   Y nw |
r|
|	d< |rdd |dD }|rd|i|	d
< dg}|dkrdg}n|dkrdg}t|		|
||}t|}|D ]
}t|d |d< qt|	}t|| |||| d | ddW S  ty } ztdt|idfW  Y d }~S d }~ww )NrX   r   r       r&   r2   rw   	min_price	max_pricerl   
sort_pricetruez$gtez$ltert   c                 S   s$   g | ]}|   rt|  qS r-   )stripisdigitrI   )r+   cidr-   r-   r.   r/      s   $ z!list_listings.<locals>.<listcomp>,z$in)r   asc)rt   r   r   )rt   r   _id)rX   r    totalpages)rf   rg   r   r   )rI   r   argsr)   lower
ValueErrorsplitr   findsortskiplimitr   r   count_documentsr   rN   )rX   r    r   r&   is_new_paramr   r   city_id_paramr   queryprice_querycity_idssort_criteriacursorr   listingr   rV   r-   r-   r.   list_listings   sr   

	 r   z/api/listings/mapc               
   C   s   z2t jdd} i }| r|  |d< tj|g dd}t|}|D ]
}t|d |d< q!td|iW S  t	yN } ztdt|idfW  Y d }~S d }~ww )	Nr&   r2   )rk   r4   r5   r3   rw   )
projectionr   rf   r   r   )
r   r   r)   r   r   r   r   r   r   rN   )r&   r   r   map_datar   rV   r-   r-   r.   list_map_listings  s     r   /c                   C   
   t ddS )Nstaticz
index.htmlr   r-   r-   r-   r.   home-     
r   z/kucec                   C   r   )Nr   z	kuce.htmlr   r-   r-   r-   r.   houses2  r   r   __main__)debug)*flaskr   r   r   r   r   r^   rC   pymongor   r   dotenvr	   r
   email.messager   rG   rD   r   r   r   r   mongo_clientdbr   r   __name__appr_   r`   r[   r]   rW   re   r   router   r   r   r   r   runr-   r-   r-   r.   <module>   st    


5L

E


