Файлы к уроку:
Ссылки:
Описание
Если подключиться к YouTube Data API, то можно получить основную статистику по любому youtube видео или youtube каналу, например:
- Список всех видео канала
- Дата и время загрузки видео
- Описание видео
- Название видео
- Описание видео
- Количество просмотров, лайков, дизлайков, подписок
- и т. д.
Ваша полученная в результате таблица может выглядеть примерно так:
Решение
Чтобы пользоваться API сначала нужно получить ключ API. Для этого выполните следующие шаги:
- Зайдите на страницу библиотеки API сервисов Google
- Найдите YouTube Data API
- Активируйте этот API и перейдите в раздел Настройки
- Откройте раздел Учетные данные и создайте ключ
Для получения списка ID плейлистов выполните запрос к https://www.googleapis.com/youtube/v3/playlists.
Для получения списка ID видео для какого-то плейлиста выполните запрос к https://www.googleapis.com/youtube/v3/playlistItems.
Для получения подробной информации по конкретному видео выполните запрос к https://www.googleapis.com/youtube/v3/videos.
Примененные функции
- Json.Document
- Table.FromList
- Splitter.SplitByNothing
- ExtraValues.Error
- Table.AddColumn
- Table.RemoveColumns
- Table.ExpandTableColumn
Код
Функция для получения ID плейлистов:
() =>
let
source = Json.Document(
Web.Contents(
"https://www.googleapis.com/youtube/v3/playlists",
[
Query = [
part = "contentDetails,id,localizations,player,snippet,status",
channelId = channel_id,
key = api_key,
maxResults = "50"
]
]
)
),
items = source[items],
to_table = Table.FromList(
items,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
col_pl_id = Table.AddColumn(
to_table,
"playlist_id",
each [Column1][id]
),
col_pl_name = Table.AddColumn(
col_pl_id,
"playlist_name",
each [Column1][snippet][title]
),
remove_cols = Table.RemoveColumns(col_pl_name, {"Column1"})
in
remove_cols
Функция для получения ID видео для плейлиста:
(playlist_id) =>
let
source = Json.Document(
Web.Contents(
"https://www.googleapis.com/youtube/v3/playlistItems",
[
Query = [
part = "contentDetails,id,snippet,status",
playlistId = playlist_id,
key = api_key,
maxResults = "50"
]
]
)
),
items = source[items],
to_table = Table.FromList(
items,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
col_vid_ids = Table.AddColumn(
to_table,
"video_id",
each [Column1][contentDetails][videoId]
),
remove_cols = Table.SelectColumns(
col_vid_ids,
{"video_id"}
)
in
remove_cols
Функция для получения подробной информации по видео:
(video_id) =>
let
source = Json.Document(
Web.Contents(
"https://www.googleapis.com/youtube/v3/videos",
[
Query = [
part
= "contentDetails,id,liveStreamingDetails,localizations,player,recordingDetails,snippet,statistics,status,topicDetails",
id = video_id,
key = api_key
]
]
)
),
items = source[items],
to_table = Table.FromList(
items,
Splitter.SplitByNothing(),
null,
null,
ExtraValues.Error
),
col_date = Table.AddColumn(
to_table,
"date",
each [Column1][snippet][publishedAt]
),
col_title = Table.AddColumn(
col_date,
"title",
each [Column1][snippet][title]
),
col_descr = Table.AddColumn(
col_title,
"description",
each [Column1][snippet][description]
),
col_duration = Table.AddColumn(
col_descr,
"duration",
each [Column1][contentDetails][duration]
),
col_views = Table.AddColumn(
col_duration,
"views",
each [Column1][statistics][viewCount]
),
col_likes = Table.AddColumn(
col_views,
"likes",
each [Column1][statistics][likeCount]
),
col_dis = Table.AddColumn(
col_likes,
"dislikes",
each [Column1][statistics][dislikeCount]
),
col_comments = Table.AddColumn(
col_dis,
"comments",
each [Column1][statistics][commentCount]
),
remove_cols = Table.RemoveColumns(col_comments, {"Column1"})
in
remove_cols
А теперь создадим запрос, в котором применим все эти функции:
let
source = #table({"channel_id"}, {{channel_id}}),
col_pl = Table.AddColumn(source, "pls", each fn_playlists()),
col_pl_expand = Table.ExpandTableColumn(
col_pl,
"pls",
{"playlist_id", "playlist_name"},
{"playlist_id", "playlist_name"}
),
col_vids_id = Table.AddColumn(col_pl_expand, "video_id", each fn_videoids([playlist_id])),
col_vids_id_expand = Table.ExpandTableColumn(col_vids_id, "video_id", {"video_id"}, {"video_id"}),
col_vids_info = Table.AddColumn(col_vids_id_expand, "vids_info", each fn_video([video_id])),
col_vids_info_expand = Table.ExpandTableColumn(
col_vids_info,
"vids_info",
{"date", "title", "description", "duration", "views", "likes", "dislikes", "comments"},
{"date", "title", "description", "duration", "views", "likes", "dislikes", "comments"}
)
in
col_vids_info_expand
Этот урок входит в курс Веб-запросы в Power Query
Номер урока | Урок | Описание |
---|---|---|
1 | Котировки Yahoo Finance | Вы хотите получить историю котировок акций MCD с 2000 года по текущий день с сайта Yahoo Finance. Вы копируете ссылку на раздел с историческими данными, вставляете ссылку в Power Query и получаете только 100 строк. |
2 | HTML, получение данных по облигациям | Мы хотим получить данные по всем облигациям со страницы bonds.finam.ru |
3 | Многостраничное извлечение | На разных страницах находятся сайта находятся котировки золота на каждый год. Нужно соединить все данные в одну таблицу. |
4 | JSON, Котировки Yahoo Finance 2 | В этом уроке мы разберем еще один способ скачивания котировок с Yahoo Finance. Этот способ намного удобнее и быстрее. Здесь мы научимся обрабатывать формат JSON. |
5 | Котировки Московской биржи | В этом уроке мы научимся получать прямо в Excel котировки разных ценных бумаг с сайта Московской биржи. Московская биржа предоставляет возможность скачивать котировки и другую информацию по ценным бумагам при помощи специальных ссылок. Если мы введем такую ссылку в Power Query, создав запрос из интернета, то получим интересующие нас котировки прямо в Excel. |
6 | Неразмеченный текст | Вы делаете запрос к Web-странице и сталкиваетесь с неразмеченным текстом. Вы хотите при помощи Power Query этот неразмеченный текст преобразовать в нормальную красивую таблицу. |
7 | Текстовый документ, веб-страница, List.Zip | В этом запросе мы научимся получать нужную информацию из текста веб-страницы. |
8 | Youtube Data API | В этом уроке мы научимся получать данные из Youtube Data API. Узнаем как получить данные о Youtube канале: список видео и плейлистов, названия, описания, длительность, тэги, количество лайков, дизлайков, просмотров и комментариев. |
9 | Личный OneDrive — подключаемся напрямую к файлам и папкам | В этом уроке мы разберем как напрямую подключиться к файлам и папкам на личном OneDrive. |
10 | Подключение Google Spreadsheets, Google Drive (Excel.Workbook, Web.Contents) | В этом уроке мы научимся подключаться к xlsx файлам, которые находятся в вашем Google Drive. |
11 | Получить все станции метро | Получим таблицу с перечнем станций метрополитена даже с координатами широты и долготы. |
12 | Получить ссылки с веб-страницы (Html.Table) | Получить URL с веб-страницы. Сделать запрос к каждому URL, получить таблицы и объединить их всех по вертикали. |
13 | Получить все URL с веб-страницы | Получим нужные URL с веб-страницы в Excel. Сделать запрос к каждому URL, получить таблицы и объединить их по вертикали. |
14 | Ищем работу через API Head Hunter (hh.ru) | Получим таблицу с перечнем вакансий с сайте HH. Получим вакансии, в названии или описании которых встречаются слова SQL, Pandas, Power Query, Power Pivot, Power BI. |
15 | Запрос к XML Sitemap | Сделаем запрос к sitemap.xml, чтобы извлечь список всех веб-страниц сайта. |