o
    h
                     @   s  d dl mZmZmZ d dlmZ d dlZd dlZd dlZd dl	Z	d dl
mZ d dlZd dlmZ eddZejedgdgdgd	 ed
Zeddd Zedededd
ddedddededfdedededee dee f
ddZedkrejddd d!d" dS dS )#    )FastAPIQueryHTTPException)CORSMiddlewareN)Optional)run_scraperz-Instagram Reel Scraper API with Rate Limiting)title*)allow_originsallow_methodsallow_headers   /c                   C   s   ddiS )Nmessagez'Instagram Reels Scraper API is running. r   r   r   #/var/www/html/scraper/api_server.pyroot   s   r   z/reels.   i  )gelejsonz^(json|csv)$)patternusernamereelsoutput_format
profile_idtokenc              
      sp  t  rtdddt  I d H  tjd| dd}|j}W d    n1 s*w   Y  z~zhtjt	| ||d||dI d H  |d	krot
|d
d}t|}W d    n1 sZw   Y  d|dW W t   t| S t
|d
d}| }	W d    n1 sw   Y  d|	dW W t   t| S  ty }
 z	tdd|
 dd }
~
ww t   t| w )Ni  zXToo many requests. Another scraping task is already in progress. Please try again later.)status_codedetail.F)suffixdeleteg      ?)r   countoutputdelayr   r   r   zutf-8)encodingdone)statusresult)r'   
csv_resulti  zScraping failed: )scraper_semaphorelockedr   acquiretempfileNamedTemporaryFilenameasyncio	to_threadr   openr   loadreleaseosremoveread	Exception)r   r   r   r   r   tmp_fileoutput_pathfdatacsv_dataer   r   r   get_reels_with_limit   sN   

r?   __main__zapi_server:appz0.0.0.0i  T)hostportreload)fastapir   r   r   fastapi.middleware.corsr   r0   r-   r   r5   typingr   uvicornscrape_instagram_reelsr   appadd_middleware	Semaphorer*   getr   strintr?   __name__runr   r   r   r   <module>   sN    



7