Учимся писать шаблоны на GET. Объединение картинок в PDF. Пошагово для новичков.

Hannes

Client
Регистрация
03.02.2016
Сообщения
548
Реакции
280
Баллы
63
Привет. Этот гайд рассчитан для новичков, которые только знакомятся с возможностями ZennoPoster. Мы научимся:
  1. Снифать трафик сайта
  2. Парсить на GET запросах
  3. Распаковывать архивы
  4. БОНУС. Делать автоматическую конвертацию SVG в PDF-файл

История начинается 1 сентября в 2 часа ночи. Пишет тетя, которая работает преподавателем в университете.

AD_4nXc-mGOsAMMGDqXQWMZ_GkuZ-dnYnJiR-2FWQutENuxoC1rxwgDRoxw8DVyUL-r7lVlf7A1V8ddpmfVEfTFfykVxsqkyaRzx345HbPaHRcRbJIR5EtlkICggvZ_a9qhyKjPDMSgWqGO2pC2aFDotMAqLy1KI


Итак, вводные такие:
Сайт: urait.ru
Задача: скачать документ, который недоступен для загрузки

Нам потребуется:
Firefox - ссылка
ZennoPoster - подойдет даже Demo версия

Устанавливаем, если не стоит, и начинаем. В конце будет видео, если какой-то момент будет вам непонятен - посмотрите его, возможно, там найдёте ответ.

Первым делом заходим на urait.ru через Firefox. Регистрируем бесплатную учетную запись. На сайте есть большая библиотека. Сайт позволяет только просматривать документы, без загрузки. Часть материалов доступна бесплатно, а часть по подписке. В учебных целях мы будем работать с бесплатными материалами, чтобы не покупать подписку.

Я выбрал для примера “Дедуктивную и индуктивную логику”


Нажимаем “Изучить”. Листаем страницы и видим, что они подгружаются.

AD_4nXd0p3emvH4c6fyFu1PLkkTc6V9yhEsv1Zo75OwswoGiM6ztZtiRoG1gWFRhDv0PXDaJgF_b1KfOaRODX9dO71mLlKz9i7jxI95l6zeYuSy_2CU8dDaHazUUQlyX0Zl083365jsYAkcPEBWg-uii1hRj-4Y

Пробуем выделить текст - не получается. Тут либо защита, либо это картинка.

Нажимаем правой кнопкой мыши на страницу книги и видим “Открыть изображение в новой вкладке”. Нажимаем.

AD_4nXchu4Vm5w1h1L1jOw0iIsltwMP-4qGes3k7P4fzATNiQ0PolM4-rc63VXB76TFw8sSZ3XVnXt5ovuvXNWgD2mZL1Tkdlr7NK1mSMfG0ICEsNZ7dO8NdLDZBQDDjIGqL3VyF1X4pCq2cIeol_3IJpppo8Ymi

Открылась страница книги (документа). Стало понятно, что нужно сделать: загрузить все картинки, а потом объединить их в один файл.
Руками скачивать каждую страницу долго и муторно. Использование программы автоматизации ZennoPoster позволит сделать это быстро и просто.

Смотрим на url адрес открытой страницы документа (картинки) в браузере:

AD_4nXeTgHODN-MsvsRXp_NPqLI1ZuoNtcp14U9i5f_KEenrUDZFoyj1fIFgeeLmQuPp5dUu09twWZbV5zyyZgw5yFOddPkBFcqiz1ptghUE7hbkyjnq9FuwvRopmMllsuemb85qV91KisaZ5-_iMeD-QAsLsuSg

Видим, что адрес типа blob:null
blob:null указывает на временный объект Blob, который был создан в браузере, но не был загружен из какого-либо url адреса. Этот объект существует только в памяти и не привязан к реальному ресурсу в сети.

Нужно искать другой способ скачать. Открываем монитор трафика в Firefox (ПКМ - Исследовать - Сеть) и смотрим, как подгружаются новые страницы.

Если вы никогда не пользовались снифферами / мониторами трафика, то посмотрите два этих видео: первое, второе.

AD_4nXeF0DlDXg8LuQSDS7I2okWmAmehtZeWIprU6LxY_VLleYtaeZDlTf6PBl3zXXpvha8w9K0VcYaop1YyvQfqZzi9XSz1zqk5U-5z0g9qCldWQmDpGvlwkTEkUyE4b2AVfykgv7UhssFtP_9fV_tKKubu527t

Видим подгрузку страниц документа. Это GET запрос, имеющий структуру:

