API YouTube для получения всех видео на канале

Нам нужен список видео по названию канала YouTube (с использованием API).

Мы можем получить список каналов (только имя канала), используя приведенный ниже API:

https://gdata.youtube.com/feeds/api/channels?v=2&q=tendulkar 

Ниже приведена прямая ссылка каналов

 https://www.youtube.com/channel/UCqAEtEr0A0Eo2IVcuWBfB9g 

Или

 WWW.YouTube.com/channel/HC-8jgBP-4rlI 

Теперь нам нужны видео канала >> UCqAEtEr0A0Eo2IVcuWBfB9g или HC-8jgBP-4rlI.

Мы попытались

https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&User=UC7Xayrf2k0NZiz3S04WuDNQ https://gdata.youtube.com/feeds/api/videos?v=2&uploader=partner&q=UC7Xayrf2k0NZiz3S04WuDNQ

Но это не помогает.

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

12 Solutions collect form web for “API YouTube для получения всех видео на канале”

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

Вы также можете сами сделать запросы. Вот пример URL-адреса, который извлекает последние видео с канала:

 https://www.googleapis.com/youtube/v3/search?key={your_key_here}&channelId={channel_id_here}&part=snippet,id&order=date&maxResults=20 

После этого вы получите JSON с идентификаторами видео и деталями, и вы можете создать свой URL-адрес видео следующим образом:

 http://www.youtube.com/watch?v={video_id_here} 

Во-первых, вам нужно получить идентификатор плейлиста, который представляет заказы от пользователя / канала:

https://developers.google.com/youtube/v3/docs/channels/list#try-it

Вы можете указать имя пользователя с параметром forUsername={username} или указать forUsername={username} mine=true чтобы получить свой собственный (сначала вам нужно пройти аутентификацию). Включить part=contentDetails чтобы увидеть плейлисты.

GET https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=jambrose42&key={YOUR_API_KEY}

В результате "relatedPlaylists" будет включать в себя "likes" и "uploads" плейлисты. Захватите, что "upload" ID плейлиста. Также обратите внимание, что "id" – это ваш "id" канала для будущей ссылки.

Затем, получите список видео в этом плейлисте:

https://developers.google.com/youtube/v3/docs/playlistItems/list#try-it

Просто зайдите в playlistId!

GET https://www.googleapis.com/youtube/v3/playlistItems?part=snippet%2CcontentDetails&maxResults=50&playlistId=UUpRmvjdu3ixew5ahydZ67uA&key={YOUR_API_KEY}

Вот видео от разработчиков Google, в котором показано, как перечислять все видео в канале в v3 3 API YouTube.

Есть два шага:

  1. Запросить каналы, чтобы получить идентификатор «uploads». например https://www.googleapis.com/youtube/v3/channels?id={channel Id}&key={API key}&part=contentDetails
  2. Используйте этот «uploads» Id для запроса PlaylistItems, чтобы получить список видео. например https://www.googleapis.com/youtube/v3/playlistItems?playlistId={"uploads" Id}&key={API key}&part=snippet&maxResults=50

Попробуйте следующее: Это может вам помочь.

https://gdata.youtube.com/feeds/api/videos?author=cnn&v=2&orderby=updated&alt=jsonc&q=news

Здесь автор, так как вы можете указать свое имя канала и «q», так как вы можете указать ключевое слово поиска.

Ниже приведена альтернатива Python, которая не требует каких-либо специальных пакетов. Предоставляя идентификатор канала, он возвращает список видео-ссылок для этого канала. Обратите внимание, что для этого вам нужен API-ключ .

 import urllib import json def get_all_video_in_channel(channel_id): api_key = YOUR API KEY base_video_url = 'https://www.youtube.com/watch?v=' base_search_url = 'https://www.googleapis.com/youtube/v3/search?' first_url = base_search_url+'key={}&channelId={}&part=snippet,id&order=date&maxResults=25'.format(api_key, channel_id) video_links = [] url = first_url while True: inp = urllib.urlopen(url) resp = json.load(inp) for i in resp['items']: if i['id']['kind'] == "youtube#video": video_links.append(base_video_url + i['id']['videoId']) try: next_page_token = resp['nextPageToken'] url = first_url + '&pageToken={}'.format(next_page_token) except: break return video_links 

