ANTICHAT

ANTICHAT (https://forum.antichat.xyz/index.php)
-   Общие вопросы программирования (https://forum.antichat.xyz/forumdisplay.php?f=206)
-   -   Парсер ютуб канала телеграм. Помощь. (https://forum.antichat.xyz/showthread.php?t=1508146)

вареник с мясом? 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
}
]
,
....
}



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

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

вареник с мясом? 12.04.2024 18:22

Цитата:

Сообщение от nelit.dev

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

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

Цитата:

Сообщение от TravkaCode.lover()

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

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 ...

вареник с мясом? 12.04.2024 19:58

Цитата:

Сообщение от TravkaCode.lover()

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

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

TravkaCode.lover() 12.04.2024 20:02

Цитата:

Сообщение от вареник с мясом?

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

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

вареник с мясом? 12.04.2024 22:08

Цитата:

Сообщение от TravkaCode.lover()

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

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

nelit.dev 13.04.2024 00:01

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

вареник с мясом? 13.04.2024 05:39

Цитата:

Сообщение от nelit.dev

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

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

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





https://forum.antichat.xyz/attachmen...84760de917.png

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

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

nelit.dev 13.04.2024 08:41

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

вареник с мясом? 13.04.2024 11:53

Цитата:

Сообщение от nelit.dev

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

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

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

TastyBread123 13.04.2024 13:55

Цитата:

Сообщение от вареник с мясом?

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

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

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

вареник с мясом? 13.04.2024 14:45

Цитата:

Сообщение от TastyBread123

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

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

nelit.dev 13.04.2024 15:34

Цитата:

Сообщение от вареник с мясом?

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

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

вареник с мясом? 14.04.2024 15:39

Цитата:

Сообщение от 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)


nelit.dev 14.04.2024 15:53

скинь код как код на форуме, а не цитата

вареник с мясом? 14.04.2024 18:08

Цитата:

Сообщение от nelit.dev

скинь код как код на форуме, а не цитата

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

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

nelit.dev 15.04.2024 12:32

Цитата:

Сообщение от вареник с мясом?

Как просто текст?
А что не так сейчас?

табуляции

https://forum.antichat.xyz/attachmen...730228d180.png

вареник с мясом? 15.04.2024 23:35

Цитата:

Сообщение от 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
)


Vintik 15.04.2024 23:43

Python, да?

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

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

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

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

вареник с мясом? 16.04.2024 09:05

Цитата:

Сообщение от Vintik

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

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


Время: 13:26