Предыстория
Появилась задача собрать данные по 2000+ youtube видео, из которых необходимо было извлечь название видео, канала и язык.
Функция IMPORTXML, с помощью которой можно выполнять парсинг с сайтов, — не помогла, поскольку, как оказалось в дальнейшем, youtube хранит данные в JSON файлах. Перебирать руками такое количество видео не хотелось и я начал искать способы как автоматизировать или хотя бы упростить эту задачу.
Нашел старую статью 15 года на Хабре, в которой описано как получить количество просмотров видео, но с момента ее публикации youtube обновил API и мне необходимо было получить немного другие данные.
В процессе решения задачи с помощью youtube API и гугл таблиц получилось не только извлечь данные по заранее подготовленному списку видео URL, но также парсить выдачу youtube по ключевому слову.
Находясь в дичайшем восторге от результата, я решил поделиться своим опытом и описать процесс немного подробнее.
Сам метод конечно же не идеален. Его можно охарактеризовать как простое решение на очень скорую руку. Но пока не начал изучать Python (надеюсь этот день рано или поздно настанет) приходится все делать по старинке в таблицах.
Подготовка
Для работы парсера, как и в оригинальной статье, нам понадобится скрипт ImportJSON и youtube API.
ImportJSON
Скачиваем скрипт с github и устанавливаем в таблицу через инструменты >> редактор скриптов.
Youtube API
Получаем свой API — ключ Youtube Data API V3 в библиотеке и создаем под него учетные данные. Предварительно, конечно же, делаем учетную запись, если еще не зарегистрированы в google cloud.
Информация о видео хранится в JSON файле, который доступен по ссылке:
www.googleapis.com/youtube/v3/videos?id={Video_ID}&key={API_Key}&part={Part_Parametr}где
Video_ID — идентификатор видео
API_Key — ключ API который вы получите в консоли
Part_Parametr — часть файла в которой хранится информация
Части файла могут быть нескольких видов:
snippet — содержится практически вся базовая информация о видео:
1. дата публикации
2. название видео
3. название канала
4. идентификатор канала
5. описание под видео (Description)
6. категория видео (номер)
7. теги
contentDetails — содержит продолжительность и разрешение видео.
topicDetails — содержит категорию видео в виде ссылки на википедию с названием категории, однако этот раздел не всегда бывает заполнен.
statistics
1. просмотры
2. количество комментариев
3. лайки
4. дизлайки
В целом это основные части, которые могут вам понадобиться, но полный список, если что, есть в справке.
Получение данных по списку URL
Рассмотрим работу парсера на примере обзора badcomedian. Для того чтобы получить информацию о видео нам нужен только его идентификатор (Video_ID), в данном случае это EOWa0fmSGs8.
Получаем и структурируем информацию при помощи формулы ImportJSON и языка запросов XPath.
Так выглядит JSON файл на сервере:
Формула для получения количества просмотров в таблицах:
=ImportJSON(''https://www.googleapis.com/youtube/v3/videos?id=EOWa0fmSGs8&key={API_Key}&part=statistics''; "/items/statistics/viewCount"; ''noHeaders'')В принципе, XPath можно и не использовать в запросе, но тогда вы получите все содержимое JSON файла, без сегментации по параметрам. Создав необходимое количество формул с XPath параметрами вы получите только нужные данные, которые будет легче обрабатывать.
Получение списка видео по ключевому запросу
Принцип парсинга выдачи такой же, как и в примере выше, но немного меняется структура запроса.
В данном случае JSON файл с результатами выдачи по видео находится по ссылке
www.googleapis.com/youtube/v3/search?part=snippet&q={Your_Query}&type=video&key={API_Key}где параметр type указывает на то, что именно мы получим на выходе:
type=video — список видео релевантных запросу
type=channel — список каналов
type=playlist — список плейлистов
Также дополнительно в запросе можно указывать:
1. дату публикации или диапазон дат
2. регион и язык поиска
3. продолжительность видео
4. количество результатов (по умолчанию 5, максимальное 50) и т.д.
Полный список параметров и конструктор запросов есть по ссылке.
Чтобы получить список ID по запросу badcomedian используем формулу:
=ImportJSON(" www.googleapis.com/youtube/v3/search?part=snippet&q=badcomedian&type=video&key={API_Key} "; "/items/id/videoId"; ''noHeaders'')ImportJSON отлично работает совместно с функцией СЦЕПИТЬ, которая и позволяет нам изменяя различные параметры совершать массовый анализ или парсинг видео.
Пример того, как организована таблица:
Минус метода
Серьезный минус данного метода парсинга информации — быстрое исчерпание дневного лимита запросов к API. Я не нашел способ как ограничить количество запросов или же создать последовательное обращение к API. То есть попытка спарсить инфо по 10+ ключам одновременно гарантированно приведет к ошибке — окончание суточного лимита запросов. Поэтому приходится разбивать ключевые слова на небольшие группы и сохранять полученные результаты как значения.
megapro17
Можно не через api парсить, как это сделано в youtube-dl
ARad
Это будет не простой парсер ;)
megapro17
Почему, если совсем лень то можно прикрутить самого его, он умеет отдавать название видео по ссылке