Movie Rating Migrator: Kinopoisk -> IMDB
Программа для скачивания личных оценок с Кинопоиска в формате Excel, а также для переноса оценок с Кинопоиска на IMDB.
Для использования программы понадобится:
- Google Chrome.
- Важно что бы у Вас открывался сайт Кинопоиска. (Возможно понадобиться установить VPN).
- Программа разрабатывалась для Windows. На других ОС не тестировалась.
Для использования программы через архив:
- Cкачайте файл — «__Movie_Rating_Migrator_Kinopoisk_to_IMDB.rar», и распакуйте его.
- Запустите файл — «__Movie_Rating_Migrator_Kinopoisk_to_IMDB.exe».
- Введите ID Кинопоиска в которого нужно спарсить оценки, и укажите путь для сохранения файлов.
- Следуйте инструкциям программы.
FAQ:
Как узнать ID пользователя Кинопоиск?
Узнать ID вы можете узнать во вкладке оценки.
Что делать, если не открывается браузер?
Чаще всего ошибка версии драйверов. Попробуйте обновить драйвера браузера в программе.
- Загрузите последнюю версию chromedriver для своей системы здесь.
- Замените chromedriver.exe в папке chrome_driver вашей загрузкой.
Проверьте что бы у вас открывался сайт Кинопоиск.
В Украине он заблокирован. Любой ВПН поможет это исправить.
В каком формате я получу оценки после парсинга по кинопоиску?
Вы получите оценки в файле формате Excel. В файле будут следующие колонки:
- russian_movie_name
- english_movie_name
- user_rating
- week
- user_rating_count
- kinopoisk_id
- kinopoisk_rating
- imdb_id
Также будет сформирован файл в формате JSON, созданный для дальнейшего переноса оценок на IMDB.
Все ли оценки перености на IMDB?
Переносятся все оценки, для которых есть код imdb. Если фильм не будет перенесен, то этот фильм будет добавлен в файл с ошибками (будет создан в конце переноса оценок).
Что делать, если при переносе оценок произошел сбой?
Программа запоминает статус работы. Запустите перенос оценок еще раз и он продолжится с места окончания (также еще раз попытается перенести фильмы, которые не удалось перенести).
Не запускайте парсинг оценок заново, так как процесс начнется с начала.
Сколько фильмов обычно переносится успешно?
Из практики 99%. Остальные попадают в файл с ошибками.
Эта программа позволяет найти в интернете (на сайте kinopoisk.ru), и вывести в таблицу Excel характеристики фильмов
(такие, как: год выпуска, страна, слоган, режиссер, сценарий, продюсер фильма, оператор, композитор, жанр, продолжительность и т.д. и т.п.)
Исходными данными для программы является столбец с названиями фильмов.
Принцип работы программы:
- для каждого фильма берётся русское название, и преобразуется в URLEncode
- во вторую ячейку строки вставляется гиперссылка, ведущая на результаты поиска по сайту
- формируется ссылка для поиска очередного фильма по сайту kinopoisk.ru
- на скрытом листе TEMP макросом создаётся веб-запрос
- после получения данных из интернета веб-запрос удаляется (данные остаются)
- по каждому значению из заданного в макросе массива производится поиск характеристики с таким же названием в результатах выполненного веб-запроса
- результаты выводятся в строку с названием фильма
SearchArray = Array(«год», «страна», «слоган», «режиссер», «сценарий», «продюсер», «оператор», «композитор», «художник», «жанр», «монтаж», «сборы в России», «премьера (мир)», «время»)
Время работы макроса напрямую зависит от 3 величин:
- количества фильмов
- скорости доступа в интернет
- производительности компьютера
Остановить поиск фильмов можно в любой момент, нажав кнопку «Остановить» на индикаторе выполнения.
Nov 4, 2020 23:02
· 706 words
· 4 minute read
python
У меня есть некоторая паранойя касательно моих данных. Мне постоянно кажется, что я могу их потерять. Поэтому, я стараюсь делать бэкапы всего, что только можно: фото, видео, проектов… и рейтинга просмотренных фильмов. Один раз меня это уже спасло — когда внезапно закрылся ImhoNet. Тогда я перебрался на Kinopoisk. И что-то не уверен в правильности своего решения. После того, как он убил аккаунт жены, добавив туда кучу мусора, я решил проверить не случилось ли это с моим, а заодно и сделать бэкап. Удивительно, но я не нашёл этой функции в интерфейсе. Хотя казалось бы, это мои данные, и я должен уметь их скачивать. Интересно, что они говорят гражданам ЕС, т.к. GDPR явно требует этой функциональности?!
Обращение в техподдержку ситуацию не улучшило — мне прислали ссылку с отпиской. “Дорогие пользователи, вам эта функция не нужна. Просто доверьтесь Яндекс.” Тоже мне джедаи, довериться им… Причём, судя по ответам, Кинопоиск имел такую функцию раньше, но удалил. И это лишь первый “Yandex, WTF?!».
Куки Kinopoisk
Никакого API я не нашёл, так что самый простой способ — написать скрапер для парсинга страниц с оценками. Спасибо, что можно увеличить количество объектов на странице до 200. Это позволило мне обойтись всего десятком запросов. Я воспользовался Scrapy как одним из популярных фреймворков для парсинга. Полный код можно посмотреть на GitHub, но ничего технически интересного там нет. Скрапер как скрапер — со своими заморочками и обходами “защиты”. Но мне хотелось бы остановиться на куках (они ж нужны для работы с профилем). Когда я открыл страницу, то был слегка поражён — 50 кук! 50, Карл! “Яндекс, WTF?!” Из интересного:
- есть куки для названия кнопок: “profile_button”, “mykp_button”
- ваша геопривязка аж в 4х куках: “user-geo-region-id”, “user-geo-country-id”, “location”, “user_country”
- ваши идентификаторы для всех сервисов Яндекса: “yandexuid”, “_ym_uid”, “yuidss”, “yandex_gid”, “yandex_login”, “uid”…
- какие-то ключи с сигнатурами: “desktop_session_key”, “yandex_ugc_rating_status” (не проще было бы JWT использовать? ах да, NIH)
- не смогли договориться csrf и определили 2 куки: “_csrf” и “_csrf_csrf_token”
- булевые флаги: “mda_exp_enabled”, “gdpr”, “mda”, “undefinedClosed”… Причём некоторые в формате 0/1, другие в yes/no, а некоторые true/false
- куча сессий, включая “PHPSESSID”, который, кстати, не используется
Да и вообще используются на этой странице всего 2 куки: “location” и “ya_sess_id”. 2, Карл! Я знаю, что куки действуют на весь сайт, и одна страница не показательна. Но можно было бы договроиться об идентификаторах, а некоторые настройки использовать с сервера. Хотя зачем? Кому нужна такая оптимизация кроме пользователей?
Пока далеко не ушли, вот куки, возвращаемые сервером. Видимо, проще продублировать нежели договориться внутри компании:
Как Kinopoisk скрывает оценки
Повторюсь, сам скрапер довольно обычный за исключением самой важной части — оценок. Они зашифрованы. Зашифрованы, Карл! На фронтенде! “Yandex, WTF?!” Вместо циферки в оранжевом квадратике на страницу приходит вот такой код:
<script>eval(decodeURIComponent(HVZG(atob(`QAl1E1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEE1dTQAsEQxc8AVhAV0sTEEpcE1dbQA52UAwPCBwHd0BRVQwFDlVQUhwGdUBRVUtVQgwNAhwHd0BRVRwGAV1GVw4RBCZGVwlBRQAROlpbUgBGVngRBFVGVw4CBVNUAwlRDlxbXFhXB10HVwkMVAdSUgkND1BQUABXVUBRUhwGdUBRVVZWXEBQJBwGBkBRURwGDkBRUhwGBRcCEVBaUToWFlxGaVBSXQkHAUBRUhwGD0BUIRwGD0BQJxwEd0BRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBkBRVRwGBg==`),`e946ec`)));function HVZG(data,key){var result=[];for(var i=0;i<data.length;i++){var xored=data.charCodeAt(i)^key.charCodeAt(i%key.length);result.push(String.fromCharCode(xored));}return result.join(``);}</script>
Посмотрим внимательнее на функцию HVZG
(кстати, она меняет название каждый день):
function HVZG(data,key) {
var result = [];
for (var i=0; i<data.length; i++) {
var xored = data.charCodeAt(i) ^ key.charCodeAt(i % key.length);
result.push(String.fromCharCode(xored));
}
return result.join(``);
}
Т.е. это обычный XOR по ключу. Зачем, Яндекс?! Ты действительно считаешь, что это как-то поможет от скачивания оценок?! Мой лоб уже начал болеть от фейспалмов.
Анализ производительности страницы
Но это ещё не всё — там же ещё eval. Так вот, расшифрованные данные:
ur_data.push({film: 462553, rating: '8', user_code: 'b3f65449b07e86feda2565540', obj: $('#rating_user_462553')});
Т.е. там не просто циферка, там кусок кода, который выполняется после окончания загрузки! Интересно, как это аффектит производительность?
Через полчаса процессор всё ещё был загружен на 20%, но расход памяти уменьшился до 400Mb. “Yandex, WTF?!” Что ты говорил про заботу о пользователях? Ах да, забыл упомянуть, что этот скрипт вставляется в каждую строку с фильмом! Т.е. эта функция у меня на странице продублирована минимум 200 раз. 200 раз, Карл! До такого уровня мне действительно ещё очень и очень далеко.
Заключение
Оценки-то я скачал, но моё чувство прекрасного было изнасиловано разработчиками Кинопоиска. Тонны мусора, нелепые попытки скрыть оценки, eval’ы… Я представляю какой бардак творится при разработке, если на выходе такое. И, глядя на культуру разраобтки, я думаю “действительно ли я доверяю Яндекс, и не пора бы свалить на IMDB?». Да, там другой менталитет, и оценки некоторых фильмов могут быть не релевантны, но он хотя бы действительно заботится о пользователях.
P.S.
А после всех оценок есть кнопка “Удалить оценки или заменить их на просмотры”. Ага, так легко потерять свои данные. Она — единственное, что отделяет вас от этого.
Рекомендованные сообщения
-
- Рассказать
Не так давно узнал об кинориуме, попробовал и остался очень доволен, решил перенести свою базу из кинопоиска, все отлично переснеслось, подумавал даже об удаление акк из кинопоиска, но так и не понял как мне теперь отвязать кинориум от кинопоиска, если отвязываю от кинопоиска то сразу удаляются все импортированые даные(оценки, списки), очень страно это, как мне единажды ипмортировать даные и не зависить больше от кинопоиска?
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
22.05.2021 в 19:23, joka сказал:
Не так давно узнал об кинориуме, попробовал и остался очень доволен, решил перенести свою базу из кинопоиска, все отлично переснеслось, подумавал даже об удаление акк из кинопоиска, но так и не понял как мне теперь отвязать кинориум от кинопоиска, если отвязываю от кинопоиска то сразу удаляются все импортированые даные(оценки, списки), очень страно это, как мне единажды ипмортировать даные и не зависить больше от кинопоиска?
Вы не зависите от Кинопоиска. Удалите КП аккаунт и ничего не случится.
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
- Автор
-
- Рассказать
А можно ли мне просто отвязать аккаунт от Кинопоиска без его удаления, хочу иметь не зависимый аккаунт от Кинопоиска?
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
15 минут назад, joka сказал:
А можно ли мне просто отвязать аккаунт от Кинопоиска без его удаления, хочу иметь не зависимый аккаунт от Кинопоиска?
Отвязывание от Кинопоиска предназначено для удаления всех КП-данных. Если вам нужно удалить все КП-данные, то обязательно отвяжите.
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
- Автор
-
- Рассказать
Об этом я и написал, что теперешнея ваша синхронизация зависимая от другого портала, то есть импортировать единажны базу нет возможности, получается что аккаунт постоянно должен быть привязан. Думаю что не хватает одноразового импорта что бы остаться полностью не зависимым от других систем.
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
23 часа назад, joka сказал:
Об этом я и написал, что теперешнея ваша синхронизация зависимая от другого портала, то есть импортировать единажны базу нет возможности, получается что аккаунт постоянно должен быть привязан. Думаю что не хватает одноразового импорта что бы остаться полностью не зависимым от других систем.
Удалите аккаунт в Кинопоиске и живите спокойно 🙂
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
- Автор
-
- Рассказать
Жаль, конечно что не думаете, о такой простой фишке, скорее всего это пару линий кода только. Удалять пока еще не готов кинопоиск, попробовать хотел провернуть рассинхронизацию с вашим бэкапом (Экспорт данных в Excel), но тут другая проблема, для импорта назад в кинориум(Импорт CSV-файла) нужен «одно из полей kinorium ID, imdb ID, kinopoisk ID» но в экспортируемом Excel нету не какого поля «ID» вообще! Может можно добавить хотя бы kinorium ID в «Экспорт данных в Excel», думаю была бы намного правильный Экспорт, а то сейчас получается экспортировать можно, а вот назад импортировать нельзя 🙂
Изменено 25 мая 2021 пользователем joka
Ссылка на комментарий
Поделиться на других сайтах
- Автор
-
- Рассказать
Так как насчет того что бы добавить kinorium ID фильмов в «Экспорт данных в Excel»?
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
24.05.2021 в 17:31, joka сказал:
Об этом я и написал, что теперешнея ваша синхронизация зависимая от другого портала, то есть импортировать единажны базу нет возможности, получается что аккаунт постоянно должен быть привязан. Думаю что не хватает одноразового импорта что бы остаться полностью не зависимым от других систем.
Мне такой же функцинал нужен был для майшоус в свое время: нужно было с двух аккаунтов сделать импорт в кинориум. В итоге, оказалось, что все удаляется при отвязке.
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
- 11 months спустя…
-
- Рассказать
Подниму-ка эту тему.
Как тут уже выше писали, об обратном экспорте. Экспорт в CSV есть, отлично. Но огромная просьба, просто огромная, хоть она и идёт вразрез с идеологией сайта (кинопотерянск пнх): добавьте, пожалуйста, формирование правильного CSV-файла, чтобы его понял/принял тот самый сайт яндекса.., там где импорт оценок из IMDB.
И вижу тут как-то люди синхронизируют что ли, это как?
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
03.06.2022 в 13:56, Scorpion сказал:
Подниму-ка эту тему.
Как тут уже выше писали, об обратном экспорте. Экспорт в CSV есть, отлично. Но огромная просьба, просто огромная, хоть она и идёт вразрез с идеологией сайта (кинопотерянск пнх): добавьте, пожалуйста, формирование правильного CSV-файла, чтобы его понял/принял тот самый сайт яндекса.., там где импорт оценок из IMDB.
И вижу тут как-то люди синхронизируют что ли, это как?
Спасибо, но нет.
Ссылка на комментарий
Поделиться на других сайтах
-
8 июн
Bruce Wayne изменил заголовок на Импорт из Кинопоиска
- 4 months спустя…
-
- Рассказать
Добрый день.
Не импортировались «просмотры» из кинопоиска, а только оценки, и списки. Думал процесс будет проходить постепенно, но уже прошло больше месяца. А ни чего не изменилось. Где то писали чтоб добавить базу с кинопоиска данных в Excel, но эту возможность там давно убрали.
Просьба помочь что-нибудь сделать, чтоб продублировать просмотрено.
В остальном ваш сайт клевый, шустрый, много интересных фишек есть. Очень нравиться.
- Цитата
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
27.10.2022 в 09:28, Vlad Plasmius сказал:
Добрый день.
Не импортировались «просмотры» из кинопоиска, а только оценки, и списки. Думал процесс будет проходить постепенно, но уже прошло больше месяца. А ни чего не изменилось. Где то писали чтоб добавить базу с кинопоиска данных в Excel, но эту возможность там давно убрали.
Просьба помочь что-нибудь сделать, чтоб продублировать просмотрено.В остальном ваш сайт клевый, шустрый, много интересных фишек есть. Очень нравиться.
Просмотры должны импортироваться кажется. Попробуйте еще раз на новом аккаунте.
Если не сработает, присылайте ссылку на аккаунт.
Ссылка на комментарий
Поделиться на других сайтах
-
- Рассказать
Сылка на профиль https://ru.kinorium.com/user/338862/
28.10.2022 в 13:10, Bruce Wayne сказал:
Просмотры должны импортироваться кажется. Попробуйте еще раз на новом аккаунте.
Если не сработает, присылайте ссылку на аккаунт.
Ссылка на комментарий
Поделиться на других сайтах
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже.
Если у вас есть аккаунт, войдите в него для написания от своего имени.
Время на прочтение
4 мин
Количество просмотров 36K
Предисловие
Совсем недавно, когда началась эпопея с КиноПоиском, я задумался о переходе на IMDB — в плане переноса туда своих оценок фильмов. И желательно, чтобы это можно было сделать в автоматическом режиме, потому как проставлять вручную заново на IMDB свои 803 оценки фильмов не хотелось.
Поиски такой обработки привели меня на страницу камрада REDNBLACK-а., где он выложил, с его слов:
Простая программа импортирует оценки и добавляет в ваш список IMDB фильмы из файла *.xls, экспортированного с КиноПоиска
Простая?! Для тех, кто первый раз слышит (а таких на КиноПоиске, я думаю, процентов 80), что такое PHP, CURL, Composer — простая? За юмор — плюс в карму…
Вот как выразился пользователь Psyber с КиноПоиска, когда я ему предложил воспользоваться творением REDNBLACK-а:
Я, как простой смертный, не смог сообразить как ею воспользоваться, а очень бы хотелось…
Я расскажу что такое «простая»: это когда запускаешь приложение где два окна — в левом окне прописываешь ссылку на профиль в КиноПоиске, в правом — на профиль в IMDB и нажимаешь кнопку «Выполнить».
В любом случае — это лучше чем ничего, а REDNBLACK-у за проделанную работу — респект. Поэтому воспользовавшись, ну, прямо скажем спартанской инструкцией камрада, я приступил к переносу оценок фильмов. Вот что получилось.
Подготовка
Итак, сначала нам надо подготовить свои данные для переноса и установить на комп недостающий софт.
Заходим в свой профиль на КиноПоиске. Переходим на закладку «Оценки», жмём «экспорт в MS Exсel». Список с фильмами для переноса скачан, сам файл списка переименован и размещён в корень диска: d:kinopoisk_N.xls
Самая лёгкая часть процедуры выполнена.
Согласно рекомендациям REDNBLACK-а, теперь нам надо установить PHP. Поиск в google сразу отправил меня на сайт для скачивания.
Так получилось, что в тот день, когда я занимался переносом, данная ссылка на скачивание была недоступна, поэтому PHP был скачан в составе пакета XAMPP:
Запускаем установочный файл XAMPP и из предлагаемого списка для установки, оставляем только PHP.
Следующий этап – установка Composer. Скачиваем установочный файл (прямая ссылка). Запускаем. Composer спросит нас: «где находится PHP?». Мы ему указываем папку C:xamppphp, где у нас находится php.exe.
На IMDB регистрируем свой профиль или открываем уже зарегистрированный.
Создаем в своем профиле LIST (список) куда будем закачивать фильмы с оценками.
Раз:
Два:
Заходим во вновь созданный лист и записываем его id, который находится в адресной строке браузера — нам он еще пригодится. В моём случае id выглядит так:
Для переноса нам еще нужен id профиля. Что бы его найти, нажимаем комбинацию клавиш Ctrl+Shift+I (для Chrome). Находим сookies-строку авторизации:
Клацаем по строке сначала:
— два раза левой клавишей «мыши», потом
— один раз правой клавишей «мыши» и выбираем «Копировать».
Записываем id в текстовый файл для дальнейшей обработки.
Перенос
Начинается самое интересное.
Идем в гости к REDNBLACK-у и скачиваем его zip-архив:
Распаковываем архив на диск d:
Открываем Windows PowerShell и последовательно вводим команды, не забыв сначала сменить диск: cd d:
Вот где нам пригодился Composer.
А теперь всю собранную информацию будем собирать до кучи. Запускаем PowerShell и формируем строку-команду с параметрами на выполнение программы PHP. Эта строка имеет вид:
php application.php "полный путь к *.xls файлу" --auth="Cookie строка авторизации с IMDB" --list="ID списка для добавления" --query_format="тип запроса"
Разберём эту строчку — что и куда подставлять:
1. «полный путь к *.xls файлу»:
d:kinopoisk_N.xls
2. «Cookie строка авторизации с IMDB» (id профиля):
BCYkmNuQatCqhAmBX7k6158N8vu_26DTpFYfITPrIznWMrpFeLZipNznKBhXGoOJqsO9VoczRALY1fdNXMkkOPhoe9lua_kHr7xZMTTf-qkHiMOXx1HDif4eYyqGPKrYH-pnnWvFtrS7oBbbN87jUCyiG1cEIWHwSVsJKsYp8q1hl7aL0XZNIqQLT8X9sUhNER0VG
3. «ID списка (листа) для добавления»:
ls016952709
4. «тип запроса»:
mixed
(самый медленный, но надежный, процент точности около 90%)
Важно! Не забываем заключать текст опций в » «.
Складываем. Получаем готовую солянку:
php application.php d:kinopoisk_N.xls --auth="BCYkmNuQatCqhAmBX7k6158N8vu_26DTpFYfITPrIznWMrpFeLZipNznKBhXGoOJqsO9VoczRALY1fdNXMkkOPhoe9lua_kHr7xZMTTf-qkHiMOXx1HDif4eYyqGPKrYH-pnnWvFtrS7oBbbN87jUCyiG1cEIWHwSVsJKsYp8q1hl7aL0XZNIqQLT8X9sUhNER0VG" --list="ls016952709" --query_format="mixed"
Важно! Эту строку будем запускать из папки d:kinopoisksrc, поэтому последовательность переходов и запуск программы на выполнение, будет выглядеть так:
Кстати, если кто знает как избавиться от неправильной кодировки в PowerShell я буду признателен за совет.
Жмём Enter — процесс переноса пошёл! Осталось подождать. Моё ожидание составило 1 час 20 мин.
Выводы
Что мы видим после окончания процесса переноса?
Перенеслось 732 рейтинга (оценки) из 803. Не перенеслась 71 оценка. У меня закрались подозрения, что в этом виновато кириллическое написание названий фильмов. Но REDNBLACK так отреагировал на это:
Кириллические символы воспринимает. Улучшить уже не получится, по моему это и так идеально-возможный результат, с такими-то плохими данными у КиноПоиска.
Впрочем, нам и не обещали 100% результат.
Заключение
Я не являюсь специалистом в PHP, поэтому, если у кого возникнут технические вопросы — вы знаете к кому обращаться. Если кто найдет ошибки, или предложит другие (лучшие) способы переноса — поделитесь мыслями-пожеланиями.
P.S.: На перенос оценок фильмов (с изучением мануала, деталей, пробами, выявлению ошибок, консультациями) у меня ушло два дня. Если мой опыт кому-нибудь пригодится и позволит желающим, с учётом выше описанного мануала, затратить на перенос час времени — буду считать, что свое время я потратил не зря.