AD_4nXcymWskzYkrrWBBXqZn2Dk7PMz0x8Bmio-y4ORlINDzai936NyYp8xRknH3J4_SL1cx11KAjhuF0l3ficOe7wGmhHzvqIqpkMxZWgdA-Edi-u7NCucX-3_dx-BBzUbmA49DceeeuafDvLfr0ejNwn4nwspk

https://urait.ru/viewer/page/0D0C56B4-F0CA-42AA-9588-CA85FB74A961/11
https://urait.ru/viewer/page/ уникальный ID для документа (учебника) / номер страницы

Получается, чтобы скачать все страницы учебника, нам нужно знать уникальный ID документа и количество страниц. Возникает логичный вопрос: “Как получить ID учебника?”. Первым делом поищем это значение в коде страницы. Копируем уникальный ID и нажимаем в Firefox “ПКМ - Исходный код страницы”. Вставляем в поиск (ctrl+f) значение ID и ищем.

AD_4nXfUs-b53CLTgIvQpwjcNawwp1UcakN8EapOwS09zPfuLZyRbj3V5t_FRjgd9tL9Df4EeSYU_BDkx13nQx-exzElOclVcjpIHkndUAn0dpVW6cnYIj6DU6889PIlzbP8ODXjiH_dIyW9m9pQ41IE23j2tqdR

Находим несколько мест, где встречается этот ID. Чтобы не делать так с каждым новым документом (учебником) руками, мы научим ZennoPoster делать это за нас. Оставляем вкладку с кодом открытой. Она понадобится нам позже.

Теперь нужно научится получать сведения о количестве страниц в документе. Давайте снова внимательно посмотрим запросы в мониторе трафика. Находим вот такой интересный:

AD_4nXdFvLBc0pZTEO9AsMH3zq4hgG6_OtTMOEkgYojyC0HsP-ZxC1_y4N1n3P5p_jGnW1XPTQyn69TdRDad3OLLOa-wtlF430SR8a5sMpNn2wCwBVtTT4q5S9hyJKyyhAgx8fgerJ6xAQULSTrUdHs2hNfdrkZr

Посмотрим поближе:

AD_4nXd-hqebAJdvhjqS8evCu1crdYOwQYDuLe62XTXaBQKFD-j2fwzagHoBjsDxms2fwHPT3hd-2m8sAZ3-RpfxN2XaX4ewNj8yCUpHNBAw7UKU-f-vd21DpdzPMDhuLInLY5S_Je9keGIO7dwrjiyQcO6FVsbs

Мы видим название документа, описание, количество страниц (page_count: 287) и остальную информацию. Это то, что там и нужно! Теперь мы можем перейти к автоматизации.

Переходим к написанию шаблона. Запускаем ZennoPoster. Подойдёт даже бесплатная Demo версия.

Сразу создадим нужные переменные:
UraitRU_Link - ссылка на документ (как в браузере)
UraitRU_ID - уникальный ID для документа (учебника)

AD_4nXeEBElqB23Bhu0GTiz2bb1Ra9xV2vGXTMltNZ4MmTKlFseylm52Cv_h-JsU0mBVbbiacYWQu8W4PYh5DC-3PdmttGO-rrHWYL-CqCQuuh65W5sl8CE19ySj1xhWELKrKNTs0_Ac007gdp_I6G53AAXEEM8l

Теперь создадим удобные Входные настройки для проекта. В будущем в них мы будем указывать ссылки на документы, который хотим скачать.
Нажимаем Входные настройки в меню действий:

AD_4nXdZ3ULufIjceXRdQv7Q6FA7kjZWadPHdNo828NFhNIMGR4Hgc8ZwerFDAfzAHhduQPXRXmBXeIornxSObz9ud4EygZmKSBdKL3R_z7Tm-_nROxiX0Ub1A70JRfI6-gb-BRx3B3GZq-HtW1DtIgVo2iRoxmD

Настройки появляются снизу:

AD_4nXeuAhUvtKdRS6RJYMroSUr8Bz4Bdhi9ZfOWooXcAUnvzu7z7SQ3bluhoBOJwpKOfUoNXnIoPiJjwuDkbo6T8QoKl96Es-hsys08c0RIOodswZzcF8oTSpKF6yz5kyZSMvLZpPmXjSksfz8l6OPzByX0hgHI

Нажимаем на них и указываем имя поля “Ссылка”, тип “Text”, а в “Сохранить в переменную” выбираем созданную ранее переменную UraitRU_Link.