Всего за три шага:

  1. Подписки: список -> https://www.googleapis.com/youtube/v3/subscriptions?part=snippet&maxResults=50&mine=true&access_token= {oauth_token}

  2. Каналы: список -> https://www.googleapis.com/youtube/v3/channels?part=contentDetails&id= {channel_id} & key = {YOUR_API_KEY}

  3. PlaylistItems: list -> https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId= {playlist_id} & key = {YOUR_API_KEY}

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

Он объединяет вызовы API для youtube.channels.list , playlistItems , videos . Он использует рекурсивные функции, чтобы асинхронные обратные вызовы запускали следующую итерацию после получения действительного ответа.

Это также позволяет ограничить фактическое количество запросов, сделанных за один раз, что позволяет вам не нарушать правила API YouTube. Обмен сокращенными fragmentами, а затем ссылкой на полный код. Я получил 50 максимальных результатов за ограничение вызова, используя значение nextPageToken, которое приходит в ответ, чтобы получить следующие 50 результатов и так далее.

 function getVideos(nextPageToken, vidsDone, params) { $.getJSON("https://www.googleapis.com/youtube/v3/playlistItems", { key: params.accessKey, part: "snippet", maxResults: 50, playlistId: params.playlistId, fields: "items(snippet(publishedAt, resourceId/videoId, title)), nextPageToken", pageToken: ( nextPageToken || '') }, function(data) { // commands to process JSON variable, extract the 50 videos info if ( vidsDone < params.vidslimit) { // Recursive: the function is calling itself if // all videos haven't been loaded yet getVideos( data.nextPageToken, vidsDone, params); } else { // Closing actions to do once we have listed the videos needed. } }); } 

Это получило базовый список видео, включая идентификатор, название, дату публикации и т.п. Но чтобы получить более подробную информацию о каждом видео, таком как количество просмотров и предпочтений, нужно сделать вызовы API для videos .

 // Looping through an array of video id's function fetchViddetails(i) { $.getJSON("https://www.googleapis.com/youtube/v3/videos", { key: document.getElementById("accesskey").value, part: "snippet,statistics", id: vidsList[i] }, function(data) { // Commands to process JSON variable, extract the video // information and push it to a global array if (i < vidsList.length - 1) { fetchViddetails(i+1) // Recursive: calls itself if the // list isn't over. } }); 

Смотрите полный код здесь и живую версию здесь . (Изменить: фиксированная ссылка github)

Вот код, который вернет все идентификаторы видео по вашему каналу

 < ?php $baseUrl = 'https://www.googleapis.com/youtube/v3/'; // https://developers.google.com/youtube/v3/getting-started $apiKey = 'API_KEY'; // If you don't know the channel ID see below $channelId = 'CHANNEL_ID'; $params = [ 'id'=> $channelId, 'part'=> 'contentDetails', 'key'=> $apiKey ]; $url = $baseUrl . 'channels?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads']; $params = [ 'part'=> 'snippet', 'playlistId' => $playlist, 'maxResults'=> '50', 'key'=> $apiKey ]; $url = $baseUrl . 'playlistItems?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $videos = []; foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; while(isset($json['nextPageToken'])){ $nextUrl = $url . '&pageToken=' . $json['nextPageToken']; $json = json_decode(file_get_contents($nextUrl), true); foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; } print_r($videos); в < ?php $baseUrl = 'https://www.googleapis.com/youtube/v3/'; // https://developers.google.com/youtube/v3/getting-started $apiKey = 'API_KEY'; // If you don't know the channel ID see below $channelId = 'CHANNEL_ID'; $params = [ 'id'=> $channelId, 'part'=> 'contentDetails', 'key'=> $apiKey ]; $url = $baseUrl . 'channels?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $playlist = $json['items'][0]['contentDetails']['relatedPlaylists']['uploads']; $params = [ 'part'=> 'snippet', 'playlistId' => $playlist, 'maxResults'=> '50', 'key'=> $apiKey ]; $url = $baseUrl . 'playlistItems?' . http_build_query($params); $json = json_decode(file_get_contents($url), true); $videos = []; foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; while(isset($json['nextPageToken'])){ $nextUrl = $url . '&pageToken=' . $json['nextPageToken']; $json = json_decode(file_get_contents($nextUrl), true); foreach($json['items'] as $video) $videos[] = $video['snippet']['resourceId']['videoId']; } print_r($videos); 

Примечание . Вы можете получить идентификатор канала по адресу https://www.youtube.com/account_advanced после входа в систему.

Используя API версии 2, который устарел, URL для загрузки (канала UCqAEtEr0A0Eo2IVcuWBfB9g):

https://gdata.youtube.com/feeds/users/UCqAEtEr0A0Eo2IVcuWBfB9g/uploads

Существует версия API 3.

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

  1. Установите youtube_dl: sudo pip3 install youtube-dl
  2. Узнайте идентификатор канала вашего целевого канала . Идентификатор начнется с UC. Замените C для канала на U для загрузки (т.е. UU …), это список воспроизведения .
  3. Используйте функцию загрузки плейлиста из youtube-dl. В идеале вы НЕ хотите загружать каждое видео в списке воспроизведения по умолчанию, а только в метаданных.

Пример (предупреждение – занимает десятки минут):

 import youtube_dl, pickle # UCVTyTA7-g9nopHeHbeuvpRA is the channel id (1517+ videos) PLAYLIST_ID = 'UUVTyTA7-g9nopHeHbeuvpRA' # Late Night with Seth Meyers with youtube_dl.YoutubeDL({'ignoreerrors': True}) as ydl: playd = ydl.extract_info(PLAYLIST_ID, download=False) with open('playlist.pickle', 'wb') as f: pickle.dump(playd, f, pickle.HIGHEST_PROTOCOL) vids = [vid for vid in playd['entries'] if 'A Closer Look' in vid['title']] print(sum('Trump' in vid['title'] for vid in vids), '/', len(vids)) 

Недавно мне пришлось извлекать все видео с канала и согласно документации разработчика YouTube: https://developers.google.com/youtube/v3/docs/playlistItems/list

 function playlistItemsListByPlaylistId($service, $part, $params) { $params = array_filter($params); $response = $service->playlistItems->listPlaylistItems( $part, $params ); print_r($response); } playlistItemsListByPlaylistId($service, 'snippet,contentDetails', array('maxResults' => 25, 'playlistId' => 'id of "uploads" playlist')); 

Где $service – ваш объект Google_Service_YouTube .

Таким образом, вам нужно извлечь информацию из канала, чтобы получить список воспроизведения «uploads», на котором есть все видео, загруженные каналом: https://developers.google.com/youtube/v3/docs/channels/list

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

Таким образом, базовый код для извлечения всех видео с канала может быть:

 class YouTube { const DEV_KEY = 'YOUR_DEVELOPPER_KEY'; private $client; private $youtube; private $lastChannel; public function __construct() { $this->client = new Google_Client(); $this->client->setDeveloperKey(self::DEV_KEY); $this->youtube = new Google_Service_YouTube($this->client); $this->lastChannel = false; } public function getChannelInfoFromName($channel_name) { if ($this->lastChannel && $this->lastChannel['modelData']['items'][0]['snippet']['title'] == $channel_name) { return $this->lastChannel; } $this->lastChannel = $this->youtube->channels->listChannels('snippet, contentDetails, statistics', array( 'forUsername' => $channel_name, )); return ($this->lastChannel); } public function getVideosFromChannelName($channel_name, $max_result = 5) { $this->getChannelInfoFromName($channel_name); $params = [ 'playlistId' => $this->lastChannel['modelData']['items'][0]['contentDetails']['relatedPlaylists']['uploads'], 'maxResults'=> $max_result, ]; return ($this->youtube->playlistItems->listPlaylistItems('snippet,contentDetails', $params)); } } $yt = new YouTube(); echo '
' . print_r($yt->getVideosFromChannelName('CHANNEL_NAME'), true) . '

';

Как указано в документации ( ссылка ), вы можете использовать тип ресурса канала и список операций, чтобы получить все видео в канале. Эта операция должна выполняться с использованием аргумента ‘id канала.

Давайте будем гением компьютера.