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

Пароль

 
Войти при помощи

Styx

Переводчик, Редактор

Переводы

4 произведения» 
Ответный удар
Джен, Макси, Заморожен
5.6k 0 52 1
Гетерохромия
Гет, Миди, Заморожен
11k 18 407 1
Оплачено кровью
Гет, Макси, Заморожен
151k 321 3.1k 8
Ледяная Принцесса
Гет, Миди, Закончен
153k 408 2.6k 12

Редактура

2 произведения» 
Её голос
Гет, Мини, Закончен
2k 0 13
Последний же враг истребится — смерть
Гет, Миди, Заморожен
4.4k 0 54

Награды

32 награды» 
10 лет на сайте 10 лет на сайте
7 января 2024
9 лет на сайте 9 лет на сайте
7 января 2023
8 лет на сайте 8 лет на сайте
7 января 2022
Создал 1 фандом Создал 1 фандом
14 апреля 2021
7 лет на сайте 7 лет на сайте
7 января 2021

Блог » Поиск

До даты
#прогерское #фанфикс #снэпшот

Есть у меня одна негативная (или позитивная, тут уж как посмотреть) черта: я могу зацепиться за какую-то совершенно постороннюю проблему и начать её решать. Как вы помните, именно так появился на свет 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МБ).

Теперь можно расслабиться и выпить кофе, попутно давя мысли о создании телеграм-бота, который бы создавал такие архивы по запросу.
Свернуть сообщение
Показать полностью
Показать 20 комментариев из 26
ПОИСК
ФАНФИКОВ











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