Как взять рандомное видео из youtube?

Есть такая же штука, только с фото, как сделать тоже самое только с видео

a = message.text
def make_unicode(a):
    if type(a) != unicode:
        a = a.decode('utf-8')

url = 'https: // www.youtube.com / results?search_query=' + a
http = urllib3.PoolManager()
response = http.request('GET', url)
soup = BeautifulSoup(response.data)

imgUrls = re.findall('img .*?src="(.*?)"', str(soup))

img .*?src="(.*?)" - может быть есть что-то такое только для видео?


Ответы (1 шт):

Автор решения: faf0be

Один из возможных вариантов - просто генерировать случайное ID для видео. ID на ютубе составляются из 11 символов, включая в себя все буквы английского алфавита, цифры + символы '_' и '-' На питоне это можно сделать так:

import random
import string 
print('https://www.youtube.com/watch?v='+''.join(random.choice(string.ascii_letters + string.digits + '-_') for i in range(11)))

Но стоит учесть, что случайный ID не всегда будет адресовывать вас на существующее видео. Поэтому, советую сгенерировать определенное кол-во ID'шников и потом с помощью простого парсинга проверять, валидны ли они, или нет.

Еще вы можете ознакомиться с данным репозиторием, он работает почти по такому же принципу, при этом используя YouTube Data API v3:

#!/usr/bin/env python3

from googleapiclient.discovery import build
import random

DEVELOPER_KEY = 'YOUR_DEVELOPER_KEY'
YOUTUBE_API_SERVICE_NAME = 'youtube'
YOUTUBE_API_VERSION = 'v3'

prefix = ['IMG ', 'IMG_', 'IMG-', 'DSC ']
postfix = [' MOV', '.MOV', ' .MOV']

def youtube_search():
  youtube = build(YOUTUBE_API_SERVICE_NAME, YOUTUBE_API_VERSION, developerKey=DEVELOPER_KEY)

  search_response = youtube.search().list(
    q=random.choice(prefix) + str(random.randint(999, 9999)) + random.choice(postfix),
    part='snippet',
    maxResults=5
  ).execute()

  videos = []

  for search_result in search_response.get('items', []):
    if search_result['id']['kind'] == 'youtube#video':
      videos.append('%s' % (search_result['id']['videoId']))
  return (videos[random.randint(0, 2)])

print(youtube_search())
→ Ссылка