Импорт

Для импорта необходимо активировать модуль ELiS import и модули, поддерживающие импортируемый формат.

EPUB

ZIP-архив

Иногда надо загрузить большое количество файлов в папку каталога и описание каждого файла в отдельности может занимать слишком много времени.

Способ пригоден при следующих условиях:

  1. Загружаемые файлы можно описать с помощью общего шаблона метаданных (Например Газета, выпуск, год);
  2. Все файлы должны быть загружены в одну папку каталога;
  3. Файлы имеют не слишком большой размер.

Тогда модуль 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 не передает вам вместе с библиотекой какие-либо права на импортируемые книги.

Для импорта:

  1. Включите модули ELiS import и EPUB.
  2. Перейдите под администратором в папку каталога, в которую вы хотите импортировать книги вместе со структурой навигации. Если такая папка каталога еще не создана, создайте ее.
  3. Нажмите вкладку “импорт”. Импорт будет произведен именно в ту папку каталога, в которой вы нажали на вкладку импорта.
  4. Вы увидите ссылку для импорта с сайта Культура.РФ. Нажмите ее.
  5. Вы увидите командную, которую необходимо выполнить для запуска процедуры импорта.
  6. Зайдите на сервер по SSH и выполните эту команду с правами root-а.
  7. Процедура импорта займет от 30 минут до нескольких часов. В течении этого времени не закрывайте SSH-сессию.
  8. Если сессия прервалась, вы сможете повторить процедуру импорта. Ранее импортированные книги повторно импортироваться не будут.

Импортированные книги

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

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

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

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