AD_4nXfgujm5Wwrq6k6vCMWygjQ4uuppZHVvf6J6dIwmVYF4-geFHfvbXzZPnNB_-Hm3kmAEHF8miqsOAf8Vy0RRpbRxjFYW3sV5hCq6VRkB7h6eAZjRSngGvtqwtBRDVDKvDQzq3-yzpV4W5nkc4UyJiN78uZiC

В “Значение по умолчанию” указываем ссылку на выбранный документ для скачивания.

AD_4nXfRY0XueVmdNxOLCfDbMiHlevSCiAKun0MB3Ov9ghTqwGDUWeG4g6KJiV33jnHpadpv-JdJBAFZ57N2twQxuJG1qwIVZ8p4zgVKidLsvgrOQi9QcE05EuPMBV0v8j9Cra-QjiqGYDXX_FrJblw91hsL9sVG

При использовании шаблона в дальнейшем это будет выглядеть вот так (нажмите на лупу справа чтобы посмотреть):

AD_4nXcGU9AXk4W3nEwmeVDWvYiNMMhKGRy_zrCmLrXc-Rn4V6Bqo04x3DUamsiLu_Ak3t5Su0mTljesHdDOZK6-NpbrYv9euTeFL6kGSNsOqHAvYiIBK1Ey7yDLoYO-yga_wBLfdFycEhVDtMse0ijAwirJqgA

Нажимаем “ОК” и окно закроется.
Заполнив Входные настройки, нажимаем на крестик (выход). Всё сохранится автоматически. Видим пустую рабочую область:

AD_4nXe76I3QZTpHaDcBjRin2Ak9Nr88DaFmbugJ7DXgB7yR4VP4IBGCrkux6NiK00zdGrSffWN071aGnPOtPBMw1LkGzQkS_kWKhC3S0fGFqK1DJroUSc2Tmh7Qa3-D04q9ED5KRFZ0SsbhT62B0wD67IA4Y7rB

Теперь создаем первое действие в шаблоне (нажимаем на GET-запрос).

AD_4nXfYbZgkqg0Yyqz5ac5JITvsYjK6dT_IOkz_joI8uckWilKh3a65ukeCkiuVe8BhBC3vx_FWzAR-YogCV2xr86W2oN5XfqIiiygHL_99JCi5a9Z-lOvRgAO8-bBMeNYlBM9Zvqx-BhQillfKMGcEc7hvvLHI

Сначала нам нужно получить код страницы документа, чтобы из него извлечь уникальный ID книги. Напомню, что ID нужен нам для загрузки всех страниц.

AD_4nXcApMhV7w3hF9svY3gZDn6qHYXLVCghPSo4mBk9t1H6r0EGb7m5m18nokSG2w1XIcuutCSNiYR3wxK16472Y0tHmnNhiGshMbzG9T8d8Ew3kwjiOI3CE9V0ycG5q55OVLaavr6SS5zemrrJFMsX5aetxTk

Вкладки “Дополнительно” и “Прокси” оставляем без изменений. Внизу в графе “Положить в переменную” пишем GET_UraitRU_Link. Так мы создадим новую переменную.
Выполняем действие (выделяем GET-запрос и нажимаем Далее). В переменной GET_UraitRU_Link появится HTML код страницы.

AD_4nXc4vvhkvGd2RqxOTqmNvx2xJrZkMQbLdXEH4t16ZOkGrC5lD5BaKpnmKiCTI93x2Q62NipVJ3J7VzTaW43O3zYwyLAMY7ut9dQG2O1YMbW1JRmEBn2B6prXd_e9u2PJEQLCiUqxyZ9AKRzTf50stZ3NB5M

Теперь нам нужно вынуть из HTML кода, который мы получили, уникальный ID. Вспоминаем про отложенную вкладку в Firefox, где мы искали ID в коде. Ещё раз указываю скрин вкладки которая нам нужна.

AD_4nXdGii3sN31mneYRtnUMc5JWfjIEGXvwXkdYtt777iJyFDVdTFtYcAk6yknJFxhcYkxdVNpYjZy2DTvdmAWIMO8x_05d-svGL7cJrTybP22vo1Wb9npXfGtMKtFy9QPXaJM5kbRKWLcxwE6yD3XDarvhGkwI

Нам потребуется создать регулярное выражение (гайд по regex) для поиска нужного значения в коде.

Вставляем:
1. “<form action="/professor/task/create/” в “Перед искомым текстом всегда есть”
2. кавычку “ в “Это идёт после искомого текста” (справа).
Нажимаем на “Тест” и, если всё было сделано правильно, мы получим нужный нам ID (на скриншоте он уже есть, в правой нижней углу - 0D0C56B4-F0CA-42AA-9588-CA85FB74A961).

