Как получить случайное видео YouTube с помощью API YouTube?

Мне нужен способ получить полностью случайное видео с YouTube. Без ограничений.

Что мне делать с API YouTube?

** редактировать * ОК, как и просили, вот что я пробовал до сих пор:

1 — просмотрел API и примеры на сайте YouTube для разработчиков. http://www.youtube.com/dev/ не удалось найти правильный API или способ сделать это там.

2 - поиск Google, конечно;) получил http://randomyoutubevideo.net/, но они предлагают API только от НИХ, чтобы использовать его между мной и YouTube. ‹ это дает мне надежду, что это действительно возможно сделать.

3 — даже проверил галерею приложений YouTube http://youtube-gallery.appspot.com/, чтобы узнать, делает ли это кто-нибудь. . и как.

что я также буду делать, так это спрашивать на страницах обсуждения на YouTube. может кто там сможет помочь.


person b0x0rz    schedule 03.07.2012    source источник


Ответы (8)


Кажется, нет способа сделать это, однако есть способы приблизиться к тому, что вы ищете. См. здесь идеи.

Основные идеи этих страниц заключаются в том, чтобы использовать фид самых последних загрузок (если вам все равно, когда что-то было загружено) или просто получить дамп ВСЕХ видео на YouTube и случайным образом выбрать URL-адрес из них.

Чтобы процитировать парня API YouTube в первой ссылке:

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

Я не могу сказать, что у меня достаточно опыта в статистике, чтобы предложить, как можно получить действительно случайную выборку видео. Я действительно думаю, что делать это, пытаясь создать 11-значные идентификаторы видео YouTube, вероятно, является неправильным подходом — существует слишком много несуществующих идентификаторов видео, с которыми вы столкнетесь, и я не думаю, что лучший использование API заключается в выполнении запросов, которые будут возвращать ответы HTTP 404 X% времени.

Возможно, вам повезет больше, если вы просто воспользуетесь API для поиска слов или фраз, выбранных «случайно», и выберете выборку результатов. Если вы это сделаете, вам следует подумать о том, какое значение использовать для параметра orderby= URL. Порядок по умолчанию — «релевантность», что приведет к тому, что наилучшие результаты будут теми, которые, по мнению наших алгоритмов, наиболее релевантны вашим условиям поиска. Это может исказить ваши результаты, если вы всегда берете первую запись или тому подобное. Вы также можете заказать «опубликовано», что даст вам обратную хронологическую подачу видео.

Ура, — Джефф Посник, команда API YouTube. Что касается randomyoutubevideo.net, вот что написано на странице «О программе» этого сайта:

Итак, как мы можем предоставить действительно случайные ссылки на видео YouTube? Оказывается, программный интерфейс YouTube (API) предоставляет дополнительные функции, которые позволяют обнаруживать гораздо более случайные видео. Используя ряд приемов в сочетании с небольшими манипуляциями с пространственно-временной структурой, нам удалось создать процесс, который дает действительно случайные ссылки на видео на YouTube.

Случайная функция YouTube на этой странице в настоящее время использует подмножество базы данных. Со временем мы расширим эту базу данных и, в зависимости от спроса, можем сделать ее доступной бесплатно через API.

Я понимаю, что это означает, что они извлекают большие списки видео из API и создают из них БД, из которой они выбирают случайным образом.

person N_A    schedule 03.07.2012
comment
@ b0x0rz Помимо создания полного списка видео в вашей собственной БД, это, кажется, самый случайный способ доступа к видео. - person N_A; 03.07.2012

Шаг 1: Создайте API-ключ

  1. Создать гугл-аккаунт
  2. Посетите: https://console.developers.google.com/.
  3. Создайте новый проект: нажмите «Создать новый проект» в главном меню и дайте ему имя.
  4. Теперь активируйте API YoutTubeData: щелкните его и включите.
  5. Вставьте свои приложения-информация
  6. Нажмите «Создать учетные данные»
  7. Нажмите, что мне нужно?
  8. Запишите свой API-ключ

Теперь вы можете получить доступ к YouTube-API.

Шаг 2. Используйте YouTube-API для сканирования видео

