↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Styx
22 апреля 2018
Aa Aa
#прогерское #фанфикс #снэпшот

Есть у меня одна негативная (или позитивная, тут уж как посмотреть) черта: я могу зацепиться за какую-то совершенно постороннюю проблему и начать её решать. Как вы помните, именно так появился на свет Fanfics Extender :)

На этот раз мой взгляд зацепился вот за этот комментарий:
Можно ли каким-нибудь способом целиком качнуть диалог в каком-нибудь человеческом формате (да хоть бы и в CSV)?
Длинную переписку листать невозможно, даже если попытаться целиком загрузить.


Как вы знаете, в блогах существуют посты с огромным количеством комментариев. Если нажать княпку "Показать все" (комментарии), сервер долго думает, и выдаёт пустую страницу. Единственный способ увидеть все комментарии — долго и нудно нажимать княпку "Показать ещё 20 комментариев". Для треда техподдержки (8577 комментариев) пришлось бы нажать 428 раз. И это если ваш браузер продерётся через уйму скриптов, метрики и прочей обработки нового контента. После 150-ой загрузки пачки комментариев мой ноут с Core i7 2.2GHz/16GB разгонял вентиляторы так, будто решил взлететь, а время загрузки/обработки каждой новой пачки стала занимать 10-15 секунд.

Конечно же, я не кликал "Показать ещё 20 комментариев" вручную. Я написал скриптик, который заставлял браузер проделывать это за меня.
Если кому интересно: PHP + Mink + chrome-mink-driver.


Стало ясно, что нужно искать другой путь. Прости, javascript, но тут ты всё портишь.

1. Скачиваем изначальную страничку, на которой 20 комментариев и кнопочка "Показать ещё 20".

2. Чистим её от рекламных блоков, посторонних скриптов и стилей, и разбиваем на две части, «верх» и «низ». Между этими частями мы и будем вставлять загружаемые блоки с комментариями.

3. Начинаем загружать комментарии по 20 штук и сохранять в отдельные файлики. К сожалению, мы не можем загружать их, например, по 100 штук за раз. Родное API фанфикса (которое и обрабатывает нажатие кнопки "Показать ещё 20") отдаёт максимум 20 штук. Причём, чтобы загрузить следующую пачку — нужно знать ответ от предыдущего запроса.

3.1. Чертыхаемся, добавляем задержку между запросами, одной секунды должно быть достаточно :)

4. После загрузки всех блоков комментариев — склеиваем их в обратном порядке, вставляем между «верхом» и «низом».

Вуаля. Наш снэпшот готов. Проходимся по нему «ластиком»: убираем онлайн-статусы; исправляем ссылки в текстах, чтобы они не вели на прокси фанфикса (она будет отфутболивать).

Теперь самое главное: убрать из полученной страницы загрузку скриптов фанфикса, оставив только стили. Полученная страничка очень шустро открывается в браузере, ничего не тормозит и не лагает.

Опционально убираем аватарки, чтобы не грузить сервер фанфикса кучей запросов на картинки (при первом открытии страницы).

Держи, pskovoroda: архив HTML-странички без аватарок (≈8.6МБ, сжата до ≈1.1МБ).

Теперь можно расслабиться и выпить кофе, попутно давя мысли о создании телеграм-бота, который бы создавал такие архивы по запросу.
22 апреля 2018
10 комментариев из 26
Ластро
ReFeRy, шельф можно считать стрес тестом. Если он взлетит, то что угодно взлетит...
ReFeRy
Зато даты теперь отсутствуют: http://prntscr.com/j9h61d
Адский Бетономешатель, там ещё и кнопок "Ответить" и "Изменить" нет вроде.
Styx
Да, кажется.
Адский Бетономешатель
Даты проставит js скрипт, когда загрузится вся страница. Управляющих элементов там нет, ими пришлось пожертвовать.
ReFeRy, ещё можно пожертвовать onmouseover/onmouseout на никах (всплывающая плашка с инфой о юзере).
Styx
Так пожертвовано.
ReFeRy, ой, точно. Тогда ещё можно убрать у span датой класс "uptodate" после первого прохода скрипта, обновляющего (устанавливающего) время. А то он потом каждую секунду по всем 8к сообщениям проходится. Ну или убирать у всех, кроме сделанных в текущем часу (или «сегодня»).
Styx
Я об этом, конечно, подумал, но поленился корежить js.
ReFeRy, это, кстати, и для обычной версии подойдёт ;)
ПОИСК
ФАНФИКОВ









Закрыть
Закрыть
Закрыть