 |
|

13.04.2024, 08:41
|
|
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами:
1158033
Репутация:
18
|
|
получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?
|
|
|

13.04.2024, 11:53
|
|
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами:
1229791
Репутация:
1
|
|
Сообщение от nelit.dev
получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?
За меня - нет. Помогли с проблемой.
Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает
|
|
|

13.04.2024, 13:55
|
|
Постоянный
Регистрация: 05.11.2021
Сообщений: 634
С нами:
2380746
Репутация:
68
|
|
Сообщение от вареник с мясом?
За меня - нет. Помогли с проблемой.
Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает
Зачем так делать, просто используй что-то на подобии youtube-dl и его форков
|
|
|

13.04.2024, 14:45
|
|
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами:
1229791
Репутация:
1
|
|
Сообщение от TastyBread123
Зачем так делать, просто используй что-то на подобии youtube-dl и его форков
Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.
|
|
|

13.04.2024, 15:34
|
|
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами:
1158033
Репутация:
18
|
|
Сообщение от вареник с мясом?
Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.
жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.
|
|
|

14.04.2024, 15:39
|
|
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами:
1229791
Репутация:
1
|
|
Сообщение от nelit.dev
жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.
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)
|
|
|

14.04.2024, 15:53
|
|
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами:
1158033
Репутация:
18
|
|
скинь код как код на форуме, а не цитата
|
|
|

14.04.2024, 18:08
|
|
Новичок
Регистрация: 13.01.2024
Сообщений: 15
С нами:
1229791
Репутация:
1
|
|
Сообщение от nelit.dev
скинь код как код на форуме, а не цитата
Как просто текст?
А что не так сейчас?
|
|
|

15.04.2024, 12:32
|
|
Познающий
Регистрация: 03.03.2024
Сообщений: 61
С нами:
1158033
Репутация:
18
|
|
Сообщение от вареник с мясом?
Как просто текст?
А что не так сейчас?
табуляции

|
|
|

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
)
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|