Как стать автором
Обновить

Импорт данных из YouTube и Vimeo в Google.Docs

Время на прочтение3 мин
Количество просмотров15K

UPDATE (12 мая 2015):


Вынужден сообщить, что с 1 мая 2015 года данные устарели. Youtube поменял правила работы API: теперь невозможно осуществлять анонимные запросы. Для получения данных необходим Authorization API-key.


Предыстория


Совсем недавно у нас случилась ситуация, когда «потерялись» все YouTube и Vimeo ссылки на ролики, количество просмотров которых нам необходимо выводить на сайте. Это нужно, чтобы потенциальные инвесторы и партнеры видели, какие текущие показатели у наших сериальных проектов. Скрипт обновляет данные раз в сутки, хотя я неоднократно просил сделать обновление показателей в реальном времени. Я много лет не программирую, ушел в совершенно иной вид деятельности и в настоящий момент возглавляю анимационную студию. Конечно же, я был обескуражен возникшей ситуацией с потерей данных, устроил разнос и прочее, но это к делу отношения не имеет.

Ссылки были восстановлены, но вот счетчик меня смутил. Пока шло восстановление, цифры я большими группами собирал вручную, а теперь после того, как их обошел скрипт и выдал результат, они катастрофически не бились. На мои претензии программистам я получал ответ, что всё ок, хоть упроверяйся. Не желая сильно заморачиваться, я решил пойти по весьма странному пути: сделать обход ссылок при помощи Google.Sheets и посмотреть на результаты, а заодно проверить, действительно ли это столь мучительный процесс: обход нескольких сотен ссылок и получение данных о просмотрах. Потратил на свой эксперимент я несколько часов, выяснил, что дело это не хитрое, собрать данные в реальном времени достаточно просто, а скрипт на нашем сайте, действительно, работает криво и данные собирает неточно, теряя по дороге миллионы просмотров.

ImportXML и Vimeo


Помятуя, что как-то делал себе вывод актуального курса доллара и евро, нашел старый документ и подглядел в нем удобную функцию Google.Sheets — это ImportXML (в Google есть 4 функций удобно утягивающих данные из сети: ImportXML, ImportDATA, ImportHTML, ImportFEED). В ячейке таблицы просто пишем "=ImportXML" и Google дает подсказку, как правильно вынимать необходимые данные. Я полез на сайт Vimeo и нашел странницу с API и описанием, где получить XML с данными ролика. Всё банально:

http://vimeo.com/api/v2/video/00000000.xml
где 00000000 — это id ролика (берется из адресной строки на Vimeo)

Открыв XML, я увидел, что всё, что мне нужно. В контейнере третьего порядка <stats_number_of_plays> лежали данные о просмотре. Таким образом получить в Google.Sheets данные о просмотре например вот этого ролика, можно просто указав в ячейке следующее значение:
=IMPORTXML("http://vimeo.com/api/v2/video/17589726.xml", "//videos/video/stats_number_of_plays")

В первых кавычках ссылка на XML, во вторых кавычках указываем XPath к нужному контейнеру. Подробнее о синтаксисе XPath можно прочитать здесь.

ImportJSON и YouTube


Чуть сложнее оказалось с YouTube. Да, они дают данные о ролике, но в контейнерах JSON. Найти сводный файл оказалось не сложнее, чем на Vimeo. Всё также не сложно:

http://gdata.youtube.com/feeds/api/videos/00000000?v=1&alt=json
где 00000000 — это id ролика (берется из адресной строки на YouTube)

Но вот сам JSON для меня лично — история новая. Я попробовал к нему обращаться и так, и сяк, в результате подумал, что стоит поискать нечто вроде «ImportJSON» и не ошибся. Нашел скрипт, чтобы добавить такую фичу в Google.Sheet, добавил и сразу с JSON сдружился. Сам текст скрипта лежит здесь по ссылке.

Устанавливать скрипт в Google.Sheets надо так:
1. Создаете новый Google Spreadsheet.
2. Жмете на Tools -> Script Editor.
3. Жмете на Create script for Spreadsheet.
4. Удаляете заготовку нового скрипта и вставляете текст нашего скрипта.
5. Переименовываете его в ImportJSON.gs и сохраняете.
6. Возвращаетесь в свой документ, где уже работает новая функция “=ImportJSON()” в полном объеме.

Открыв JSON от YouTube, мы можем найти все необходимые нам данные о ролике. В контейнере <yt$statistics> есть атрибут viewCount, который нам и нужен. Таким образом получить в Google.Sheets данные о просмотре например вот этого ролика, можно просто указав в ячейке следующее значение:
=ImportJSON("http://gdata.youtube.com/feeds/api/videos/GRNZ0wwNOTc?v=2&alt=json", "/entry/yt$statistics/viewCount", "noHeaders")

Вот и всё. Кстати, в итоге получилось, что Google.Sheets считает данные сотен роликов за… меньше, чем за одну минуту. Я был прав. Программисты просто водили меня вокруг пальца. Получить данные из контейнеров XML и JSON при помощи РНР задача еще менее хитрая, чем та, которую я перед собой поставил. Мало того, и YouTube, и Vimeo предлагают готовые РНР решения для разработчиков.

Всем удачи! Надеюсь, эта короткая статья будет полезна.
Теги:
Хабы:
Всего голосов 23: ↑22 и ↓1+21
Комментарии7

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
22 – 24 ноября
Хакатон «AgroCode Hack Genetics'24»
Онлайн
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань