
    ɇi6                     :    S SK r S SKrS SKrS rS rS r SS jrg)    Nc                     U R                  S5      S   R                  S5      n[        U5      S:  a  [        SU  35      eUS   R                  S5      US   p2S	U S
U S3$ )u  
Формирует 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      sx     99Wb!'',D
4y1}I#OPPAw~~c"DG@T#  OL  M  M    c           	        #    SnU SSSS.n [         R                  " 5        ISh  vN nUR                  XS9 ISh  vN nUR                  5         UR	                  5       I Sh  vN nSU;   a  [        S	US   S
    35      e/ nUR                  S0 5      R                  S/ 5       H"  nUR                  US   US   US   * S.5        M$     UsSSS5      ISh  vN   sSSS5      ISh  vN   $  N N N N N! , ISh  vN  (       d  f       O= fSSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f! [         R                   a  n[        S[        U5       35      eSnAff = f7f)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errorVK API Error: 	error_msgresponseitemsidname)r"   r#   owner_id.   Ошибка при запросе к VK API: )	aiohttpClientSessiongetraise_for_statusjson	ExceptionappendClientErrorstr)	r   r   r   sessionr    datagroupsgroupes	            r   get_user_groupsr4      sV     1C$ 	FS((**g{{3{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   
E6E C3E D)C5D)$C=&C7'A)C=D)C9D)!E -C;.E 2E63E 5D)7C=9D);E =D	DD	D)E "D%#E (E6)E /D20E <E ?E6 E E3E..E33E6c                   #    SnXSS.n [         R                  " 5        ISh  vN nUR                  X#S9 ISh  vN nUR                  5         UR	                  5       I Sh  vN nSU;   a  [        SUS   S    35      e/ nUR                  S	0 5      R                  S
/ 5       H  nUR                  US   US   S.5        M     UR                  SSSS.5        UsSSS5      ISh  vN   sSSS5      ISh  vN   $  N N N N N! , ISh  vN  (       d  f       O= fSSS5      ISh  vN    g! , ISh  vN  (       d  f       g= f! [         R                   a  n	[        S[        U	5       35      eSn	A	ff = f7f)u|  
Получает список альбомов/плейлистов группы через VK API.

Args:
    access_token: Токен доступа VK API
    owner_id: ID владельца (группы, отрицательное число)

Returns:
    list: Список словарей с информацией об альбомах [{'id': int, 'title': str}, ...]
z)https://api.vk.com/method/video.getAlbumsr   )r   r$   r   Nr   r   r   r   r    r!   r"   title)r"   r6   r   u   Без альбомаr%   )
r&   r'   r(   r)   r*   r+   r,   insertr-   r.   )
r   r$   r   r   r/   r    r0   albumsalbumr3   s
             r   get_video_albumsr:   H   sK     6C*wOFS((**g{{3{66())+%]]_,d?#nT'];5O4P$QRR!XXj"599'2FEMMtuW~"NO G a4K!LM 766 +**6, 7 +666 +*****   SHQQRRSs   FE DE D7DD7 $D$D%A9DD7*D+D7/E ;D	<E  FE D7DD7	E D"	DD"	D7%E 0D31E 6F7E=E >E
E FE F%E<<FFc                   #    SSK nSSKnUR                  R                  U5      (       d  [	        SU 35      eUR                  R                  U5      nSn	X:  a  [        SUS-  S S35      eS	n
U UU[        U5      US:w  a  UOSS
S.nUR                  5        VVs0 sH  u  pUc  M
  X_M     nnn [        R                  " 5        ISh  vN nUR                  X[        R                  " SS9S9 ISh  vN nUR                  5         UR                  5       I Sh  vN nSU;   a;  US   R                  SS5      nUS   R                  SS5      n[        SU SU 35      eSU;  d	  SUS   ;  a  [        S5      eUS   S   nUS   S   nSSS5      ISh  vN   US-  n[!        S[#        US-  S-  5      5      n[%        US5       nUR'                  5       nSSS5        [        R(                  " 5       nUR+                  SWUR                  R-                  U5      S 9  UR/                  WU[        R                  " US9S!9 ISh  vN nUR1                  5       I Sh  vN nUR2                  S":w  aA   [        R4                  " U5      n[7        U5      n[        S$UR2                   S%U S&U S'35      e [        R4                  " U5        SSS5      ISh  vN   S(nSnUR                  5       nS)n U U S*W 3S
S+.n! UR                  5       U-
  n"U"U:  a  [        S,US-   S-35      e UR                  U U![        R                  " SS9S9 ISh  vN n#U#R                  5         U#R                  5       I Sh  vN n$SU$;   ar  U$S   R                  SS5      nUS.:X  a1  [:        R<                  " U5      I Sh  vN    SSS5      ISh  vN   M  U$S   R                  SS5      n[        SU SU 35      eSU$;   aS  S/U$S   ;   aJ  U$S   S/   n%U%(       a;  [?        U%5      S:  a,  S0U S*U 3n&U&sSSS5      ISh  vN   sSSS5      ISh  vN   $ [:        R<                  " U5      I Sh  vN   SSS5      ISh  vN   GM  s  snnf  GN GN GNp GN! , ISh  vN  (       d  f       GN= f! , (       d  f       GN= f GNx GNc! [        R8                  [        4 a	    USS# n GNQf = f! [        R8                  [        4 a     GN<f = f GN5! , ISh  vN  (       d  f       GNK= f GN GN GNx GNj N N N N! , ISh  vN  (       d  f       N= f! [:        R@                   a$    [:        R<                  " U5      I Sh  vN     GM  [        RB                   a$    [:        R<                  " U5      I Sh  vN     GM  f = f! , ISh  vN  (       d  f       g= f! [         a    e [:        R@                   a    [        S15      e[        RB                   a  n'[        S$[7        U'5       35      eSn'A'ff = f7f)2ud  
Загружает видео в 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)r0   rA      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$   r>   r6   r<   rP   rQ   	file_sizemax_sizer   r   kr   r/   r    r0   r   rB   rD   rE   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_urlr3   s(                                           r   upload_video_to_vkr|   k   su    "  77>>*%%"I* VWW 
+I%H6yDV7WX[6\  ]N  O
 	

 1C$"M (AH4F  &||~?~tqdad~F?R\((**g{{G,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     w +**B &mmM:::M    g @ + -	   0 (' != !00*= 8$1$3$7	8 ,,j9 3   j  &A !C w +B ;M       P ++ !--666** !--666O +**X   C  B  C  	C \QRUVWRXQYZ[[\s  BYR)R/Y3W& R	W& 'W7R8W;$RR A/RWR0WR0A.W
SWT"S#T8!ST9S.WTAW-'UT-U$U<T0=>U;T3<UUT6UWAU/U;T9<U W& T;W& YU+T=,U0U;T?<U WY	W& WRWR-	RR-	(W0
R?	:	WTS+'T*S++T.TTTTWT*	TT*	%W-U0U3U6U9U;W& =U?UU	U
U	UWU-W	V	W	W,W	>W?W	WW		WW#WW#W& "Y#W& &<X>"X99X>>Y)rC   )r&   rd   r*   r   r4   r:   r|    r   r   <module>r~      s0      M(*SZ SH FH@\r   