PDA

Просмотр полной версии : Парсер ютуб канала телеграм. Помощь.


kizyak56
11.04.2024, 08:29
Хочу сделать парсер ютуб канала в телеграм, который при отправке ссылки выдает все названия видео в виде inline кгопоа, по нажатию по которой будет отправлена информация о видео: название, жата выхода, количество просмотров. Можно будет скачать видел.

При отправке ссылки бот отправляет кнопку, но без названия видео на кнопках. Кто знает, что сделать?

nelit.dev
12.04.2024, 11:32
а на каком этапе сейчас твой парсер? что именно у тебя не получается? предоставь код. или ты хочешь чтобы тебе написали? обратись в раздел услуг)

TravkaCode.lover()
12.04.2024, 16:29
Хочу сделать парсер ютуб канала в телеграм, который при отправке ссылки выдает все названия видео в виде inline кгопоа, по нажатию по которой будет отправлена информация о видео: название, жата выхода, количество просмотров. Можно будет скачать видел.

При отправке ссылки бот отправляет кнопку, но без названия видео на кнопках. Кто знает, что сделать?


Парсить ютуб канал через бску и создавать "Таблицу" по типу:

JSON:






{
"user_id"
:
n
,
"url"
:
...
,
"videos"
:
[
{
"video_id"
:
n
,
"url"
:
...
,
"created_date"
:
...
,
"views"
:
n
,
"likes"
:
n
,
"dislike"
:
n
}
]
,
....
}




и потом это парсишь и отправляешь в тг канал со всеми прилегающими. (Или можешь не создавать таблицу, прямо так отправлять.)

Если ты не знаешь как парсить ютуб каналы, то в интернете полно апишек которые помогают это делать.

kizyak56
12.04.2024, 18:22
а на каком этапе сейчас твой парсер? что именно у тебя не получается? предоставь код. или ты хочешь чтобы тебе написали? обратись в раздел услуг)


На этапе с кнопками. Выдает «Выбери видео» и дальше должны быть кнопки, но их нет



Парсить ютуб канал через бску и создавать "Таблицу" по типу:

JSON:






{
"user_id"
:
n
,
"url"
:
...
,
"videos"
:
[
{
"video_id"
:
n
,
"url"
:
...
,
"created_date"
:
...
,
"views"
:
n
,
"likes"
:
n
,
"dislike"
:
n
}
]
,
....
}




и потом это парсишь и отправляешь в тг канал со всеми прилегающими. (Или можешь не создавать таблицу, прямо так отправлять.)
Если ты не знаешь как парсить ютуб каналы, то в интернете полно апишек которые помогают это делать.


А как это выглядит в живую, можно пример? Что за библиотека или она уже встроенная в пайтон со всеми стандартными?

TravkaCode.lover()
12.04.2024, 19:49
На этапе с кнопками. Выдает «Выбери видео» и дальше должны быть кнопки, но их нет

А как это выглядит в живую, можно пример? Что за библиотека или она уже встроенная в пайтон со всеми стандартными?


Нет такой встроенной библиотеки. Ты можешь установить стороннюю библиотеку от стороннего разработчика через pip/pip3 install ...

kizyak56
12.04.2024, 19:58
Нет такой встроенной библиотеки. Ты можешь установить стороннюю библиотеку от стороннего разработчика через pip/pip3 install ...


А что это за библиотека?

TravkaCode.lover()
12.04.2024, 20:02
А что это за библиотека?


Любая которую ты найдешь и которая будет тебе удобна в работе

kizyak56
12.04.2024, 22:08
Любая которую ты найдешь и которая будет тебе удобна в работе


Скорее всего завтра загружу сюда свой код, чтобы мне могли помочь более корректно

nelit.dev
13.04.2024, 00:01
ты пришёл на форум за помощью, при этом не приложил никакой код. Сами данные ты уже спарсил? Какая проблема у тебя с кнопками? Можешь детальнее описать?

kizyak56
13.04.2024, 05:39
ты пришёл на форум за помощью, при этом не приложил никакой код. Сами данные ты уже спарсил? Какая проблема у тебя с кнопками? Можешь детальнее описать?


Да, потому что писал топик с телефона.

Скорее всего ничего не сделано, если он не выдает кнопки с названиями видео.





https://forum.antichat.xyz/attachments/28482827/img_84760de917.png

Пока что только так могу показать. Как будет доступ к пк, так отправлю.

Логика в том, что после отправки ссылки на канал должны быть inline кнопки с названием видео. Нажимаешь на такую и она выдаёт информацию о ролике, с возможностью скачать его.

nelit.dev
13.04.2024, 08:41
получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?

kizyak56
13.04.2024, 11:53
получается, что парсер ты не написал? с чем конкретно нужна помощь? ты хочешь чтобы за тебя написали код?


За меня - нет. Помогли с проблемой.

Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает

TastyBread123
13.04.2024, 13:55
За меня - нет. Помогли с проблемой.

Как правильно парсер написать для ютуба? Я беру нужный div но по итогу это не работает


Зачем так делать, просто используй что-то на подобии youtube-dl и его форков

kizyak56
13.04.2024, 14:45
Зачем так делать, просто используй что-то на подобии youtube-dl и его форков


Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.

nelit.dev
13.04.2024, 15:34
Идея заключается в том, чтобы можно было получить доступ ко всем видео на канале. Добавлять в избранное каналы для быстрого доступа, а не заходить на ютуб каждый раз, чтобы скопировать ссылку. Все, чтобы было удобно.



жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.

kizyak56
14.04.2024, 15:39
жду код твоего парсера. ты должен не искать в тупую нужный класс на странице, а идти искать родителей и в них дочерние классы, начиная от боди заканчивая классом контейнера с видео. посмотри внимательно на то, что именно тебе возвращается при получении кода страницы.





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)

nelit.dev
14.04.2024, 15:53
скинь код как код на форуме, а не цитата

kizyak56
14.04.2024, 18:08
скинь код как код на форуме, а не цитата


Как просто текст?

А что не так сейчас?

nelit.dev
15.04.2024, 12:32
Как просто текст?
А что не так сейчас?


табуляции

https://forum.antichat.xyz/attachments/28483820/img_730228d180.png

kizyak56
15.04.2024, 23:35
табуляции



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
)

Vintik
15.04.2024, 23:43
Python, да?

Для работы с Youtube-ом можно использовать библиотеки для парсинга/http запросов.

Это может быть requeses, selenium. Загугли.

Основная идея заключается в том, что по ссылке парсер будет заходить на страницу, искать видео (как это делается — посмотри гайды по работе с библиотеками, там на 5-10 видосиков много есть в ютубе, нет смысла заново рассказывать), а дальше чтобы это выводилось в телеграм.

Со второй частью не помогу, TG API никогда вживую не видел.

kizyak56
16.04.2024, 09:05
Python, да?
Для работы с Youtube-ом можно использовать библиотеки для парсинга/http запросов.
Это может быть requeses, selenium. Загугли.
Основная идея заключается в том, что по ссылке парсер будет заходить на страницу, искать видео (как это делается — посмотри гайды по работе с библиотеками, там на 5-10 видосиков много есть в ютубе, нет смысла заново рассказывать), а дальше чтобы это выводилось в телеграм.
Со второй частью не помогу, TG API никогда вживую не видел.


bs4 аналогичная библиотека же или лучше селениум?