На этом этапе мы используем YouTube-API для получения случайных идентификаторов видео. Со следующими примерами кода вы получите 50 случайных API из поиска на YouTube. Это максимум. Вы можете хранить их в БД или напрямую возвращать случайный идентификатор.

Внимание: существует ограничение в 30 000 единиц в секунду на пользователя и 1 000 000 в день.

Образцы кода


[Пример C#]

using System;
using System.Linq;
using System.Net;
using Newtonsoft.Json;

namespace YouTube
{
   class Program
   {
    private static Random random = new Random();

    public static string RandomString(int length)
    {
        const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
        return new string(Enumerable.Repeat(chars, length)
          .Select(s => s[random.Next(s.Length)]).ToArray());
    }

    static void Main(string[] args)
    {
        var count = 50;
        var API_KEY = "YOUR KEY";
        var q = RandomString(3);
        var url = "https://www.googleapis.com/youtube/v3/search?key=" + API_KEY + "&maxResults="+count+"&part=snippet&type=video&q=" +q;

        using (WebClient wc = new WebClient())
        {
            var json = wc.DownloadString(url);
            dynamic jsonObject = JsonConvert.DeserializeObject(json);
            foreach (var line in jsonObject["items"])
            {
                Console.WriteLine(line["id"]["videoId"]);
                /*store your id*/
            }
            Console.Read();
        }
    }
}
}

[PHP-пример]

function crawlVideos($count = 50)
{
    $q = $this->generateRandomString(3);
    $url = "https://www.googleapis.com/youtube/v3/search?key=" . self::API_KEY . "&maxResults=$count&part=snippet&type=video&q=" . $q;
    $JSON = file_get_contents($url);
    $JSON_Data_search = json_decode($JSON);
    foreach ($JSON_Data_search->{"items"} as $result) {
        $videoId = ($result->{"id"}->{"videoId"});
        /*Insert video to your database*/
    }
}

function generateRandomString($length = 10)
{
    return substr(str_shuffle(str_repeat($x = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ', ceil($length / strlen($x)))), 1, $length);
}

[Пример Python]

import json
import urllib.request
import string
import random

count = 50
API_KEY = 'your_key'
random = ''.join(random.choice(string.ascii_uppercase + string.digits) for _ in range(3))

urlData = "https://www.googleapis.com/youtube/v3/search?key={}&maxResults={}&part=snippet&type=video&q={}".format(API_KEY,count,random)
webURL = urllib.request.urlopen(urlData)
data = webURL.read()
encoding = webURL.info().get_content_charset('utf-8')
results = json.loads(data.decode(encoding))

for data in results['items']:
    videoId = (data['id']['videoId'])
    print(videoId)
    #store your ids

Шаг 3: Сгенерируйте / верните URL-адрес вашего видео

Теперь прочитайте случайный идентификатор из базы данных, например:

SELECT 'id' 
FROM yttable
WHERE 1 ORDER BY RAND() LIMIT 1

Ваше случайное видео:

https://www.youtube.com/embed/[random ID]

Повеселись!

person osanger    schedule 09.03.2017

Я знаю, что это немного не по теме, но я могу предложить следующий скрипт bash. Я использую его на своем Raspberry Pi, и он работает очень хорошо.

    #!/bin/sh
    while [ true ];
    do
    searchresult=""
    while [ -z "$searchresult" ]; do
    rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-5};echo)
    echo "$rand"
    searchresult=$(googler -C -n 100 --np -x -w https://www.youtube.com "$rand")
    done
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done

Условием является то, что вы установили googler и youtube-dl. Моя первоначальная идея состояла в том, чтобы сгенерировать случайные строки из 11 символов и добавить их к базовому URL-адресу для видео на YouTube. Однако количество возможных перестановок огромно (26 заглавных букв + 26 строчных букв + 10 цифр + дефис + подчеркивание = 64 символа; 64 ^ 11 = 7,38x10 ^ 19 перестановок) и будет израсходовано, если каждый человек на Земле загрузит 10 миллиардов видео. Вот почему случайная генерация полного 11-символьного идентификатора нецелесообразна. Вместо этого мой скрипт генерирует случайные 5-символьные строки (переменная «rand») и передает их в качестве поискового запроса в googler. Googler ищет на сайте YouTube эти случайные строки и в большинстве случаев возвращает результаты (переменная «searchresult»). В случае отсутствия результата поиск повторяется с другой случайной строкой и так далее до успеха. Обычно требуется от одной до трех попыток. Я пробовал с разной длиной строки поиска - 4, возможно, недостаточно уникальна, а 6 слишком длинна, и может потребоваться много попыток, чтобы получить результат, и я заметил, что если скрипт отправляет более 10 поисковых запросов за короткое время, Google временно блокирует дальнейшие поиски.

На следующем шаге скрипт извлекает гиперссылки на видео YouTube из результатов поиска и помещает их в переменную «urls». Затем один из них случайным образом выбирается для воспроизведения (переменная "url") и передается игроку - в моем случае omxplayer, но вы можете заменить его любым другим игроком, который вы хотите. Omxplayer хорош на Raspberry Pi, потому что он использует аппаратное ускорение и выводит через hdmi прямо на мой телевизор. Если я изменю «-o hdmi» на «-o local», звук будет отправлен через 3,5-мм стереоразъем на внешний усилитель. Нажатие «q» во время воспроизведения останавливает воспроизведение текущего видео и автоматически запускается следующее случайное. Это будет продолжаться вечно, пока вы не нажмете Ctrl-C, чтобы остановить скрипт.

Дополнительные советы

С некоторыми изменениями вы можете получать случайные видео по заданной теме. Например, если мы укажем «Deep Purple» в качестве дополнительного условия поиска, мы получим случайные музыкальные клипы Deep Purple:

    #!/bin/sh
    while [ true ];
    do
    searchresult=""
    while [ -z "$searchresult" ]; do
    rand=$(< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c${1:-2};echo)
    echo "$rand"
    searchresult=$(googler -C -n 10 --np -x -w https://www.youtube.com "$rand" "Deep Purple")
    done
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done

Обратите внимание, что в последнем примере я уменьшил фактор случайности до двухсимвольной строки, потому что будет сложно найти совпадение для пятисимвольной строки в относительно небольшом подмножестве всех видео на YouTube, содержащих поисковый запрос «Deep Purple». ". Также здесь я ограничил количество возвращаемых результатов поиска Google до 10, чтобы они оставались релевантными. С 100 я также получил бы менее релевантные результаты, такие как видео любителей, пытающихся играть песни Deep Purple.

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

    #!/bin/sh
    while [ true ];
    do
    searchresult=$(googler -C -n 100 --np -t h12 -x -w https://www.youtube.com "")
    urls=$(echo "$searchresult" | grep -o "https://www.youtube.com/watch?v=...........")
    url=$(shuf -e -n 1 $urls)
    echo "$url"
    omxplayer -o hdmi $(youtube-dl -f mp4 -g "$url")
    done

Вы можете установить различные временные ограничения. См. документацию googler для более подробной информации.

person Deyan Yosifov    schedule 18.10.2017

Является ли грязный сканер вариантом? Потому что я использовал простой генератор случайных ссылок на видео YouTube. Это было только для накопления большой базы видео, а не для производства.
Кажется, это (очень) похоже на подход «youtuberandomvideo.com», как он описал.

import re, urllib
from random import randint

def random_str(str_size):
    res = ""
    for i in xrange(str_size):
        x = randint(0,25)
        c = chr(ord('a')+x)
        res += c
    return res

def find_watch(text,pos):
    start = text.find("watch?v=",pos)
    if (start<0):
        return None,None
    end = text.find(" ",start)
    if (end<0):
        return None,None

    if (end-start > 200): #silly heuristics, probably not a must
        return None,None

    return text[start:end-1], start


def find_instance_links():
    base_url = 'https://www.youtube.com/results?search_query='
    url = base_url+random_str(3)
    #print url

    r = urllib.urlopen(url).read()

    links = {}

    pos = 0
    while True:
        link,pos =  find_watch(r,pos)
        if link == None or pos == None:
            break
        pos += 1
        #print link
        if (";" in link):
            continue
        links[link] = 1

    items_list = links.items()

    list_size = len(items_list)
    selected = randint(list_size/2,list_size-1)
    return items_list[selected][0]


for i in xrange(1000):
    link = find_instance_links()
    print link

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

Некоторое пояснение кода: (random->pseudo random...)
1. Случайная генерация поисковых запросов (здесь 3 буквы)
2. Случайный выбор какой-то ссылки из нижней половины ссылок на видео ( мотивация была избегать рекламы)

Примечание. Код запутан — он должен служить только базовым примером техники, а не правильного дизайна кода и/или элегантного кода Python.

person ZeDuS    schedule 21.06.2015
comment
У меня работает хорошо, но я бы посоветовал добавить случайную «паузу» в код, чтобы избежать временного запрета Google из-за ограничений скорости. Добавьте эту строку в последний цикл for в коде OP: sleep(randint(7,20)). Это будет случайная пауза между 7 и 20 секундами, и это, казалось, было правильным количеством, чтобы найти компромисс между временным запретом Google и неоправданным временем для сбора данных. - person timothyjgraham; 12.11.2018

Лучший способ получить случайные идентификаторы видео — создать собственную базу данных. Используйте VideoSearch-Request Google Youtube-API. Просто сгенерируйте поисковый запрос типа "v=SEARCH_STRING" и вставьте полученные видеоидентификаторы в свою базу данных. Строка поиска должна быть случайно сгенерированной строкой. Я обнаружил, что длина строки должна составлять 4 символа, чтобы получить большинство видео из запроса без повторения многих результатов.

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

Я сделал это на своем собственном веб-сайте(random-video.net) и получил более 2 миллионов записей за несколько часы. Нет никаких реальных ограничений — только размер вашей базы данных.

person Anton Anders    schedule 25.10.2013
comment
У random-video.net истек срок действия, и он был захвачен фальшивой страницей поиска. - person doug65536; 08.08.2016

AFAIK: поиск v= не имеет значимого эффекта. Если вы ищете v=LadyGaga, вы найдете видео Леди Гаги. Алгоритм поиска YouTube просматривает описание, заголовок и т. д. — если в описании видео есть ссылка на другое видео (также известное как ?v=..), он, скорее всего, выдаст этот поисковый запрос. См. также https://developers.google.com/youtube/v3/docs/search/list .

В Google Youtube Data API еще не реализован случайный выбор. Что я сделал, так это запрос

https://www.googleapis.com/youtube/v3/search?part=id&maxResults=50&type=video&q=QUERYSTRING&key=KEY

, где QUERYSTRING — это случайная строка из 5 символов в синтаксисе идентификатора видео. Если набор результатов содержит от 1 до 50 видео, из которых хотя бы один идентификатор содержит строку, найдено случайное видео. Этот метод обычно занимает 1-5 попыток.

Нужен последний чек. Пример: случайная строка была ydoat. Запрос с указанным выше URL-адресом приводит только к одному видео с идентификатором VEBt0Hxp5Q8, которое не подходит. Видео, вероятно, содержит строку где-то в описании. Если я ищу ydoat через https://www.youtube.com/results?q=ydoat, результат не найден. Поиск v%3Dydoat (v=ydoat) приводит к тем же результатам.

редактировать. источник в php: https://github.com/phil294/-Php-Randomtube-random-YouTube-video-generator-

Как и Антон, я обнаружил, что лучше всего подойдут 4 случайных персонажа.

person phil294    schedule 15.10.2016

Получить список слов, с сотнями или тысячами слов. Затем случайным образом выберите из него 2 слова и используйте его как запрос. Это также может быть полезно, если вы хотите иметь определенный контроль над тем, насколько это может быть случайным. Например, у вас может быть список английских слов или список немецких слов. Или создайте небольшой кураторский список со словами, относящимися только к интересующей вас теме.

person madprops    schedule 13.08.2018

На данный момент вы можете получить случайное видео YouTube по этому URL:

https://www.googleapis.com/youtube/v3/search?part=snippet

И с использованием нескольких параметров. Вы можете найти его здесь. Но есть ограничение: 10 000 запросов в день.

Вы можете проверить, как это работает, на этом случайном видео YouTube.

person Vik    schedule 19.01.2019