o
    !{gb                     @   sx   d dl Z d dl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
 G dd deZG dd de
ZG d	d
 d
eZdS )    N)	urlencode   )CrawlerFeederImageDownloaderParserc                   @   s   e Zd ZdddZdS )FlickrFeeder  c                 K   s`  |dkrd}| j d d}d|ddd}|D ]>}|dv r$|| ||< q|d	v rN|| }t|tjr:|d
||< qt|ttfrF|||< q| j d| q| j d| q|t	| }|
dd}	|
dd}
ttd|	 }t|
|
| D ]5}| j
dr d S | d| }	 z	| j|dd W n   | j
drY nY nnq| j d|  qxd S )Nr	   z3max_num exceeds 4000, set it to 4000 automatically.&https://api.flickr.com/services/rest/?zflickr.photos.searchjson   )methodapi_keyformatnojsoncallback)user_idtagstag_modetextlicensesortprivacy_filteraccuracysafe_searchcontent_typemachine_tagsmachine_tag_modegroup_idcontactswoe_idplace_idhas_geogeo_contextlatlonradiusradius_units
is_commons
in_galleryis_gettyextrasper_pagepagecolor_codesstylesorientation)min_upload_datemax_upload_datemin_taken_datemax_taken_datez%Y-%m-%dz%s is invalidzUnrecognized search param: %sr+   d   r,   g     @@reach_max_numz&page=T)blockzput url to url_queue: )loggerwarning
isinstancedatetimedatestrftimeintstrerrorr   getmathceilrangesignaloutputdebug)selfapikeymax_numkwargsbase_urlparamskeyvalurlr+   r,   page_maxicomplete_url rS   t/var/www/bot.gig.net.ua/public_html/telegram/P1/HellBot/venv/lib/python3.10/site-packages/icrawler/builtin/flickr.pyfeed   sF   !
zFlickrFeeder.feedN)r	   )__name__
__module____qualname__rU   rS   rS   rS   rT   r   
       r   c                   @   s   e Zd ZdddZdS )FlickrParserNc                 c   s    t |jdd}|d dkrd S |d d }|D ]Q}|d }d}d	||d
dd}	z| j|t|	 }
t |
j }W n   Y q|d dkrWdd |d d D }nq|D ]}||v rkt|| |dV   nqZqd S )Nzutf-8ignorestatokphotosphotoidr
   zflickr.photos.getSizesr   r   )r   r   photo_idr   r   c                 S   s"   i | ]}t |d   |d qS )labelsource)r>   lower).0itemrS   rS   rT   
<dictcomp>h   s   " z&FlickrParser.parse.<locals>.<dictcomp>sizessize)file_urlmeta)r   loadscontentdecodesessionr@   r   dict)rG   responserH   size_preferencerm   r^   r_   ra   rK   rL   retinfourlsszrS   rS   rT   parseR   s:   zFlickrParser.parse)N)rV   rW   rX   rw   rS   rS   rS   rT   rZ   Q   rY   rZ   c                       s@   e Zd Zdeeef fdd	Z						d	 fdd	Z  ZS )
FlickrImageCrawlerNc                    sF   |d u rt d}|std|| _t j|||g|R i | d S )NFLICKR_APIKEYzapikey is not specified)osgetenvRuntimeErrorrH   super__init__)rG   rH   
feeder_cls
parser_clsdownloader_clsargsrJ   	__class__rS   rT   r~   r   s   	
"zFlickrImageCrawler.__init__  r   Fc           
   
      s   | j |d< g d}|d u r|}nt|tr||v sJ |g}n|D ]}	|	|v s)J q!t j|t| j |dt|||||dd d S )NrH   )originalz
large 2048z
large 1600largez
medium 800z
medium 640mediumz	small 320small	thumbnailzlarge Squaresquare)rH   rr   )rI   min_sizemax_sizefile_idx_offset	overwrite)feeder_kwargsparser_kwargsdownloader_kwargs)rH   r9   r>   r}   crawlrp   )
rG   rI   rr   r   r   r   r   rJ   default_orderrv   r   rS   rT   r      s(   



zFlickrImageCrawler.crawl)r   NNNr   F)	rV   rW   rX   r   rZ   r   r~   r   __classcell__rS   rS   r   rT   rx   q   s    rx   )r:   r   rA   rz   urllib.parser    r   r   r   r   r   rZ   rx   rS   rS   rS   rT   <module>   s    G 