
15.04.2024, 23:35
|
|
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами:
1229791
Репутация:
1
|
|
Сообщение от nelit.dev
табуляции
Python:
Код:
import
asyncio
from
aiogram
import
Bot
,
types
from
aiogram
import
Dispatcher
from
aiogram
.
types
import
CallbackQuery
from
aiogram
.
utils
import
executor
import
aiohttp
from
bs4
import
BeautifulSoup
# Токен вашего бота
TOKEN
=
'ТОКЕН
bot
=
Bot
(
token
=
TOKEN
)
dp
=
Dispatcher
(
bot
)
# Функция для парсинга информации о видео с канала
async
def
parse_channel
(
channel_url
)
:
async
with
aiohttp
.
ClientSession
(
)
as
session
:
async
with
session
.
get
(
channel_url
)
as
response
:
html
=
await
response
.
text
(
)
soup
=
BeautifulSoup
(
html
,
'html.parser'
)
videos
=
[
]
# Находим все сообщения в канале
for
post
in
soup
.
find_all
(
'div'
,
class_
=
'style-scope ytd-rich-grid-media'
)
:
# Находим текст сообщения (название видео)
text
=
post
.
find
(
'a'
,
class_
=
'yt-simple-endpoint style-scope ytd-rich-grid-video-renderer'
)
.
text
.
strip
(
)
# Находим дату публикации
date
=
post
.
find
(
'span'
,
class_
=
'style-scope ytd-video-meta-block'
)
.
text
.
strip
(
)
# Находим количество просмотров
views
=
post
.
find
(
'span'
,
class_
=
'style-scope ytd-video-meta-block'
)
.
text
.
strip
(
)
# Сохраняем информацию о видео
video_info
=
{
'text'
:
text
,
'date'
:
date
,
'views'
:
views
}
print
(
"Parsed video:"
,
video_info
)
# Отладочное сообщение
videos
.
append
(
video_info
)
return
videos
# Обработчик команды /start
@dp.message_handler
(
commands
=
[
'start'
]
)
async
def
start_message
(
message
:
types
.
Message
)
:
await
message
.
answer
(
"Привет! Пожалуйста, отправь мне ссылку на канал, чтобы получить видео."
)
# Обработчик текстовых сообщений (получаем ссылку на канал и отправляем видео)
@dp.message_handler
(
content_types
=
[
'text'
]
)
async
def
get_channel_videos
(
message
:
types
.
Message
)
:
channel_url
=
message
.
text
try
:
videos
=
await
parse_channel
(
channel_url
)
print
(
"Received videos:"
,
videos
)
# Добавим отладочное сообщение
# Создаем inline клавиатуру с кнопками для каждого видео
keyboard
=
types
.
InlineKeyboardMarkup
(
)
for
video
in
videos
:
# Добавляем кнопку для каждого видео
keyboard
.
add
(
types
.
InlineKeyboardButton
(
text
=
video
[
'text'
]
,
callback_data
=
video
[
'text'
]
)
)
await
message
.
answer
(
"Выбери видео:"
,
reply_markup
=
keyboard
)
except
Exception
as
e
:
await
message
.
answer
(
f"Произошла ошибка:{str(e)}"
)
# Обработчик нажатий на inline кнопки
@dp.callback_query_handler
(
)
async
def
callback_query
(
call
:
CallbackQuery
)
:
try
:
videos
=
await
parse_channel
(
call
.
message
.
text
)
for
video
in
videos
:
# Проверяем, на какую кнопку нажал пользователь
if
call
.
data
==
video
[
'text'
]
:
# Отправляем изображение, название, дату и количество просмотров
await
bot
.
send_photo
(
call
.
message
.
chat
.
id
,
photo
=
video
[
'image'
]
,
caption
=
f"{video['text']}\nДата:{video['date']}\nПросмотры:{video['views']}"
)
break
except
Exception
as
e
:
await
call
.
message
.
answer
(
f"Произошла ошибка:{str(e)}"
)
# Запускаем бота
if
name
==
'main'
:
executor
.
start_polling
(
dp
)
|
|
|