3 минут чтения
26 октября 2021 г.
How to: YouTube API
Современным аналитикам необходимо обладать навыком сбора информации из социальных сетей, ведь сейчас контент социальных сетей очень точно отражает реальную ситуацию в мире, помогает быстро распространить новости и позволяет анализировать аудиторию — подписчиков. В предыдущих постах мы уже описывали кейсы с использованием различных API: Vkontakte API, Facebook API, GitHub API. Сегодня мы расскажем вам о том, что представляет из себя YouTube API, как получить ключ API, а также наглядно покажем, какую информацию можно собрать с его помощью. В двух словах, с помощью YouTube API можно находить каналы по ключевым словам, выгружать данные канала, а также статистику по видео, опубликованным на этих каналах.
Подготовительный этап для работы с YouTube API
Для начала, нужно разобраться в том, как получить доступ к API. Этот процесс подробно изложен на сайте для разработчиков, на который вы можете перейти по ссылке. Если коротко, то необходимо иметь или завести аккаунт Google, войти в профиль для разработчиков, создать проект, получить ключ API и подключить к нему API YouTube Data API v3. Далее, с использованием этого ключа вам будет доступен весь необходимый функционал.
После того, как вы успешно получили ключ, можно открывать любой удобный ноутбук (Jupyter Notebook, Collab и т.д.), устанавливать и подключать нужные для работы библиотеки.
# установка библиотек
pip install —upgrade google-api-python-client
pip install —upgrade google-auth-oauthlib google-auth-httplib2
# импорт необходимых библиотек
import googleapiclient.discovery
import time
Квоты
Один важный момент, который важно знать при использовании Youtube API — это наличие дневных квот на использование функций YouTube API в бесплатном режиме. На день дается квота 10000 юнитов, вызов функции поиска стоит 100 юнитов, вызов информации по объекту — 1 юнит, загрузка видео на YouTube стоит 1600 юнитов. Если вам недостаточно дневной квоты, то вы можете подать запрос в Google на её увеличение, в котором нужно подробно указать цели вашей деятельности c YouTube API.
Поиск YouTube-каналов по ключевым словам
Для начала заведем несколько переменных, которые понадобятся нам в процессе сбора информации.
channels_data = {}
channels_data_full = {}
video_data = {}
Дальше написан скрипт, который можно использовать для поиска перечня каналов по ключевым словам. Мы искали каналы, в названии или описании которых используются следующие слова: s_query = ‘аналитика данных data’. Сначала выводятся каналы, в названии или описании которых присутствуют все три слова, затем хотя бы любые два, затем хотя бы одно. Чем больше ключевых слов по теме мы укажем, тем точнее будет результат.
api_service_name = «youtube»
api_version = «v3»
DEVELOPER_KEY = «» #тут нужно указать ключ, который вы получите при подключении YouTube API
youtube = googleapiclient.discovery.build(
api_service_name, api_version, developerKey = DEVELOPER_KEY)
#строка поиска
s_query = ‘аналитика данных data’
next_token = »
while(True):
time.sleep(0.2)
request = youtube.search().list(
part=»snippet»,
q=s_query,
relevanceLanguage=»ru»,
type=»channel»,
maxResults=25,
access_token=DEVELOPER_KEY,
pageToken = next_token
)
response = request.execute()
for item in response[‘items’]:
channels_data[item[‘snippet’][‘channelId’]] = [item[‘snippet’][‘title’], item[‘snippet’][‘description’]
]
#берем только первые 25 результатов
break
Добавим пару важных пояснений относительно скрипта. В начале цикла в этом скрипте (как и в двух последующих) мы вызываем функцию time.sleep(), чтобы инициировать двухсекундную задержку между вызовом функций. Это нужно для того, чтобы запросы к YouTube не были чересчур частыми (и вообще, это считается правилом хорошего тона в программировании, так что советуем взять на заметку).
Для простоты нашего примера мы сохранили только 25 первых каналов из всех подходящих под условия поиска. Если вам хочется найти все каналы, в которых упоминается хотя бы одно из ключевых слов, то нужно использовать следующее свойство:
try:
next_token = response[«nextPageToken»]
except:
break
Сбор полной информации по всем выбранным каналам
Теперь, когда названия и описания выбранных каналов собраны, можно переходить к следующему этапу, а именно — выгрузке всей информации об этих каналах, в том числе: количество подписчиков канала, количество видео, общее количество просмотров всех видео канала и страна в которой живет, автор канала.
scount = »
for channel in channels_data:
#получаем данные по каждому каналу
time.sleep(0.2)
r = youtube.channels().list(
part=»snippet, statistics»,
id=channel,
access_token=DEVELOPER_KEY
)
resp = r.execute()
try:
if resp[‘items’][0][‘statistics’][‘hiddenSubscriberCount’]:
scount = ‘hidden’
else:
scount = resp[‘items’][0][‘statistics’][‘subscriberCount’]
channels_data_full[channel] = [resp[‘items’][0][‘snippet’][‘title’],
resp[‘items’][0][‘snippet’][‘description’],
scount,
resp[‘items’][0][‘statistics’][‘videoCount’],
resp[‘items’][0][‘statistics’][‘viewCount’],
resp[‘items’][0][‘snippet’][‘country’]
]
except:
pass
Получение информации о видео
Если у вас есть необходимость получить статистику по видео из выбранных каналов, то ниже приведен скрипт на этот случай. В итоге, вы получите словарь video_data с подробной информацией о каждом видео из плейлиста (список всех видео каждого канала): название канала, дата публикации, название и описание видео, количество просмотров, лайков/дизлайков и комментариев.
# получаем информацию по всем видео ранее найденных каналов
for channel in channels_data:
#анализируем каналы
time.sleep(0.2)
r = youtube.channels().list(
part=»contentDetails»,
id=channel,
access_token=DEVELOPER_KEY
)
resp = r.execute()
try:
#получаем плейлист из видео для одного канала из списка
id_playlist = resp[‘items’][0][‘contentDetails’][‘relatedPlaylists’][‘uploads’]
#получаем набор элементов плейлиста (видео)
next_token = »
while(True):
time.sleep(0.2)
r = youtube.playlistItems().list(
part=»contentDetails»,
playlistId=id_playlist,
access_token=DEVELOPER_KEY,
pageToken = next_token
)
resp = r.execute()
for i in resp[‘items’]:
id_videos = i[‘contentDetails’][‘videoId’]
r = youtube.videos().list(
part=»snippet, statistics»,
id=id_videos,
access_token=DEVELOPER_KEY
)
resp1 = r.execute()
video_data[id_videos] = [channel,
resp1[‘items’][0][‘snippet’][‘publishedAt’],
resp1[‘items’][0][‘snippet’][‘title’],
resp1[‘items’][0][‘snippet’][‘description’],
resp1[‘items’][0][‘statistics’][‘viewCount’],
resp1[‘items’][0][‘statistics’][‘likeCount’],
resp1[‘items’][0][‘statistics’][‘dislikeCount’],
resp1[‘items’][0][‘statistics’][‘commentCount’]
]
break
В конце мы ставим break, то есть обрабатываем только одну часть видео из плейлиста. Если вы хотите обработать все видео, то нужно использовать функцию nextpagetoken, которую мы предложили в конце первого скрипта.
В итоге, если трансформировать словарь в привычный датафрейм, мы получим таблицу, которая содержит подробную информацию про все обработанные видео.
d = {‘id’: [x for x in video_data],
‘channel_id’: [video_data[x][0] for x in video_data],
‘published_at’: [video_data[x][1] for x in video_data],
‘title’: [video_data[x][2] for x in video_data],
‘description’: [video_data[x][3] for x in video_data],
‘viewCount’: [video_data[x][4] for x in video_data],
‘likeCount’: [video_data[x][5] for x in video_data],
‘dislikeCount’: [video_data[x][6] for x in video_data],
‘commentCount’: [video_data[x][7] for x in video_data]
}
df = pd.DataFrame(d)
df.head()
Выводы
Конечно, это не все способы работы с YouTube API, однако, мы надеемся, что вы получили представление о том, как сильно расширяются возможности аналитика для получения и обработки информации с помощью этого инструмента.
Комментарии
Добавить комментарий
[ Рекомендации ]
Читайте также
[ Связаться ]
Давайте раскроем потенциал вашего бизнеса вместе
Заполните форму на бесплатную консультацию
Здравствуйте! Подскажите а куда именно нужно подставлять функцию ?
try:
next_token = response[«nextPageToken»]
except:
break