
    in;                         d dl Z d dlZd dlZd Zd Z	 ddZdedefdZ	 dded	ededed
ef
dZ		 dded	ededed
ef
dZ
y)    Nc                     | j                  d      d   j                  d      }t        |      dk  rt        d|        |d   j                  d      |d   }}d	| d
| dS )u5  
    Формирует iframe из URL видео VK Video.

    Args:
        url: URL видео вида https://vkvideo.ru/video-{owner_id}_{video_id}
             или https://vk.com/video{owner_id}_{video_id}

    Returns:
        str: HTML код iframe для встраивания видео
    video_   u.   Неверный формат URL видео: r   -   z3<iframe src="https://vkvideo.ru/video_ext.php?oid=-z&id=z&autoplay=0&loop=1" width="100%" style="aspect-ratio: 16 / 9;" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" frameborder="0" allowfullscreen></iframe>)splitlen
ValueErrorlstrip)urlprepoidvids       /app/vk_video.pyvideo_iframer      sz     99Wb!'',D
4y1}I#OPPAw~~c"DGC@T#  OL  M  M    c           	        K   d}| dddd}	 t        j                         4 d{   }|j                  ||      4 d{   }|j                          |j	                          d{   }d|v rt        d	|d   d
          g }|j                  di       j                  dg       D ]!  }|j                  |d   |d   |d    d       # |cddd      d{    cddd      d{    S 7 7 7 7 7 # 1 d{  7  sw Y   nxY wddd      d{  7   y# 1 d{  7  sw Y   yxY w# t         j                  $ r}t        dt        |             d}~ww xY ww)u  
    Получает список групп пользователя (каналов) через VK API.

    Args:
        access_token: Токен доступа VK API

    Returns:
        list: Список словарей с информацией о группах [{'id': int, 'name': str, 'owner_id': int}, ...]
              owner_id будет отрицательным числом для групп
    z$https://api.vk.com/method/groups.getr	   zadmin,editor5.131)access_tokenextendedfiltervN)paramserrorzVK API Error: 	error_msgresponseitemsidname)r    r!   owner_idu.   Ошибка при запросе к VK API: )	aiohttpClientSessiongetraise_for_statusjson	ExceptionappendClientErrorstr)	r   r   r   sessionr   datagroupsgroupes	            r   get_user_groupsr1      s[     1C$ 	FS((**g{{3v{66())+%]]_,d?#nT'];5O4P$QRR!XXj"599'2FEMM"'+$)&M). $* ) G ' 766 +**6, 7 +666 +*****  SHQQRRSs   
