From be4b40b0af99f91b688642afdf959c01aa1dbe50 Mon Sep 17 00:00:00 2001 From: Alex Kup <116945542+Lifailon@users.noreply.github.com> Date: Tue, 16 Jan 2024 16:03:01 +0300 Subject: [PATCH] Add SuperAGI, Replicate and media api tmdp, ivi, kp, videocdb --- README.md | 251 ++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 243 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index df662c7..3f7a15e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ ![GitHub code size in bytes](https://img.shields.io/github/languages/code-size/lifailon/PS-Commands) ![GitHub Repo stars](https://img.shields.io/github/stars/Lifailon/PS-Commands) -πŸ“’ Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π° Habr: [PowerShell ΠΈ Π΅Π³ΠΎ возмоТности Π² уходящСм Π³ΠΎΠ΄Ρƒ](https://habr.com/ru/articles/782592/) +πŸ“’ Π‘Ρ‚Π°Ρ‚ΡŒΡ Π½Π° Habr: [PowerShell ΠΈ Π΅Π³ΠΎ возмоТности](https://habr.com/ru/articles/782592/) - [Help](#help) - [Object](#object) @@ -91,6 +91,12 @@ - [Ansible](#ansible) - [GigaChat](#GigaChat) - [YandexGPT](#YandexGPT) +- [SuperAGI](#superagi) +- [Replicate](#replicate) +- [TMDB](#tmdb) +- [ivi](#ivi) +- [Kinopoisk](#kinopoisk) +- [VideoCDN](#videocdn) # Help @@ -1205,12 +1211,12 @@ $mac_coll `Get-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber"` ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ Π½ΠΎΠΌΠ΅Ρ€ Ρ‚Π΅ΠΊΡƒΡ‰Π΅Π³ΠΎ RDP ΠΏΠΎΡ€Ρ‚Π° \ `Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp" -Name "PortNumber" -Value "3390"` ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ RDP-ΠΏΠΎΡ€Ρ‚ \ -`New-NetFirewallRule -Profile Any -DisplayName "RDP 3390" -Direction Inbound -Protocol TCP -LocalPort 3390` ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ RDP-ΠΏΠΎΡ€Ρ‚ \ -`Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\" -Name "fDenyTSConnections"` \ -`Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\" -Name "fDenyTSConnections" -Value 0` Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ rdp \ +`$(Get-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\" -Name "fDenyTSConnections").fDenyTSConnections` Ссли 0, Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ \ +`Set-ItemProperty -Path "HKLM:\System\CurrentControlSet\Control\Terminal Server\" -Name "fDenyTSConnections" -Value 0` Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ RDP \ `reg add "HKLM\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f` \ -`(gcim -Class Win32_TerminalServiceSetting -Namespace root\CIMV2\TerminalServices).SetAllowTSConnections(0)` Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ RDP -`Get-Service TermService | Restart-Service -Force # ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ rdp-слуТбу +`(gcim -Class Win32_TerminalServiceSetting -Namespace root\CIMV2\TerminalServices).SetAllowTSConnections(0)` Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ RDP (для Windows Server) \ +`Get-Service TermService | Restart-Service -Force` ΠΏΠ΅Ρ€Π΅Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ rdp-слуТбу \ +`New-NetFirewallRule -Profile Any -DisplayName "RDP 3390" -Direction Inbound -Protocol TCP -LocalPort 3390` ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚ΡŒ RDP-ΠΏΠΎΡ€Ρ‚ ### IPBan @@ -1379,7 +1385,7 @@ icm $_ {Get-LocalGroupMember "Administrators"} `Get-IscsiServerTarget | fl TargetName, LunMappings` \ `Connect-IscsiTarget -NodeAddress "iqn.1995-05.com.microsoft:srv2-iscsi-target-2-target" -IsPersistent $true` ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ ΠΈΠ½ΠΈΡ†ΠΈΠ°Ρ‚ΠΎΡ€ΠΎΠΌ ΠΊ Ρ‚Π°Ρ€Π³Π΅Ρ‚Ρƒ \ `Get-IscsiTarget | fl` \ -`Disconnect-IscsiTarget -NodeAddress β€³iqn.1995-05.com.microsoft:srv2-iscsi-target-2-targetβ€³ -Confirm:$false` ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ +`Disconnect-IscsiTarget -NodeAddress "iqn.1995-05.com.microsoft:srv2-iscsi-target-2-target" -Confirm:$false` ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒΡΡ # ActiveDirectory @@ -1457,7 +1463,7 @@ CN (Common Name) - ΠΎΠ±Ρ‰Π΅Π΅ имя `Get-ADObject -Filter {Deleted -eq $True -and ObjectClass -eq 'group' -and Name -like '*Allow*'} –IncludeDeletedObjects | Restore-ADObject –Verbose` Π²ΠΎΡΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ Π³Ρ€ΡƒΠΏΠΏΡƒ ΠΈΠ»ΠΈ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€ ### thumbnailPhoto -`$photo = [byte[]](Get-Content C:\Install\adm.jpg -Encoding byte)` ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² массив Π±Π°ΠΉΡ‚ΠΎΠ² (jpeg/bmp Ρ„Π°ΠΉΠ», Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ„ΠΎΡ‚ΠΎ Π΄ΠΎ 100 Кб ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 96Γ—96) \ +`$photo = [byte[]](Get-Content C:\Install\adm.jpg -Encoding byte)` ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΠΈ Π² массив Π±Π°ΠΉΡ‚ΠΎΠ² (jpeg/bmp Ρ„Π°ΠΉΠ», Ρ€Π°Π·ΠΌΠ΅Ρ€ΠΎΠΌ Ρ„ΠΎΡ‚ΠΎ Π΄ΠΎ 100 Кб ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ΠΌ 96?96) \ `Set-ADUser support4 -Replace @{thumbnailPhoto=$photo}` Π·Π°Π΄Π°Ρ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π°Ρ‚Ρ€ΠΈΠ±ΡƒΡ‚Π° thumbnailPhoto ### ADDomainController @@ -6547,3 +6553,232 @@ $body = @" "@ Invoke-RestMethod -Method POST -Uri "https://llm.api.cloud.yandex.net/foundationModels/v1/completion" -Headers @{"Content-Type"="application/json"; "Authorization"="Bearer $IAM_TOKEN"; "x-folder-id"="$FOLDER_ID"} -Body $body ``` +# SuperAGI + +https://github.com/TransformerOptimus/SuperAGI \ +https://models.superagi.com/playground/generate \ +https://documenter.getpostman.com/view/30119783/2s9YR3cFJG +```Bash +SUPERAGI_API_KEY="31f72164129XXXXX" +prompt="посчитай сумму 22+33, Π΄Π°ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π±Π΅Π· лишнСго тСкста" +request=$(curl -s -X POST 'https://api.superagi.com/v1/generate/65437cbf227a4018516ad1ce' \ +-H 'Content-Type: application/json' \ +-H "Authorization: Bearer $SUPERAGI_API_KEY" \ +-d '{ + "prompt": ["$prompt"], + "max_tokens": 500, + "temperature": 0.9, + "top_p": 0.15, + "repetition_penalty": 0, + "best_of": 1.05, + "top_k": 50, + "stream": false +}') +echo $request | sed "s/data: //" | jq -r .choices[].text +``` +```PowerShell +$SUPERAGI_API_KEY = "31f72164129XXXXX" +$prompt = "посчитай сумму 22+33, Π΄Π°ΠΉ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΡ‚Π²Π΅Ρ‚ Π±Π΅Π· лишнСго тСкста" +$request = Invoke-RestMethod -Method Post -Uri 'https://api.superagi.com/v1/generate/65437cbf227a4018516ad1ce' -Headers @{ + 'Content-Type' = 'application/json' + 'Authorization' = "Bearer $SUPERAGI_API_KEY" +} -Body (@{ + prompt = @($prompt) + max_tokens = 500 + temperature = 0.9 + top_p = 0.15 + repetition_penalty = 0 + best_of = 1.05 + top_k = 50 + stream = $false +} | ConvertTo-Json) +$($request -replace "^data: " | ConvertFrom-Json).choices.text +``` +# Replicate + +https://replicate.com/stability-ai/stable-diffusion/examples?input=http +```Bash +REPLICATE_API_TOKEN="r8_STyeUNXiGonkLfxE1FSKaqll26lXXXXXXXXXX" +prompt="Π–ΠΈΡ€Π°Ρ„ Π² полоску Π·Π΅Π±Ρ€Ρ‹" +request=$(curl -s -X POST \ + -H "Authorization: Token $REPLICATE_API_TOKEN" \ + -H "Content-Type: application/json" \ + -d $'{ + "version": "ac732df83cea7fff18b8472768c88ad041fa750ff7682a21affe81863cbe77e4", + "input": { + "prompt": "$prompt" + } + }' \ + https://api.replicate.com/v1/predictions) +request_url=$(echo $request | jq -r .urls.get) +response_status=$(curl -s -H "Authorization: Token $REPLICATE_API_TOKEN" $request_url | jq -r .status) +while [[ $response_status != succeeded ]]; do + response_status=$(curl -s -H "Authorization: Token $REPLICATE_API_TOKEN" $request_url | jq -r .status) +done +curl -s -H "Authorization: Token $REPLICATE_API_TOKEN" $request_url | jq -r .output[] +``` +```PowerShell +$REPLICATE_API_TOKEN = "r8_STyeUNXiGonkLfxE1FSKaqll26lXXXXXXXXXX" +$prompt = "Π–ΠΈΡ€Π°Ρ„ Π² полоску Π·Π΅Π±Ρ€Ρ‹" +$body = @{ + version = "ac732df83cea7fff18b8472768c88ad041fa750ff7682a21affe81863cbe77e4" + input = @{ + prompt = $prompt + } +} | ConvertTo-Json +$headers = @{ + "Authorization" = "Token $REPLICATE_API_TOKEN" + "Content-Type" = "application/json" +} +$request = Invoke-RestMethod -Uri "https://api.replicate.com/v1/predictions" -Method POST -Body $body -Headers $headers +$response = Invoke-RestMethod $($request.urls.get) -Headers @{"Authorization" = "Token $REPLICATE_API_TOKEN"} +while ($response.status -ne "succeeded") { + $response = Invoke-RestMethod $($request.urls.get) -Headers @{"Authorization" = "Token $REPLICATE_API_TOKEN"} +} +$response.output +``` +# TMDB + +https://developer.themoviedb.org/reference/intro/getting-started +```PowerShell +$TOKEN = "548e444e7812575caa0a7eXXXXXXXXXX" +$Endpoint = "search/tv" # поиск сСриала (tv) ΠΈ Ρ„ΠΈΠ»ΡŒΠΌΠ° (movie) ΠΏΠΎ названию +$Query = "Π·ΠΈΠΌΠΎΡ€ΠΎΠ΄ΠΎΠΊ" +$url = $("https://api.themoviedb.org/3/$Endpoint"+"?api_key=$TOKEN&query=$Query") +$(Invoke-RestMethod -Uri $url -Method Get).results +$id = $(Invoke-RestMethod -Uri $url -Method Get).results.id # Π·Π°Π±Ρ€Π°Ρ‚ΡŒ id сСриала (210865) https://www.themoviedb.org/tv/210865 + +$Endpoint = "tv/$id" # ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ сСриалС ΠΏΠΎ Π΅Π³ΠΎ ID +$url = $("https://api.themoviedb.org/3/$Endpoint"+"?api_key=$TOKEN") +$(Invoke-RestMethod -Uri $url -Method Get) # список сСзонов (.seasons), количСство эпизодов (.seasons.episode_count) + +(Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2?api_key=$Token" -Method Get).episodes # вывСсти 2 сСзон +Invoke-RestMethod -Uri "https://api.themoviedb.org/3/tv/$id/season/2/episode/8?api_key=$Token" -Method Get # вывСсти 8 эпизод +``` +# ivi + +https://ask.ivi.ru/knowledge-bases/10/articles/51697-dokumentatsiya-dlya-api-ivi + +`Invoke-RestMethod https://api.ivi.ru/mobileapi/categories` список ΠΊΠ°Ρ‚Π΅Π³ΠΎΡ€ΠΈΠΉ ΠΈ ΠΆΠ°Π½Ρ€ΠΎΠ² (genres/meta_genres) \ +`Invoke-RestMethod https://api.ivi.ru/mobileapi/collections` ΠΏΠΎΠ΄Π±ΠΎΡ€ΠΊΠΈ + +`(Invoke-RestMethod "https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok").result.seasons.number` ΠΊΠΎΠ»-Π²ΠΎ сСзонов \ +`(Invoke-RestMethod "https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok").result.seasons[1].episode_count` ΠΊΠΎΠ»-Π²ΠΎ сСрий Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ сСзонС \ +`(Invoke-RestMethod "https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok").result.seasons[1].ivi_release_info.date_interval_min` Π΄Π°Ρ‚Π° Π²Ρ‹Ρ…ΠΎΠ΄Π° ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ сСрии \ +`(Invoke-RestMethod "https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok").result.kp_rating` Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ Π² Кинопоиск (8.04) + +`$id = (Invoke-RestMethod "https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok").result.kp_id` ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ id Π² Кинопоиск (5106881) \ +`id=$(curl -s https://api.ivi.ru/mobileapi/search/v7/?query=zimorodok | jq .result[].kp_id)` ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ id Π² Кинопоиск + +# Kinopoisk +```Bash +id=5106881 +get=$(curl -s https://www.kinopoisk.ru/film/$id/episodes/) +printf "%s\n" "${get[@]}" | grep -A 1 "Π‘Π΅Π·ΠΎΠ½ 2" | grep "эпизодов" | sed -r "s/^.+\: //" # количСство эпиздовод Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ сСзонС (8) +``` +### kinopoisk.dev + +https://t.me/kinopoiskdev_bot - ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ Ρ‚ΠΎΠΊΠ΅Π½ \ +https://kinopoisk.dev/documentation - докумСнтация ΠΏΠΎ API Π² Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ OpenAPI + +`GET /v1.4/movie/{id}` поиск ΠΏΠΎ id +```PowerShell +$id = 5106881 +$API_KEY = "ZYMNJJA-0J8MNPN-PB4N7R7-XXXXXXX" + +$Header = @{ + "accept" = "application/json" + "X-API-KEY" = "$API_KEY" +} +$irm = Invoke-RestMethod "https://api.kinopoisk.dev/v1.4/movie/$id" -Method GET -Headers $Header +$irm.rating.kp # Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ Π² Кинопоиск (8,079) +$irm.seasonsInfo # количСство сСзонов ΠΈ эпизодов Π² Π½ΠΈΡ… +``` +```Bash +id=5106881 +API_KEY="ZYMNJJA-0J8MNPN-PB4N7R7-XXXXXXX" +get=$(curl -s -X GET \ + "https://api.kinopoisk.dev/v1.4/movie/$id" \ + -H "accept: application/json" \ + -H "X-API-KEY: $API_KEY") +echo $get | jq .rating.kp # Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ Π² Кинопоиск (8,079) +echo $get | jq .seasonsInfo[1].episodesCount # количСство эпизодов Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌ [1] сСзонС (6) +``` +`GET /v1.4/movie/search` +```Bash +query="zimorodok" +page=1 # ΠΊΠΎΠ»-Π²ΠΎ страниц для Π²Ρ‹Π±ΠΎΡ€ΠΊΠΈ +limit=1 # ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов Π½Π° страницС +curl -s -X GET \ + "https://api.kinopoisk.dev/v1.4/movie/search?page=$page&limit=$limit&query=$query" \ + -H "accept: application/json" \ + -H "X-API-KEY: $API_KEY" | jq . + +limit=5 +request=$(curl -s -X GET \ + "https://api.kinopoisk.dev/v1.4/movie/search?page=$page&limit=$limit&query=%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" \ + -H "accept: application/json" \ + -H "X-API-KEY: $API_KEY" | jq .) +echo $request | jq '.docs[] | select(.year == 2022)' # ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ ΠΏΠΎ Π³ΠΎΠ΄Ρƒ Π²Ρ‹Ρ…ΠΎΠ΄Π° +``` +```PowerShell +$API_KEY = "ZYMNJJA-0J8MNPN-PB4N7R7-XXXXXXX" +$page = 1 +$limit = 5 +$query = "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" +$request = Invoke-RestMethod -Uri "https://api.kinopoisk.dev/v1.4/movie/search?page=$page&limit=$limit&query=$query" -Headers @{"accept"="application/json"; "X-API-KEY"="$API_KEY"} +$request.docs | Where-Object year -eq 2022 +``` +### UrlCode +```PowerShell +function Get-PercentEncode ($str) { + $bytes = [System.Text.Encoding]::UTF8.GetBytes($str) + ($bytes | ForEach-Object { "{0:X2}" -f $_ }) -join '%' -replace "^","%" +} +Get-PercentEncode "Π·ΠΈΠΌΠΎΡ€ΠΎΠ΄ΠΎΠΊ" +``` +```PowerShell +function Get-UrlEncode($str) { + [System.Web.HttpUtility]::UrlEncode($str) +} +UrlEncode "Π·ΠΈΠΌΠΎΡ€ΠΎΠ΄ΠΎΠΊ" +``` +```Bash +percent-encode() { + str=$1 + echo -n "$1" | iconv -t utf8 | od -An -tx1 | tr ' ' % | tr -d '\n' +} +percent-encode "Π·ΠΈΠΌΠΎΡ€ΠΎΠ΄ΠΎΠΊ" +``` +```PowerShell +function Get-UrlDecode($encoded) { + [System.Uri]::UnescapeDataString($encoded) +} +Get-UrlDecode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" +``` +```Bash +percent-decode() { + encoded=$1 + local url_encoded="${1//+/ }" + printf '%b' "${url_encoded//%/\\x}" +} +percent-decode "%D0%B7%D0%B8%D0%BC%D0%BE%D1%80%D0%BE%D0%B4%D0%BE%D0%BA" +``` +# VideoCDN + +https://github.com/notssh/videocdn-api \ +https://github.com/API-Movies/videocdn \ +https://api-movies.github.io/videocdn/index.json +```PowerShell +$kp_id = 5106881 +$token = "YfTWH2p3Mai7ziqDoGjS3yXXXXXXXXXX" +$ep = "tv-series" +$(Invoke-RestMethod $("https://videocdn.tv/api/$ep"+"?api_token=$token&field=kinopoisk_id&query=$kp_id")).data.episodes | Where-Object season_num -eq 2 | Select-Object @{Name="Episode"; Expression={$_.num}}, @{Name="Voice"; Expression={$_.media.translation.title}} # ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ сСрии ΠΏΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΌΡƒ сСзону ΠΈ ΠΎΡ‚ΠΎΠ±Ρ€Π°Π·ΠΈΡ‚ΡŒ всС ΠΎΠ·Π²ΡƒΡ‡ΠΊΠΈ ΠΊ сСриям +``` +```Bash +kp_id=5106881 +token="YfTWH2p3Mai7ziqDoGjS3yXXXXXXXXXX" +ep="tv-series" +curl -s "https://videocdn.tv/api/$ep?api_token=$token&field=kinopoisk_id&query=$kp_id" | jq ".data[].episodes | length" # количСство сСрий +curl -s "https://videocdn.tv/api/$ep?api_token=$token&field=kinopoisk_id&query=$kp_id" | jq ".data[].episodes[] | select(.season_num == 2) | {episode: .ru_title, voice: .media[].translation.title}" # ΠΎΡ‚Ρ„ΠΈΠ»ΡŒΡ‚Ρ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π²ΠΎΠ΄Π° +```