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

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

Как я могу работать с API YouTube?

** edit * OK в соответствии с запросом, вот что я пробовал до сих пор:

1 - прошел через api и примеры на веб-сайте youtube dev. http://www.youtube.com/dev/ не повезло найти правильный api или способ сделать это там.

2 - google search course;) получил http://randomyoutubevideo.net/, но они предлагают только api от THEM для использования между мной и youtube. < это дает мне надежду, что на самом деле это возможно.

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

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

Ответ 1

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

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

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

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

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

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

Cheers, -Jeff Posnick, команда API YouTube в виде Что касается randomyoutubevideo.net, это то, что должна сказать страница "О себе" этого сайта:

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

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

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

Ответ 2

Как владелец http://www.youtuberandomvideo.com/ Я просто произвольно сгенерировал несколько символов, затем выполнил поиск v = и вернул все видео, у которых есть видео Идентификатор, начинающийся с.

Как только у меня есть результаты, я просто произвольно выбираю разные видеоролики.

Ответ 3

Шаг 1. Создание API-ключа

  • Создайте учетную запись google
  • Посетить: https://console.developers.google.com/
  • Создайте новый проект: нажмите "Создать новый проект" в главном меню и дайте ему имя
  • Теперь активируйте API YoutTubeData: щелкните по нему и включите его.
  • Вставьте свои приложения-сведения
  • Нажмите "создать учетные данные"
  • Клик, что мне нужно?
  • Обратите внимание на свой API-ключ

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

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

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

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

Codesamples


[С# -example]

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();
        }
    }
}
}

[РНР-Пример]

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]

Удачи!

Ответ 4

Я знаю это немного не по теме, но я могу предложить следующее bash script. Я использую его на малине 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,38 × 10 19 перестановок) и будет использоваться, если каждый человек на Земле загрузит 10 миллиардов видеороликов. То, почему случайное генерирование полного 11-символьного идентификатора не является практически осуществимым подходом. Мой script вместо этого генерирует случайные 5-символьные строки (переменная "rand" ) и передает их в качестве поискового запроса на googler. Googler ищет сайт YouTube для этих случайных строк и в большинстве случаев возвращает результаты (переменная "searchresult" ). В случае отсутствия результата поиск повторяется с другой случайной строкой и т.д. До достижения успеха. Обычно это занимает от одного до трех попыток. Я пробовал с различной длиной строки поиска - 4, возможно, не является достаточно уникальным, а 6 слишком длинным, и может потребоваться много попыток получить результат, и я заметил, что если script отправляет более 10 поисковых запросов коротким время, Google временно блокирует меня от дальнейших поисков.

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

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

С некоторыми изменениями вы можете получить случайные видео по заданной теме. Например, если мы добавим "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

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

Следующий script будет воспроизводить случайным образом только новые видео, которые были загружены за последние 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.

Ответ 5

Является ли грязный искатель опцией? Потому что я использовал простой случайный генератор ссылок youtube vid. Это было только для накопления большого db видео, а не для производства.
Он, кажется, очень похож на "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. Случайный выбор какой-либо ссылки из нижней половины видео-ссылок (мотивация заключалась в том, чтобы избежать рекламы)

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

Ответ 6

AFAIK: Поиск v= не имеет значимого эффекта. Если вы ищете v=LadyGaga, вы найдете видео Lady Gaga. Алгоритм поиска YouTube просматривает описание, заголовок и т.д. - если для видео есть другое видео, связанное в его описании (aka a ?v=..), он с большей вероятностью удовлетворит этот поисковый запрос. Также см. Https://developers.google.com/youtube/v3/docs/search/list.

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

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 случайных символа будут наиболее подходящими.

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

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

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