Импорт¶
Для импорта необходимо активировать модуль ELiS import и модули, поддерживающие импортируемый формат.
EPUB¶
ZIP-архив¶
Иногда надо загрузить большое количество файлов в папку каталога и описание каждого файла в отдельности может занимать слишком много времени.
Способ пригоден при следующих условиях:
- Загружаемые файлы можно описать с помощью общего шаблона метаданных (Например Газета, выпуск, год);
- Все файлы должны быть загружены в одну папку каталога;
- Файлы имеют не слишком большой размер.
Тогда модуль ELiS Import позволяет загрузить файлы описанным ниже способом.
Идея¶
Можно упростить ввод метаданных, если загрузить просто одним большим пакетом множество файлов в некоторую папку.
Метаданные, необходимые для ввода (заглавие, серия, выпуск, дата публикации и т.д.) можно ввести прямо в названии загружаемых файлов, например сделав названия:
- “Газета Правда__1__1980.pdf”
- “Газета Правда__2__1980.pdf”
- “Газета Правда__3__1980.pdf”
Здесь очевидно угатывается название серии “Правда”, выпуски 1,2,3 за 1980 год.
Но программа импорта не человек, угодать не может и ей надо помочь, создав специальный файл с метаданными, в котором в машиночитаемом виде будет корректно задан способ разбора шаблона названия файла на поля.
В этом же файле с метаданными можно ввести и обязательные поля, общие для всех пакетно-загружамых документов.
Дальше файл с метаданными и загружаемые файлы документов упаковываются в ZIP-архив и загружаются на сервер.
Для пакетной загрузки роль пользователя должна иметь права на импорт всех документов (import all documents) модуля ELiS Import.
Какие ресурсы можно импортировать¶
В настоящиее время импортировать можно только книги в PDF.
Для добавления поддержки импорта других типов ресурсов обратитесь в техническую поддержку.
Папка с загружаемыми файлами¶
Создайте рабочую папку с файлами, которые вы хотите пакетным образом загрузить.
В дальнейшем содержимое папки надо будет упаковать в ZIP-архив.
Файл метаданных¶
В созданной папке создайте текстовый файл metadata_elis.json в кодировке UTF-8.
В файле с помощью любого текстового редактора (например Notepad++) создайте объект JSON со следующей структурой:
{
"encode":"cp866",
"fileNameTemplate":"{title}.pdf",
"nodeTemplate": {"title":"{field_serial} {field_volume}/{field_publish_date}", "type":"ebook", "field_volume":{"und":[{"value":"{field_volume}"}]}}
}
Здесь следующие параметры:
encode - (обязательный параметр) сохраняемая кодировка ZIP-архива. Если вы ZIP-архив упаковываете в Windows, кодировка будет cp866 (см. https://www.opennet.ru/tips/2494_zip_rus_patch.shtml). Если при загрузке вы видите, что имена побились, значит некорректно обрабатывается кодировка.
fileNameTemplate - (обязательный параметр) шаблон названия файлов, из которого будут извлекаться метаданные. Метаданные представляют собой поля к ноде в машиночитаемом виде. Так поле node->title будет иметь шаблон {title}, поле название серии будет иметь шаблон {field_serial}, поле даты публикации {field_publish_date} и т.д. Список поддерживаемых полей приводится ниже. Все поля в шаблоне должны иметь разделители, по которым очевидно возможно выделить в имени файла с помощью регулярных выражений соответствующее поле, так “{title}{field_data_publish}.pdf” - некорректное название файла и лучше использовать “{title}__{field_data_publish}.pdf”. Хорошей идеей будет использовать двойное нижнее подчеркинвание в качестве разделителей.
nodeTemplate - (опциональный параметр) объект, который будет сливаться с объектом node в Drupal. При этом в объекте можно вместо значений использовать подстановку полей, упомянутых в fileNameTemplate.
Есть один момент с сериализацией: в Drupal поля являются хеш-массивами, а в нотации JSON хеш-массивов не бывает и поэтому в JSON хеш-массивы надо заменить на объекты JavaScript.
Шаблон fileNamTemplate¶
fileNameTemplate - строка, в которой в фигурных скобках находятся поля, автоматически подставляющие значения из имени файла. При импорте по имени файла будут извлечены значения полей и эти значения будут присвоены сохраняемой ноде.
Не любые поля поддерживаются в fileNameTemplate, вот список тех полей, которые вы можете указать в шаблоне, неперечисленные поля заполнятей с помощью nodeTemplate:
- title (Пример: “Евгений Онегин”)
- status (Пример: “1”)
- type (Пример: “ebook”)
- field_identifier (Пример: “978-5-7944-3126-1”)
- field_authors (Пример: “Иванов И.И., Петров П.П.”)
- field_classification (Пример: “Научная статья”)
- field_tags (Пример: “Физика”)
- field_serial (Пример: “Уральский рабочий”)
- field_publisher (Пример: “Издательство Х”)
- field_publish_date (Пример: “2020”)
- field_volume (Пример: “2”)
- field_issue (Пример: “11”)
- field_is_fragments (Пример: “34-36”)
- field_edition (Пример: “2”)
- field_license (Пример: “http://creativecommons.org/licenses/by/4.0”)
- field_import_source (Пример: “https://example.com/file.pdf”)
- field_open_access (Пример: “0”)
- field_allow_unprotected_download (Пример: “1”)
- field_social_drm (Пример: “0”)
- field_meta_open_access (Пример: “1”)
При импорте перечисленные поля корректно импортируются.
Шаблон nodeTemplate¶
Например в Drupal в PHP-коде присвоение полю даты публикации будет:
- ::
- $node->field_publish_date[‘und’][0][‘value’] = ‘2020’;
В файле метададнных в JSON аналогичное присвоение надо будет преставить как
{
"encode":"cp866",
"fileNameTemplate":"{title}.pdf",
"nodeTemplate":{"field_publish_date":{"und":[{"value":"2020"}]}}
}
Здесь объект в nodeTemplate будет слит с объектом node в момент сохранения.
Тип сохраняемой ноды берется из расширения файла, но можно указать его руками “nodeTemplate”:{“type”:”ebook”} для книги в PDF. Типы ноды можно посмотреть в админке в структуре нод.
Подстановка в шаблон nodeTemplate данных из fileNameTemplate¶
В шаблоне nodeTemplate можно также использовать подстановку полей из шаблона fileNameTemplate, например для газеты можно сформировать составное заглавие:
{
"encode":"cp866",
"fileNameTemplate":"{field_serial}__{field_volume}__{field_publish_date}__{field_issue}.pdf",
"nodeTemplate": {"title":"{field_serial} {field_volume}/{field_publish_date} ({field_issue})", "type":"ebook", "field_volume":{"und":[{"value":"{field_volume}"}]}}
}
Как узнать какую структуру вписать для nodeTemplate¶
Загрузите один файл, который будет для вас шаблоном в ручном режиме и корректно его опишите.
Вам надо узнать внутреннюю структуру ноды, чтобы преобразовать ее в JSON и подставить в nodeTemplate.
Для этого в /usr/lib64/elis/drupal создайте произвольный файл (например filename.php) с расширением PHP и напишите в нем код:
<?php
$nid = '12345'; // идентификатор ноды, для которой хотите узнать внутреннуюю структуру с полями.
require_once('drupal.bootstrap.php');
$node = node_load($nid);
var_dump($node);
Здесь вместо 12345 подставьте идентификатор той ноды, поля которой вам интересны и выполните файл из консоли командой
$ php filename.php
В результате вы получите дамп объекта, который преобразовав в JSON можете использовать в nodeTemplate.
Вам можно подставлять не весь объект целиком, а только определенные поля (имеют структуру field_имяполя).
Примеры файлов метаданных¶
Только авторы и заглавие:
- Иванов И.И., Петров П.П.__Любительская фотография.pdf
- Сидоров С.С.__История фототехники.pdf
{
"encode":"cp866",
"fileNameTemplate":"{field_authors}__{title}.pdf"
}
Газета с указанием выпуска и года и составным заглавием:
- Народная свобода__1917__22.pdf
- Народная свобода__1917__23.pdf
{
"encode":"cp866",
"fileNameTemplate":"{field_serial}__{field_publish_date}__{field_issue}.pdf",
"nodeTemplate": {"title":"{field_serial} {field_issue}/{field_publish_date}", "type":"ebook"}
}
Тезисы докладов от 2020 года, помеченные термином с tid 321 (https://elis.example.com/taxonomy/term/321) в поле классификации (field_classification):
- Иванов И.И., Петров П.П.__Исследование сферического коня в вакууме.pdf
- Сидоров С.С.__Особенности ориентации сферичесого коня в вакууме.pdf
{
"encode":"cp866",
"fileNameTemplate":"{field_authors}__{title}.pdf",
"nodeTemplate": {"type":"ebook", "field_publish_date":{"und":[{"value":"2020"}]}, "field_classification":{"und":[{"tid":"321"}]}}
}
Пакетная загрузка на сервер¶
После того, как файл метаданных metadata_elis.json будет готов, упакуйте все загружаемые файлы и metadata_elis.json в ZIP-архив (можно без сжатия). Все файлы должны быть в корне архива. В архиве не должно быть папок и файлов со спецсимволами в названиях.
Перейдите в папку каталог, в которую вы хотите загрузить ресурс (например https://elis.example.com/node/123) и нажмите вкладку Импорт. Если вкладка “Импорт” не видна, значит у роли вашего пользователя нет прав на импорт ресурсов (import all documents).
Перейдите по вкладке импорта и нажмите кнопку импорта ресурсов. В результате вы перейдете на форму загрузки ZIP-архива.
Альтернативно можно перейти по URL: https://elis.example.com/node/123/import/zip.
Начните процедуру импорта ZIP-архива. Она может занять продолжительное время (таймаут выполнения PHP - один час).
Не нажимайте кнопку загрузки дважды.
Может возникнуть ситуация, что браузер не дождется процесса обработки и закроет соединение с ошибкой по таймауту. Если это произошло, вернитись в папку, в которую загружаете файлы чтобы убедиться, что спустя некоторое время они появятся. Для обнаружения ошибок в этом случае смотрите логи на сайте ELiS.
Культура.РФ¶
Вы можете импортировать все книги из раздела “литература” на сайте https://culture.ru. Всего более 500 книг. Перед запуском процедуры импорта вы должны убедиться, что имеете права на импорт всех размещенных на сайте книг и распространение их через вашу библиотеку. Поставщик ELiS не передает вам вместе с библиотекой какие-либо права на импортируемые книги.
Для импорта:
- Включите модули ELiS import и EPUB.
- Перейдите под администратором в папку каталога, в которую вы хотите импортировать книги вместе со структурой навигации. Если такая папка каталога еще не создана, создайте ее.
- Нажмите вкладку “импорт”. Импорт будет произведен именно в ту папку каталога, в которой вы нажали на вкладку импорта.
- Вы увидите ссылку для импорта с сайта Культура.РФ. Нажмите ее.
- Вы увидите командную, которую необходимо выполнить для запуска процедуры импорта.
- Зайдите на сервер по SSH и выполните эту команду с правами root-а.
- Процедура импорта займет от 30 минут до нескольких часов. В течении этого времени не закрывайте SSH-сессию.
- Если сессия прервалась, вы сможете повторить процедуру импорта. Ранее импортированные книги повторно импортироваться не будут.
Импортированные книги

Импортированный каталог с сайта Культура.РФ

Импортированный файл EPUB встроенный в ELiS