Адрес видео на ютубе как узнать

YouTube – это не только самый крутой видеохостинг. Этот ресурс является одной из самых популярных поисковых систем (еще бы, 2 миллиарда активных пользователей). Люди ищут там то, что им нужно и потому видеохостинг можно “приручить” с помощью SEO-инструментов.

Как узнать что вышло новое видео на youtube-канале и как получить его url?

Подозреваю, что проще через rss — там структура изначально приспособлена для автоматического парсинга и есть гарантия, что изменение вёрстки ютуба не будут ломать вашего бота.

Каждый канал ютуба имеет rss-ленту, которую можно получить по адресу: https://www.youtube.com/feeds/videos.xml?channel_id=айдишник_нужного_канала

А дальше всё просто — ваш бот с некоторой периодичностью получает xml по этой ссылке, парсит её, и смотрит — были ли изменения с момента последней проверки.

Xml с помощью питона парсится очень легко, погуглите, например, xml.etree.ElementTree .

Отслеживать
ответ дан 27 сен 2017 в 9:07
20.2k 4 4 золотых знака 25 25 серебряных знаков 52 52 бронзовых знака
можно подписаться на push notifications, вместо опроса. feedparser модуль позволяет распознать.
27 сен 2017 в 18:22

Как узнать url ссылку видео? Адрес видео

Чтобы получить уведомления о новом видео на youtube-канале, можно подписаться на push-уведомления (что может быть гораздо лучше, постоянного опроса youtube):

from aiohttp import ClientSession # $ pip install aiohttp async def subscribe_youtube_channel(channel_id, callback_url, *, lease_time=864000, subscribe=True): subscribe_url = ‘https://pubsubhubbub.appspot.com/subscribe’ topic_url = (‘https://www.youtube.com/xml/feeds/videos.xml?channel_id=’ + channel_id) data = < ‘hub.mode’: ‘subscribe’ if subscribe else ‘unsubscribe’, ‘hub.callback’: callback_url, ‘hub.lease_seconds’: lease_time, ‘hub.topic’: topic_url >async with ClientSession() as session: async with session.post(subscribe_url, data=data) as r: log(‘url: %s, channel_id: %s status: %s’, subscribe_url, channel_id, r.status) return r.status

  • channel_id это id YouTube-канала. К примеру, если ссылка на канал это https://www.youtube.com/channel/UCYO_jab_esuFRV4b17AJtAw, то channel_id == ‘UCYO_jab_esuFRV4b17AJtAw’
  • callback_url это адрес, на который вы хотите чтобы приходили уведомления (на ваш сервер).
Еще по теме:  Как зарегистрироваться в ютубе и создать канал

Я использовал aiohttp модуль просто для примера — здесь подойдёт любой http-клиент.

Чтобы подписка сработала, необходимо ответить на GET http-запрос по callback_url , к примеру используя вот такой http-cервер, на основе aiohttp модуля:

#!/usr/bin/env python3 from aiohttp import web def hub_challenge(request): return web.Response(text=request.query[‘hub.challenge’]) app = web.Application() resource = app.router.add_resource(‘/callback/’) resource.add_route(‘GET’, hub_challenge) resource.add_route(‘POST’, feed_callback) # см. ниже if __name__ == «__main__»: web.run_app(app)

в данном случае callback_url имеет вид http://example.com/callback/ .

Push-уведомления c видео-ссылками приходят как POST http-запросы с xml, содержащим rss-ленту, которая распознаётся используя feedparser модуль:

Как найти адрес моего канала в YouTube?


import asyncio import feedparser # $ pip install feedparser async def feed_callback(request): xml = await request.text() feed = feedparser.parse(xml) for e in feed.entries: text = (f’channel: n’ f’video_url: n’ f’title: ‘) asyncio.ensure_future(send_telegram(text)) return web.HTTPCreated() # 201
import os async def send_telegram(text): token = os.environ[‘TELEBOT_TOKEN’] chat_id = os.environ[‘TELEBOT_CHAT_ID’] api_url = f’https://api.telegram.org/bot/sendMessage’ data = dict(chat_id=chat_id, text=text) async with ClientSession() as session: async with session.post(api_url, data=data) as r: log(‘text: %s, status: %s’, text, r.status)

код использует TELEBOT_TOKEN , TELEBOT_CHAT_ID переменные окружения. Полный пример кода.

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...