Как получить все заголовки видео в канале YouTube, используя Youtube Data API v3? - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над извлечением заголовков всех видео на канале YouTube с помощью Youtube Data API v3.

Я следовал за фрагментами из https://developers.google.com/youtube/v3/code_samples/python

Я получаю число при запросе ['statistics']['videoCount']

Но когда я ищу фактический канал в YouTube, он дает другое число для подсчета видео.

Допустим, я пытаюсь найти канал с идентификатором - UCeLHszkByNZtPKcaVXOCOQQ

['statistics']['videoCount'] дает 19

Однако, если я ищу канал Опубликовать Malone на YouTube, в нем есть 36 видео. Куда я иду не так?

Дает ли ['statistics']['videoCount'] точное количество видео на канале YouTube?

Вот мой код:

from pprint import pprint
from googleapiclient.discovery import build
import os

YOUTUBE_API_KEY = os.environ.get('YOUTUBE_API_KEY')
youtube = build('youtube', 'v3', developerKey=YOUTUBE_API_KEY)

lis = ['UCeLHszkByNZtPKcaVXOCOQQ']
for i in lis:
    channels_response = youtube.channels().list(part='statistics', id=i).execute()
    print(i, channels_response['items'][0]['statistics']['videoCount'])
for i in lis:
    channels_response = youtube.channels().list(part='contentDetails', id=i).execute()
    for channel in channels_response['items']:
        uploads_list_id = channel["contentDetails"]["relatedPlaylists"]["uploads"]
        playlistitems_list_request = youtube.playlistItems().list(
            playlistId=uploads_list_id,
            part="snippet",
            maxResults=50
          )
        while playlistitems_list_request:
            playlistitems_list_response = playlistitems_list_request.execute()
            for playlist_item in playlistitems_list_response["items"]:
                # pprint(playlist_item)
                title = playlist_item["snippet"]["title"]
                video_id = playlist_item["snippet"]["resourceId"]["videoId"]
                print(title, video_id)
            playlistitems_list_request = youtube.playlistItems().list_next(
                playlistitems_list_request, playlistitems_list_response
            )

1 Ответ

1 голос
/ 06 марта 2019

Сначала вы печатаете количество видео с данного канала YouTube (используя channel_id) .

Получив channel_id, используйте этот запрос.для получения следующих данных:

  • Количество загруженных видео (т. е. videoCount) .
  • playlistid списка воспроизведения, который имеетзагруженные видео.

Это запрос:

https://www.googleapis.com/youtube/v3/channels?part=snippet%2CcontentDetails%2Cstatistics&id=UCeLHszkByNZtPKcaVXOCOQQ&fields=items(contentDetails%2Cid%2Csnippet(country%2Cdescription%2Ctitle)%2Cstatistics%2Cstatus)%2CnextPageToken%2CpageInfo%2CprevPageToken%2CtokenPagination&key={YOUR_API_KEY}

Вот результаты канала YouTube: Пост Malone

Youможете проверить эти результаты в демонстрационной версии Google API Explorer :

{
 "pageInfo": {
  "totalResults": 1,
  "resultsPerPage": 1
 },
 "items": [
  {
   "id": "UCeLHszkByNZtPKcaVXOCOQQ",
   "snippet": {
    "title": "Post Malone",
    "description": "The official Post Malone YouTube Channel.\nwww.postmalone.com"
   },
   "contentDetails": {
    "relatedPlaylists": {
     "uploads": "UUeLHszkByNZtPKcaVXOCOQQ",
     "watchHistory": "HL",
     "watchLater": "WL"
    }
   },
   "statistics": {
    "viewCount": "967939106",
    "commentCount": "0",
    "subscriberCount": "11072809",
    "hiddenSubscriberCount": false,
    "videoCount": "19"
   }
  }
 ]
}

Проверьте эти два значения: uploads и videoCount.

Если вы введете в Разместите загруженные видео Мэлоуна , вы получите, что у него действительно есть 19 загруженных видео (столько же, сколько указано в значении videoCount) .


В своем вопросе вы сказали:

Однако, если я ищу канал Post Malone на youtube, он содержит 36 видео.Куда я иду не так?

Не думаю, что вы делаете что-то не так, просто у вас нет полного спектра.Видите ли, если вы проверите некоторые из его playlists, вы увидите, что 35 видео соответствуют этим спискам воспроизведения:

Все его 35 видео показаны на его вкладке "видео" в его канале.

Подводя итог, эти 19 видео соответствуют его 19 загруженным видео (которые сгруппированы в его плейлисте "uploads") .Если вы хотите получить все его видео, у вас есть один вариант - получить все плейлисты, которые есть на канале YouTube.

В этом случае эти видео на самом деле не находятся на этом канале, а на отдельном автоматически созданном канале YouTube.отсюда и путаница.

...