История в коде (как мы показывали трейлеры на Кинонавигаторе) Как известно, сейчас Youtube в России - заблокирован (
Поэтому все российские пользователи, которые не пользуются VPN при работе с нашим Кинонавигатором остались без трейлеров (все трейлеры у нас показывались с Youtube, и никаких альтернативных вариантов не предполагалось).
Мы подумали и решили подключить возможность использования трейлеров с ВКонтакте (там уже есть практически все русифицированные трейлеры).
Что надо было сделать, в принципе было понятно. И я засучил рукава и полез в js-код в Кинонавигаторе, отвечающий за трейлеры. Код оказался довольно коротким (~200 строк), но очень запутанным, с множеством исторических напластований и с большим количеством неиспользуемого функционала. В результате его оказалось проще переписать заново.
Разбирая код, я вспомнил – как развивалась история с трейлерами на Кинонавигаторе, и она показалась мне очень поучительной.
В этом маленьком кусочке кода, как в капле воды, отразилась история того, как IT-компании и политики портили жизнь разработчиков и пользователей на протяжении последних 5 лет. Итак – история.
1. В свое время у youtube была полезная функция - возможность встраивания в сторонние сайты плееров не для конкретного ролика с его уникальным ID, а для поискового запроса. В результате youtube сам формировал плей-лист, и открывал его в плеере, предоставляя возможность прямо там перебирать ролики.
Когда мы запускали Кинонавигатор (февраль 2019), мы использовали именно эту функцию - при генерации странички подставляли в src фрейма с трейлером поисковый запрос типа "фильм {Название} {год} трейлер". Т.е. никакого кода не было вообще. И, в общем, все более или менее работало.
2. Пока не начались жалобы пользователей. В окошке плеера первым часто показывалась какая-то фигня, а нужные трейлеры зачастую не находились даже долгим листанием плей-листа (ну и не все догадывались что его можно листать).
Выяснилось, что Youtube ищет довольно странно и весьма чувствителен к порядку слов в запросе. Причем для разных фильмов – по-разному. Что бы он сразу выдал то, что надо - иногда лучше было слово «трейлер» написать впереди, иногда лучше было не писать год...
Вот тут началось программирование. Мы решили, что будем генерировать пачку возможных поисковых запросов для русских и английских названий, и позволять пользователям голосовать и перебирать их листанием (не тот трейлер / тот трейлер), а порядок показа выстраивать в соответствии с голосованием.
Сделали, и оно работало год. Пока вдруг не перестало работать. Трейлеры перестали показываться совсем.
3. Выяснилось, что Гугль просто закрыл эту опцию (поисковый запрос во фрейме youtube:). И теперь, чтобы получать список роликов по запросу, надо использовать Youtube-API.
А для этого надо зарегистрироваться в google developers console, получить одобрение, создать проект, получить ключ и тогда можно будет пользоваться API.
В общем, я потратил пару дней, чтобы через все это прорваться и дописать код. При этом у него сильно изменилась логика.
Появился смысл сохранять в базе полученные через API идентификаторы видео, и показывать их, прежде чем лезть с запросами к API. Голосование и листание осталось, но теперь оно стало относиться не к поисковому запросу, а к конкретному ролику. Запросы, впрочем, тоже перебирать надо было, так как не любые запросы вообще давали релевантный результат - с появлением API Youtube не поумнел...
Сделал, запустил. Заработало. И работало ровно полчаса.
4. Выяснилось, что в бесплатном API у Гугля есть лимит на этот запрос – чего-то типа не больше 100 штук в день. И как лимит заканчивался (а закончился он быстро) - все переставало работать на сутки.
Ну хрен с ним, подумал я. В конце концов, за несколько месяцев для большинства популярных фильмов трейлеры накачаются.
Но тут мы сделали возможность ручного добавления трейлеров. И пользователи начала их довольно активно добавлять.
5. Параллельно я отправил запрос в Гугл на увеличение бесплатного лимита (такая возможность есть, как выяснилось). В ответ мне прислали Application Form на 5 листах с кучей дурацких вопросов. Я на них ответил как смог, и отправил.
Через неделю мне пришел ответ - типа "мы все таки не поняли, что у вас за проект" и новая Application Form – уже на 8 листах, с неделей на ответ.
Тут я плюнул, и понял, что бюрократию Гугл не прошибешь. Надо искать другой выход.
А бюрократия Гугл, как выяснилось, плюнула на меня. Спустя месяц я получил письмо, что поскольку я не ответил и проект мой ваще какой-то непонятный, то бесплатный лимит мне урезают.
6. Я тогда игрался с интегратором пиратских плееров yohoho - чтобы обеспечить себе и близким возможность просмотра фильмов непосредственно на Кинонавигаторе.
Для всех открывать это было стремно, можно было попасть под раздачу. Я и так регулярно получал грозные письма от правообладателей по поводу ссылок на пиратки в окошке «Смотреть».
А у yohoho был режим, когда запрашивались не фильмы, а трейлеры. И я подключил показ трейлера с yohoho, если трейлеров не было среди сохраненных, и запрос по API к Youtube не сработал.
Стало лучше. Почти совсем хорошо.
7. Пока yohoho не заблочил Роскомнадзор.
Он еще некоторое время скитался по разным доменам (и я все это отслеживал) пока не сдох окончательно. Стало хуже, но к тому времени пользователи уже наладились добавлять трейлеры, так что было терпимо.
8. А тут наступил 2022 год.
И когда через какое-то время API Youtube перестал работать, выяснилось, что ключ для запросов к API надо регулярно продлевать, а Гугль заблокировал вход в developers console для российских IP (причем как-то так, что даже VPN не помогал).
В результате вся моя хитрая техника добычи трейлеров отвалилась. Осталось только пользовательское добавление.
Но большинство популярных фильмов к тому времени уже получили трейлеры, так что как то с этим можно было жить.
9. Но были не только плохие новости, но и хорошие.
Я подключился к (неофициальному) API Кинопоиска для обновления данных, и там обнаружилось, что Кинопоиск знает кучу трейлеров (тоже с youtube), и API их отдает.
Я начал их брать оттуда, и стало совсем хорошо.
9. Пока Youtube не заблокировали.
И тут я занялся тем, что собственно, написано в начале - подключением плеера с ВК. Пришлось довольно много чего добавить и в бэке и на фронте.
Логику показа трейлеров я заложил простую - пользователям с российским ip показывать только VK-трейлеры (страну по ip я уже определять умел), а с нероссийским - все. Потому что если у тебя российский IP - ты не увидишь Youtube, а если ходишь через VPN - то и IP будет не российский.
Выложил, протестировал, и кинул клич по активным пользователям - с просьбой добавлять трейлеры с ВК там, где их нет. Пользователи откликнулись. И не только добавлением трейлеров.
10. В первые же сутки пошли жалобы от людей, которые до этого видели трейлеры, а теперь – нет.
Оказалась, что заложенная логика – неправильная. Потому что существуют прилады типа Юбуст, которые, не являясь VPN, позволяют полноценно смотреть Youtube. IP при этом остается российским. И пользуется ими уже много кто (только у Юбуст больше 1млн установок).
Это тоже пришлось учесть - оставлять youtube-трейлеры и для российских пользователей, но показывать их в ротации после ВК-шных.
Еще выяснилось, что по непонятной причине ВК не все ролики дает встраивать. Т.е. встраивать он их дает, но показывает окно с ошибкой. В результате понадобился учет - кто именно добавлял тот или иной трейлер, и функция для удаления, доступная тому, кто добавлял.
А еще выяснилось, что из каких-то стран, в частности Латвии и Украины ВК недоступен. Но с этим я пока ничего не делал.
P.S. Я сильно подозреваю, что история на этом не закончилась. Потому что ни IT-компании, ни тем более политики, очевидно, не собираются останавливаться в своем главном деле – усложнять людям жизнь…
закрыть