E*D8 C2D8 D#C4D#$C<)C6*A%C<D#C8D# D8 ,C:-D8 1E*2D8 4D#6C<8D#:D8 <D	DD	
D#D8 DD8 "E*#D5)D,*D51D8 4E*5D8 8E'E""E''E*c                   K   ddl }ddl}|j                  j                  |      st	        d|       |j                  j                  |      }d}	||	kD  rt        d|dz  dd      d	}
| ||t        |      |dk7  r|ndd
d}|j                         D ci c]  \  }}|	|| }}}	 t        j                         4 d{   }|j                  |
|t        j                  d            4 d{   }|j                          |j                          d{   }d|v r;|d   j                  dd      }|d   j                  dd      }t        d| d|       d|vsd|d   vrt        d      |d   d   }|d   d   }ddd      d{    |dz  }t!        dt#        |dz  dz              }t%        |d      5 }|j'                         }ddd       t        j(                         }|j+                  d|j                  j-                  |              |j/                  |t        j                  |      !      4 d{   }|j1                          d{   }|j2                  d"k7  r@	 t        j4                  |      }t7        |      }t        d$|j2                   d%| d&| d'      	 t        j4                  |       ddd      d{    d(}d}|j                         }d)} | | d* d
d+}!	 |j                         |z
  }"|"|kD  rt        d,|dz   d-      	 |j                  | |!t        j                  d            4 d{   }#|#j                          |#j                          d{   }$d|$v ro|$d   j                  dd      }|d.k(  r/t;        j<                  |       d{    	 ddd      d{    |$d   j                  dd      }t        d| d|       d|$v rKd/|$d   v rD|$d   d/   }%|%r:t?        |%      dkD  r,d0| d*| }&|&cddd      d{    cddd      d{    S t;        j<                  |       d{    ddd      d{    uc c}}w 7 7 7 a7 # 1 d{  7  sw Y    xY w# 1 sw Y   xY w7 ^7 I# t        j8                  t        f$ r	 |dd# }Y 8w xY w# t        j8                  t        f$ r Y #w xY w7 # 1 d{  7  sw Y   -xY w7 7 7 Z7 L7 7 7 7 # 1 d{  7  sw Y   xY w# t:        j@                  $ r" t;        j<                  |       d{  7   Y lt        jB                  $ r" t;        j<                  |       d{  7   Y w xY w# 1 d{  7  sw Y   yxY w# t        $ r  t:        j@                  $ r t        d1      t        jB                  $ r}'t        d$t7        |'             d}'~'ww xY ww)2u  
    Загружает видео в VK Video через API и опрашивает статус создания видео.

    Args:
        access_token: Токен доступа VK API
        video_path: Путь к файлу видео на диске
        owner_id: ID владельца (группы, отрицательное число)
        album_id: ID альбома (0 для загрузки без альбома)
        title: Название видео
        description: Описание видео (может быть пустым)

    Returns:
        str: URL видео для формирования iframe
    r   Nu'   Файл видео не найден: l        u(   Файл слишком большой (i   @z.2fu1    GB). Максимальный размер: 2 GBz$https://api.vk.com/method/video.saver   )r   r!   descriptiongroup_idalbum_idr      )total)r   timeoutr   r   u#   Неизвестная ошибка
error_code zVK API Error (z): r   
upload_urluJ   Неверный ответ от VK API: отсутствует upload_urlvideo_idi      
   <   rbfile)filename)r-   r8      i  u7   Ошибка при загрузке видео в VK: z, message='z', url=''i  z#https://api.vk.com/method/video.getr   )r   videosr   uI   Превышено максимальное время ожидания (un    минут). Видео еще не создано в VK. Попробуйте проверить позже.   r   zhttps://vkvideo.ru/videoug   Превышено время ожидания при загрузке файла на сервер VK.)"ostimepathexistsFileNotFoundErrorgetsizer   absr   r#   r$   r%   ClientTimeoutr&   r'   r(   maxintopenreadFormData	add_fieldbasenameposttextstatusloadsr+   JSONDecodeErrorasynciosleepr   TimeoutErrorr*   )(r   
