{short_descr}  дальше
poster
{title_prefix} {title}, {year} {serial}
{src_title}
{rated_collection}
{country}
{genre}
Режиссер:
  {films_director}
{films_actor}
{afisha}
{list_descr}
{expected_rate}
{average}
средняя из
{true_nrates} оценок
{show_kp_rating} {show_imdb_rating}
{xrate}
  • О проекте
  • Вопросы и ответы
  • Новости проекта
  • Замечания и предложения
  • Обратная связь
  • Поделиться страницей
  • Фильмы и сериалы
    • Фильмы
    • Сериалы
    • Сейчас в кинотеатрах
    • Рейтинги TSPDT (2024)
      • ВЕЛИЧАЙШИЕ ФИЛЬМЫ В ИСТОРИИ
        • Top1000
        • Кандидаты в TOP1000
      • ГЛАВНЫЕ ФИЛЬМЫ 21 ВЕКА
        • Top1000
        • Кандидаты в TOP1000
      • источник: TSPDT
    • Актуальное
      • Фильмы недели
      • Фильмы месяца
      • Фильмы, актуальные на IMDB
      • Сериалы недели
      • Сериалы месяца
      • Сериалы, актуальные на IMDB
    • Кинопремии
    • Рейтинг персон
    • Рейтинг киностудий
    • Подборки
    • Теги
    • Оценить фильмы
    • Запрос на добавление фильма
    • Добавить фильм
    • Добавить персону
    • Галера
  • Рекомендации
  • Сообщество
войти   
Отложенное
фильтр 
Фильтр фильмов
Все результаты
У вас новые уведомления
 

Новость Все новости

6 февраля 2025 19:41
История в коде (как мы показывали трейлеры на Кинонавигаторе)

Как известно, сейчас 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-компании, ни тем более политики, очевидно, не собираются останавливаться в своем главном деле – усложнять людям жизнь…
Отключить рекламу
Недавно просмотрено
Выбрать фильм
Оцените то, что смотрели
КИНОHАВИГАТОР © 2019-2026
О ПРОЕКТЕ FAQ СОГЛАШЕНИЯ ОБРАТНАЯ СВЯЗЬ
{dur}
Если бы вы были зарегистрированы, вы бы увидели полное описание прямо здесь...
{short_descr}  дальше {descr} закрыть
{rating_name}
{rating_value}
Буду смотреть:
В первую очередь
Во вторую очередь
Когда-нибудь
{rate_date}

{title}
{src_title}

{stat}
{edit_comment}
{short_descr}
poster
{title}, {year} {serial} 
{user_link}
{src_title}
{expected_rate} {average}
средняя из
{true_nrates} оценок
{?genre
Жанры:
 } {genre}
{?country
Страны:
 } {country}
{?films_director
Режиссер:
 } {films_director}
{folders}
{xuser_rate}
{cdate}
{xrate}
{widget} {rec_method} {status} {admin_edit} {review-text} {rlikes}
{feedback_date}

{title}
{src_title}

{stat}
{edit_comment}

{short_descr}
{feedback_date}
{name}

{title}
{src_title}

{feedback_type_verb}: {status_prc}
{nactions_show}
{edit_comment}

{short_descr} {admin_edit}
{cdate}
{xuser_rate}
{rbody}
{uavatar}
{name} {rprox}
{rlikes}
{uavatar}  
{uname}
{ga_header} {rage} {rates_header} {user_nrates}
{is_frend_header} {uavatar}  
{uname}
{ga_header} {rage} {rates_header} {user_nrates}
{xuser_rate}

{cdate}
 
#{NN}
 
{uavatar}
{uname}
{ga_header} {?gpic } {rage} {reviews_header} {lreviews} {rates_header} {user_nrates}{kn_rates} {content_actions_header} {content_actions_count} {activity_header} {user_activity} {rating_header} {user_rating}
{uname} {rate}
{title}, {year} {serial}
{full_src_title}
pеж:  {films_director},  {country}
{expected_rate}
{average}
средняя из
{true_nrates} оценок
{expected_rate} {name} {rate} Пригласить
  Оценки Близость Отзывы Рейтинг Был(а) Друг Контент
{has_trailer}   Статус: {status_ind}        +          -  
       +          -                            ?          ×       
{rlikes}
{likes} {dislikes}
{comment}
{likes} {dislikes}
{comment}
{likes} {dislikes}
{comment}
{likes} {dislikes}
{comment}
{likes} {dislikes}
{comment}
Для дизлайка необходим комментарий В комментарии должно быть не менее 50 символов.

Бессмысленные комментарии будут удаляться, а потом автоматически будут удаляться и дизлайки Необходим содержательный комментарий

{title}
{xrate}
{title},  {year}
{title}
{title},  {year}
{?review_after_season
написано после {review_after_season} сезона из {last_season}
}
{short_text} дальше
{text}
{review-source-link}
закрыть
{?review_after_season
написано после {review_after_season} сезона из {last_season}
}
{short_text} дальше
{text}
{review-source-link}
закрыть
{?review_after_season
написано после {review_after_season} сезона из {last_season}
} {text}
{review-source-link}
{title}{prty}
{title}
{film_role}
{title}
роль:
{film_role}
{title} {film_role}
{add_photo}
Add photo
{user_rate_text}
Оценить или отложить фильм
{rate}
{srate}
смотрел
оценить
 Уже смотрел
  В папки
{folder} 
{folder} 
   
 Отложить
 Исключить
 Не хочу
 Cмотреть
 Cмотреть
{ncomments}
{date} {name} → {author_name} "{ytitle}"
{comment}
{replys_count}
{mdate}
{is_answer_to_date} {is_answer_to_subject}
{is_answer_to_text} {is_answer_to_id}
{from}
{to}
{body}{more}
{reply}
{replys_html}
{is_answer_to_text}
{subject}
{body}
{mdate}
{cdate} {subject}
{text}
Это ответ на Есть ответ Переписка Ответить
{uavatar} был {user_activity}

Осторожно, спойлер!
{text}
{or}{title}
{title}
{title}
{title}
{name}
вместе c
сбросить
{title}, {year} {serial}
{user_link} оценил на
{user_rate}
{review-text}
{rlikes}
{country}
{genre}
{films_director}
{expected_rate} {average}
средняя из
{true_nrates} оценок
Уже смотрел
Отложить
Не интересно
{title} {average}
{nobjects}
{title} ({nobjects})
{?created_date создано} {created_date}{?last_addition_date , пополнено } {last_addition_date}