Сохраняем текст регулярного выражения (?<=<form\ action="/professor/task/create/)[\w\W]*?(?=") , оно понадобится нам дальше. Само окно закрывать не надо, просто вернитесь назад в зону написания проекта ZennoPoster.

AD_4nXesASnMtfqIYMGxscHHj3Yl4TNjJY_N5JiYWtAsSUus1nNJJim7veLI75x5dB3wwf7LZUvNDaq5Ws95XmHI4t59ACAYucpAU0WCeQ6ISInKwXXqNCa9OPuYPoHkt99J4FzxM8Hnxl2V74uhORi7hKuNT9Dy

Теперь автоматизируем получение ID из HTML кода. Добавляем действие “Данные - Обработка текста”. Выбираем действие “Regex”.

AD_4nXecUAFZWaf8Joa48DtPkpfwDtiOxuNNoVpuakQXgdH9vJQ9e-5yqTmPiRjFBmnXjf4W3KfgMunfglmyj-wLfhpwxn9Bd5AvONXrW5AEX_SDmDUOBW01M486xtMqnvK7uTEgtnFFvnCHbnTOodeRqtJLtpgz

В поле сверху вставляем нашу переменную с кодом GET_UraitRU_Link, а в Regex ниже наше регулярное выражение (которое сохранили до этого).

AD_4nXek6ro_pA5PqOK9LeIB6js4Z219BuekbRAkREoMP6nssrTbRNXn20dV3vhIALOGGBuVZXH4swftbuiJknUHD7FV8E-JdHtERKDc17F0uqVNuJyeOugVgBH2CQWkPyzikqXgqhs_Z1CtehZBCHJOG4nBIO4_

Теперь выполняем оба действия.

AD_4nXevkPj2QsySMuGl3VUFEBuiDruwszYKfZ5FbQ5uvFTSvVRsPatx5l3Ioe0N2QhXABGSX9M4y5__z-JrpvwDCdqsGbMhLHD72CqaVAZ9nPo2mx53NIh0SCQLQ9AJCTBrfYO488nwN3CatxeodF-6QBg2VpYc

ID мы получили. Теперь нужно собрать информацию о книге. Вспоминаем о том запросе в мониторе трафика Firefox, где была информация о документе (название, описание, количество страниц). Теперь у нас есть уникальный ID и мы можем получить значение и оттуда.

AD_4nXeLdTM2hqw_fxpRA_lgBF4Zmy4cphy3AaVpFr4i28mURzHjm82lH2esHX61mcAPiLwW13VQ_Fp-m-bwrNxeCNB6_fWkvWpgVhLjDeFF0qpMNb-D4eH9ky8zN0JfgxlEQXPBFEhQ7ukHomT6K7aPXEwk-YK-

Нам нужно создать такой же GET запрос. Обратите внимание на структуру URL:
0D0C56B4-F0CA-42AA-9588-CA85FB74A961/10
Вместо 0D0C56B4-F0CA-42AA-9588-CA85FB74A961 нам нужно вставить нашу переменную с ID документа.

Создаём третье действие, снова GET.

AD_4nXfLWzaUedZmvY3Yl472R-T4YKeUv8aHYY6o0b0g4y2K7SZ6XO45iCG5Vr6qjoJu1B8lS_oy1zRw5ShCIXBobuX8O4uuOxzHW4tdV_LBKwccEOpn5h1Wsfxed_Oqb96ObpIw-BHg8aFMnek7q_cB7X8-gFqJ

В Referer вставим ссылку на наш документ. Создаем новую переменную GET_UraitRU_DocInfo. Выполняем действие.

AD_4nXc9I1rRAe2jGgQ7FXHI10QfSRPioyRKIQyl8K4eMe6b47Cp_aQ84BINhTyvoTCYzcZDFYeXLQJjjLa7r4gN85XzqXsjXHf6WJJgWiZHqzhdIKDQuS2CStgYlgL3aBfVFdleRi8sKpzEUKVAByu0mxikgUIv