video_pathr"   r5   titler3   rG   rH   	file_sizemax_sizer   r   kr   r,   r   r-   r   r9   r;   r<   file_size_mbupload_timeout
video_file
video_data	data_formupload_responseresponse_text
error_datamax_wait_timepoll_interval
start_time	check_urlcheck_paramselapsed_timecheck_response
check_datar   	video_urlr0   s(                                           r   upload_video_to_vkrt   I   s    "  77>>*%"I* VWW 
+I%H86yDV7WX[6\  ]N  O
 	

 1C$"M (AH4F  &||~?~tq!ad~F?T\((**g{{FG,A,A,K #  ))+%]]_,d? $W 1 1+?d eI!%g!2!2<!DJ#nZLI;$OPPT)\jAQ-Q#$pqq!*-l;

+J7 & %4L c,*;b*@&ABN
 j$':'__.
 (  ((*I ))*5    ||--NC $   !&5&:&:&< <"))S08%)ZZ%>
$'
O	 $QRaRhRhQi j$$-;hzl!E JJ}-1 > $MMJ=I ,%Jaz2L #yy{Z7-/#cdquwdwcx y{ | 0&{{!+ ' 5 5B ?  +     (&779+9+>+>+@%@
"j0)3G)<)@)@q)QJ *c 1&-mmM&B B B (     " -7w,?,C,C$/1V-"	 '0&4ZLI;$O'" !" '*4 ':j+A A$.z$:7$CE$Ua '?xj($T !* (1G     { +**F &mmM:::M    k @ + -	   4 (' != !00*= 8$1$3$7	8 ,,j9 3   j  &A !C   { +F ;M       P ++ !--666** !--666S +**\   C  B  C  	C \QRUVWRXQYZ[[\s  BX
Q1"Q1'X+V3 Q7V3 -V4Q:5V8$RQ=A)RVR 0VRA5VR&	VS4 R)!S45 R,S45S
VS1AV',T3T
T3$T;T<:T6T7T<T3TT3VATT3+T,T30V3 <T=V3 XTTTT3*T+T3/V1X7V3 :V=R VR		R
R	VR#		V)S4,S
S4SS4S.*S4-S..S41V4T	:S=;T	V
T3TTT3T3V3 TT3T0	$T'%T0	,T33+VU!V$V'*VVVVVVV0$V'%V0,V3 /X0V3 39X,XXXvq_tokenvq_api_basec                   K   dd|  i}| d}ddi}t        j                         4 d{   }|j                  |||      4 d{   }|j                          |j	                          d{   }ddd      d{    ddd      d{    j                  dg       }|st        d	      t        |d
   t              r|d
   d   S |d
   S 7 7 7 g7 Y# 1 d{  7  sw Y   ixY w7 `# 1 d{  7  sw Y   pxY ww)uJ   Получает ID первого доступного веб-сайта.AuthorizationBearer websitepager	   N)headersr   r   uW   Не найдено ни одного веб-сайта для этого токена.r   r    )r#   r$   r%   r&   r'   r(   
isinstancedict)	ru   rv   r|   r   r   r,   r   r-   r   s	            r   get_vq_website_idr     s     '( 45GM
!Ca[F$$&&';;sGF;CCx%%'!(D DC '& HHWb!Eqrr'a$758D>EU1XE 'C( DCCC '&&&s   )DCDC3C	C3$C0C1C5C3 CC3DC1ADC3CC3C.	"C%#C.	*C31D3D9C<:DDrs   r_   archivec                   K   |sdnd}| d| d}dd| i}| |d}t        j                         4 d{   }	|	j                  |||	      4 d{   }
|
j                          |
j	                          d{   }ddd      d{    ddd      d{    d
   d   }|d   }d| d| d| d}||fS 7 7 k7 E7 7# 1 d{  7  sw Y   GxY w7 ># 1 d{  7  sw Y   NxY ww)uh   Загружает видео по ссылке в Viqeo и возвращает (video_id, embed_code).i  il8  zwebsite/z/video/uploadrx   ry   )r   r_   N)r|   r'   r   r   r    z<script async src="https://cdn.viqeo.tv/js/vq_starter.js"></script>
<div style="width:100%;height:0;position:relative;padding-bottom: 56.25%;" class="viqeo-embed viqeo-horizontal viqeo-embed--z" data-vnd="z^" data-profile="1648" data-aspectRatio="0.5625">
<iframe src="https://cdn.viqeo.tv/embed/?vid=zh" width="100%" height="100%" style="position:absolute;" frameBorder="0" allowFullScreen></iframe>
</div>)r#   r$   rV   r&   r'   )rs   r_   ru   rv   r   
website_idr;   r|   payloadr,   r   r-   
video_itemr<   
embed_codes                  r   	upload_vqr     s,     %%J=MBJ'( 45G%0G$$&&'<<
G'<JJh%%'!(D KJ '& gw'J$HG HP  GQ  Q]  ^f  ]g g88@z  Bk	l 
 Z 'J( KJJJ '&&&s   3C0B<C0CB>C$C:C ;C?C
CCC0C"C0>C CCC	
CC	CC0C-!C$"C-)C0c                 >   K   t        | ||||       d{   S 7 w)uy   Загружает видео по публичной ссылке в Viqeo. Возвращает (video_id, embed_code).)r   N)r   )rs   r_   ru   rv   r   s        r   load_to_viqeor   7  s!      9eX{GTTTTs   )r:   )F)r[   r'   r#   r   r1   rt   r+   r   boolr   r    r   r   <module>r      s      M(*S\ FHB\JFc F F(       	 
  > UUU U 	U
 Ur   