Предыстория
Совсем недавно у нас случилась ситуация, когда «потерялись» все 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 предлагают готовые РНР решения для разработчиков.
Всем удачи! Надеюсь, эта короткая статья будет полезна.
Автор: Greenmoon2