Сайт отдал данные в JSON (тут подробнее что это https://zennolab.atlassian.net/wiki/spaces/RU/pages/488964124/JSON+XMLid=ru:json_xml). Их можно удобно разобрать на отдельные переменные используя действие “Обработка JSON/XML”:

AD_4nXdlqJY-2q89PNDqVa4sYDyVJv2Kj-X3MMxklTU0Or3BC6R3xsZ3IFv8j_WT0sAeKBPmTuBSXOR2QyXn0GJ9J30PM3lo2g73Z0crxmlo70CV3x-9VdYbPahPX3XCyePiCytpcBbZO4GBTGElGrWyY8ZUPeT_

Указываем, что это “Парсинг” и тип “JSON”. Вставляем нашу переменную с информацией о документе в поле:

AD_4nXcP1K6cazhN_dST4ZEbs-Z9TWPs9bc6WgeO8R2TrLK8MxZAEGCAw1nQEZWO8zllEkIyPt4VxA9a0kO0y9Zj7DoznHRDTZmqoa3Mw9EupXGwQoLqWQ51F7x6mHb0rzQ7xAfoCCQFoyzpaYAySOLjz36q9TMq

Выполняем действие и смотрим в переменных. Там есть вкладка JSON. Переходим в неё.

AD_4nXeoJ6PmMiPEyQ_CACNQQC9TojYZT4Vgub2we_HnsmL00eCq-lmx3JpjYSNwYuR41gIX8fiqZ5G41L1VWmQcHDcIM5wZCwOKCtPjx44fN5dgCz7MteXkJX8WiSxEx3dFc4U1eRyw7oLQ3l8fz3SHAS6RQa5v

Поздравляю! Теперь эти данные собираются автоматически. Осталось совсем немного. Нам нужно последовательно сохранить каждую страницу-картинку на компьютер.

Создаем действие “Обработка переменных”:

AD_4nXeYZYn0z2EwvigFn4qvwmeO9f-mYSnAU5PK1HWzY8wO5mSOgPoVM7UTccvPDkZqHA636k3Zw8JEyXukRDT1uK2yICnSk7CtQz-DbvoG2s7QJ8fTnsbYOUbRdUL5W_e-4qMn-ioIgHi1bFvDDBLRavcfgjKu

И нам нужно создать переменную, которая будет отвечать за счетчик страниц (это будет номер страницы, начнем собирать с первой страницы). Назовём её couter_page и установим значение 1.

AD_4nXdlCcE5KyiTrGGZtNLBsnpXis_YgyIIdEgCRtdkLt9IxPF508XyHSC-IRabXyb7s5mn4DGmkT05P83sAwcNm3JzyCMpvVjfLaglxDagunvFD-XODUO08IqHA9lck31zLDI5Hs0Mbr2R0kS2CJVKXCA1q0V8

Теперь нам нужно загрузить страницы (картинки). Снова находим запрос подгрузки страниц, который нашли ранее. Напоминаю, что выглядит он вот так:
уникальный ID для документа (учебника)/номер страницы

AD_4nXdzuqU02acLVO4TFjSSpYpJJF5a3j238hElJbFC3J13QFDb5PZmlbKqO2cz6IwwzogTdIDSbjAzLVcmOJCfywwV4dGgWUjqyVYNUGtuZsJyrbzsmqFyIl_eS-oC5oH8C07KYXyY7tG6s1k7qqjHpoFtqDUJ

И нам нужно снова создать действие “GET запрос” в ZennoPoster и заполнить данные по аналогии предыдущих запросов. Указываем переменную отвечающую за уникальный ID и номер страницы.

AD_4nXenRjcEQiq1K1hVZUDk8HcC_TLVQKFzOZM1F8CJ2M81sx_YjnqZnYHLBv6r10LUPcRyTRd-TrEfRsarcwIZ4ksE-lByFgE-yU_0ODeZ4D6yl57Gn3gHZlxxS1CP95Nc7oCUk0NiGNjUIpUJWrWVqqfbNh9c

В Referer вставляем переменную отвечающую за ссылку на страницу книги.
Указываем, что загружаем “Как файл”. Создаем новую переменную GET_UraitRU_File в которую будет сохраняться путь до загруженной картинки.
Давайте выполним проект с самого начала.

AD_4nXf5gxYg60bEhYRn11-Km0uwQjT3fc5e3Xyp4UAS1zCJjjrvegZm4rlMsLOeAgWPcvg_3Nu8OdBwWCpi5o-FEjtSmireFkvq3-acHZdmUCGUaGqvb9NxC0Lm50FBbDSYGFr47cTJYOZsQT2LjGFot-gkdsdH

В переменной GET_UraitRU_File мы видим путь до загруженной страницы нашего документа, которая уже находится на нашем компьютере:
C:\Program Files\ZennoLab\RU\ZennoPoster Pro V7\7.7.5.0\Progs\Trash\page_1.svg(1).gz

Обращаем внимание, что в данном случае файл загружается в архиве .gz. Но если попытаться его разархивировать, то программа для работы с архивами покажет ошибку. На самом деле ZennoPoster ошибочно добавляет расширение .gz, но на самом деле файл является просто .svg картинкой. Не знаю, почему так происходит, возможно это особенности работы ZennoPoster или веб-сервера Urait.ru, который отдаёт нам картинку. Если вы знаете почему так происходит - напишите пожалуйста в комментариях.

Небольшое отступление:
Но если у вас скачается в реальном архиве, то распаковать файл не сложно. У ZennoPoster, к сожалению, нет встроенных инструментов для работы с архивами, но сделать это можно благодаря бесплатной программы 7-Zip. Если у вас нет её на компьютере, то нужно установить: https://www.7-zip.org/

Вам нужно будет “подключить” 7-Zip к ZennoPoster. Делается это просто. Выбираем действие “Запуск программы”:

AD_4nXfWDTstO9Jv9WAIcKQUI_2IsIqSABUMyDLxIQriq-F4yJBzOnE9ggcYAl9QcBhaGO-mxUTKDhcXhT9oA9kJzRzsh9ZyzJdZTcxsn-xwlzLj_op6NHC9b37Zbkkn_C4C9__Abydd8DaVGA1R2y5G93ne1Eoa

И вам нужно будет настроить действие.

AD_4nXfvnZ3bwShVNUA7p92vjl1T0ZL1NIR5fkyvsa4XFVyi9GZ2hBPYE2DfFQhM_7XpxLumd5dIvoAa3ZkVJ8mTz-lvarBswL1fKvE5d3oQ7AuiGBMQKUCTwCJrRaPhDK7-70qbU8I9uWE_HUKkTwVUBk3zOyy3

Например, так:

x -y “d:\123\file.rar” -o“d:\456”

Распаковываем файл d:\123\file.rar и помещаем содержимое в папку d:\456.

Обязательно экранируйте путь кавычками если он содержит пробелы или специальные символы (например скобки).


Но в нашем случае распаковывать архив не требуется. Только переименовать файл. Продолжаем работу.

Конец отступления

Мы скачали файл, но нам нужно поместить его в нужную папку.

Создаём новое действие “Файлы”.

AD_4nXdw_FpZXD512PkiGXKpM4o6EUmUTYbt86p1oTRl55PTBxSW7BboutrFRbEYNhS1NEqli7LwjjB_SZ8jL9BEz9ZRS5fg1hYR2Zf4FOv3P7zEkC1G7f_r2We9dTB0xLsC86EEEtdGbnM0CxvBU7vXjivgm4mK

Выбираем “Переместить”.

В “Путь к файлу” вставляем переменную из предыдущего GET запроса.

А “Новый путь” нужно заполнить похитрее. Мы ведь хотим сделать наш шаблон универсальным, чтобы он мог загружать любую книгу по ссылке. А значит для каждой книги нам нужно создавать свою папку. Немного отвлечёмся от заполнения действия “Файлы” и сделаем это.

Например, мы хотим сделать такую структуру:

Папка проекта
---Документы
-------Книга 1
-----------страница 1
-----------страница 2
-----------страница …
-------Книга 2
-----------страница 1
-----------страница 2
-----------страница …

За папку проекта у нас отвечает переменная {-Project.Directory-}

Папку “Документы” просто создадим самостоятельно на диске.

А вот название для папки книги мы можем взять из переменных JSON. Помните, немного ранее мы получили эту информацию? Копируем переменную отвечающую за название документа {-Json.title-}

AD_4nXcPr2wdIQP-0Mr_njP-NvqQlN9R13jlqp9ztuSxfhMZ_-BIDKd2h6uYQfGHZZtoCqV1R4sg9AH8dqpOMGMbGCwZ8mCIP8ZVe_dZImXRgw3tN6M0Cfe_G7v9u_lJgm6ZhLYo9nSsw50ScRS_grIv1iu16npH

Итоговый новый путь для картинки у нас получается такой:
{-Project.Directory-}Документы\{-Json.title-}\{-Variable.couter_page-}.svg

В качестве имени файла я указал переменную счетчика страниц {-Variable.couter_page-} и указал расширение .svg (без архивного .gz).

Теперь вставляем наш новый путь в Файлы.

AD_4nXe1hnE2qK8MFiI_ZiIPJRE5qdSTmMvlEISSJW7sQ-gX5Gp85p29IRaPOZ7RmFvzFLvlnmwgQdtUwughtHgdeaJizvfH8JGquSzs9ugEOPqFH87MHz_VA1auPyQz6oARsANS1IDJaSgLnM6_P-iQ_mG8vZfB

Теперь нам осталось загрузить все страницы. Т.к мы знаем сколько всего страниц (эта информация в переменных, вкладке JSON):

AD_4nXc2w1uSbuKMB7Dae_4wpd6A4qJF-lZ27PlevdBJz5tIE7i8uZB23c9nE7eGzuND10w2RE_lb-gy1IXLJWDpT0HOku0m6qAki1BUGg7WbY73trDNgqW_TWI1ILMgWUkVkAcD-mzEwS3oMQSvdKEr-8AwANZX

Создадим действие “Логика - IF” и сделаем проверку, достигли мы последней страницы или нет (подробнее как работает действие Если c примерами).

AD_4nXewdHLtLImV3EjPN9xVZgm8hlNBbUDgIaOsiwbdPCRHBWslX84IhEXHJl3HKFa0O2HMiSmTKnTy7jzeEXSb9tP_KL4s6_chFP0Aa-bexEGE21CFisryuExQ7e3uT3lI6_we5pNyhWZMvlIoVyXvOGS6ojIR

Если не достигли последней страницы, то нам нужно увеличить значение переменной страниц на 1. Сделать это можно так:

AD_4nXeaZDj9BmFv7glzkgcltVS6_fNfjtnFLbvWYsrEjDPdGhH9UltVjldjsA32I4Fmyh_BbTVB8FU2jCwBY0W828ppDAXp09zs6g_v_q67QLllmoBmWiYQ3HTOCVUnvlrxFdSQNKtHqmFzKC-Fej8n9nB4Se1w

Выбираем нашу переменную couter_page и увеличиваем её значение на 1.

AD_4nXefCEN5pm92yvKpArX2hq4sP7afbOKuMd1_XdE7wUKvSiygCDgtyjSE-syXKnqeGyuF8bSvCDbRoCKnIiYoAWkHGKp46H6VHkBViP1a4x39N6xvz1qSlOjktRt3FxefFLTFSrOTLwjV_s9d9fznCtG-p7sH

И после увеличения значения на 1 нам нужно загрузить следующую страницу документа. А значит тянем зелёную линию до действия GET которое отвечает за загрузку страницы.

AD_4nXdxbqtU6saJHAxtCKQEbH07aYHS0mURcW1nmpqdE_zbd3I5xcH0kcN6gO7rLtY9HOOYR9IY7xl8_GI6mNC_GR6Wnwby_iezzsjrGZ8e-hvKpukupGVcZ3yifJJlBsbSfG2zbDl1ySuA6YYUBCx9NjPyxWs6

А чтобы всё выглядело красиво, то сделаем оповещение при завершении загрузки книги.

AD_4nXfAKZdPn3COmN43VuwRaHiaOwIEV-vHmQVJvkmMmw9AewF6NeuQzcA180-wKIqFWGXioFclDO5teQ7ad7A612YARd57fgnPY2e_GNh-zQRE0gWD-WBquQMB0dPYYjcTeKFLpIJsQi6v1w1rv-_reA338j1f

Если значение текущей загруженной страницы равно количеству страниц, то показываем оповещение, что книга загружена.

AD_4nXeeOg49nvMXbv0b_8pNjLMzdO3YhIyLfTCkdb_yh9ihVSHHX9i3CSxrIWgGjjipWu1q6KDfJngunU9D_IcH5qcnkpvH2jlr7mQDSW8guoIgYx7Z5DjrmF-4wJ8vc7triQSVQnri3sLpzBXl7p1rCs_5xuWm

Проверим, что наш проект работает. Запускаем с самого начала.

AD_4nXd8sZuaHrtzGJXXo158_ehgiq80ulOLo8zxSwoJdy-lVCaqgrRv1PQQLzUxTQTllaOIKyBGmq8mD8L8fdwk881cEBroyV052THtSWbCZccPV60ddTxkWCVdTmxfn9TkBQ2xWTVrXnOsucFzzyBjvZOwxnkn

Переходим в папку проекта и видим, что файлы документа скачались.

AD_4nXeG5HV32PqCaktq720nI49cCBCcG9NAPBZosbrZqbc1icxPwvAFcfnsKwtFdRul-jufRbs6-93ffW2xsxFog7jBIpye9-RAdWDX7cRZEPlK6xwkmIKP9g1mlYdjgl9FYSUkwOpQfSOuT16ifWCT5Rh2j40Q

Пробуем открыть случайный файл:

AD_4nXfbnWz-i2Xa29ZbRNp41u9zhB7sHAfUL1cUUBtGFIqRYKfc5yx7Pwf5966RGyMN-v7R-lx7yYF-_12auQcoEU-_Xa9XoeiNMkhaKxc5W3prAsCVrNqKuaG00LgS34fgve51ADXH0RmSGJaM9vGLXQy2_HM

Файл открывается успешно.

Если нам не требуется скачивать сотни документов, то на этом моменте проще объединить страницы в один файл используя бесплатные онлайн сервисы. Автоматизация всего не является самоцелью, важнее быстро и эффективно выполнить задачу. Найти такие сервисы можно в яндексе или гугле:

“конвертировать svg в pdf”
“конвертировать svg в один docx”
Например:
https://tools.pdf24.org/ru/svg-B-pdf

AD_4nXdzroWkreHp8MXRmiD0tkP9LgF-yR1r7eR0SlqACJnFBrPfGzscvyN6eEQIHL8hbHGprO7axn45pOElCoWgOw8DHlObziL7UV-pNM4l3F6rJSEuvVYxabpfn9Fp-KasIlx-L5dRqJ0Da_5nmcZ5BS_8PQF3

А после конвертации объединяем в один PDF файл:
https://www.ilovepdf.com/ru/merge_pdf

В итоге мы получаем готовый PDF файл книги. Задача выполнена.
При средних знаниях ZennoPoster такие шаблоны можно делать за 20-30 минут.

AD_4nXf6ny08W38SQ-0rVXbXoSHIfT8VbTyz9sRUjOiWD5AQ_jPB2KzWWKHc42fxk9lK4pgjeIL1DZ3aqNWk03M-zwHVxmSvIujTz9zg4LrQmw47VlaMtGGY2SrsR68Fj0b1B94i5pjPzOelTu4fCQCdFBPIe5Qz

БОНУС. Автоматическая конвертация SVG в PDF.
Внимание: потребуется последняя версия ZennoPoster. На старых может не работать.

Если задача сохранить сотни-тысячи документов, то можно воспользоваться готовым решением конвертации svg файлов и объединения в единый pdf файл. Этот скрипт помог сделать @samsonnn (автор статьи “Библиотека Magick.NET C# (Image Magick), работа с изображениями, и другие полезняшки” занявшей 1 место в предыдущем конкурсе статей).

Инструкция по настройке:
Загружаем библиотеки из папки ExternalAssemblies в архиве в конце статьи и помещаем все файлы в папку ExternalAssemblies по пути:
c:\Program Files\ZennoLab\RU\ZennoPoster Pro V7\7.7.5.0\Progs\ExternalAssemblies\

Если добавляете в свой проект, то нужно указать “Ссылки из GAG”:

AD_4nXcsnHJJrKk8soSkDuFIb6SSwJ2X4AL42e4F8PcPXkn45JeF2IBeOcahRdyabGoiCfhZZazcgXTv8mf-haLVnRsTv99gVeJ9421zE1OZBPHUeCKCoKD6GvfZheuf41J4enog4MfKqvoeBy8SReEh90DTRoZ4

и добавить в “Директивы using и общий код”:

AD_4nXe9yIJcEk4OMeGR3bMvxX81xSEbmi_5g896Ce81-sFTjIk_vheNfJ4XDurPnQ3jpzX6y4B1ATPHILrquMElNt8PQA8ERCuBEVhAwcHGidJwwcCBfib73r1Difth581A7SBEUif7nyXisdizAVfdTVlNozVg

Настройки простые:

AD_4nXercfKKJglrFKTvVQah-gF28f6EPxi0Idezr5VQHaSJRbFYaLck0kXMRJA1Fqd1b-UHdDP1ojSJ7W5Qb92dRGy2LtzudhC55_tDqu03rbIF6-mTzYNMfN895EyhmPVpsBSM6Uop3c8uINRB2C0NaloZ5-Eu

Если нужны какие-то правки и консультации, то пишите @samsonnn , он толковый и ответственный специалист.

Надеюсь данный гайд был вам полезен. Я опустил некоторые второстепенные моменты для упрощения подачи материала. Мы разобрали самое сложное, а разные мелочи вы добавите в процессе сами. Спасибо, что прошли вместе со мной этот путь. Хорошего дня!
 

Вложения

Последнее редактирование модератором:
Спасибо за статью и за бонус. Всё по шагам проделал, всё получилось. Правда когда я вставлял реферрер выдавал 400 ответ, а когда я его убрал, всё заработало (может не тот урл вставлял)
 
  • Спасибо
Реакции: Hannes

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)