Генератор от rupor
Материал из MyHomeLib
Содержание |
Command line генератор списков импорта для MyHomeLib
Возможности и отличия
Я старался повторить оригинальный алгоритм из LibFileList, без каких либо извращений с SQL.
Основные возможности (и отличия от уже имеющегося LibFileList):
- Работает из командной строки
- Не надо ничего устанавливать, никаких WAMP, LAMP и т.д. Используется embedded MySQL.
- Результатом работы сразу является INPX файл – не надо ничего переупаковывать
- Имена полученных INPX файлов могут включать в себя версию (дату) – ту же, что и внутри version.info в INPX, так что можно хранить рядом сколько угодно копий
- По умолчанию версия (дата) автоматически берется из дампов базы данных
- Умеет производить на свет INPX как при наличии off-line архивов, так и просто из базы данных, без архивов. Вариант без архивов может быть использован для on-line работы с библиотеками.
- Умеет правильно работать как с Либрусек так и с Флибуста библиотеками
- Умеет правильно работать как с "дневными архивами", так и со специально подготовленными "большими" архивами
- Умеет правильно работать как с FB2 и USR так и со смешанными архивами
- Если книжка из архива не найдена в базе умеет прочесть информацию о книге из FB2 в локальном архиве (случай не регулярно обновляющегося Либрусека)
- Умеет создавать специальный daily_update.zip чтобы избежать полной перестройки базы данных MyHomeLib для дневных архивов Либрусека
- Не лазит в интернет – в комплект входит командный файл, который умеет закачивать как дампы баз данных, так и ежедневные архивы обновлений.
- Работает достаточно быстро – полная обработка всех локальных архивов Либрусека и дампа сегодняшней базы данных на моем компьютере занимает полторы минуты.
- Имеются 32 и 64 битные версии
Как использовать
Для запуска наберите lib2inpx.exe в командном окне:
Import file (INPX) preparation tool for MyHomeLib
Version 3.6 (MYSQL 5.1.42)
Usage: lib2inpx.exe [options] <path to SQL dump files>
options:
--help Print help message
--ignore-dump-date Ignore date in the dump files, use current UTC date
instead
--clean-when-done Remove MYSQL database after processing
--process arg What to process - "fb2", "usr", "all" (default: fb2)
--strict arg What to put in INPX as file type - "ext", "db",
"ignore" (default: ext). ext - use real file extension.
db - use file type from database. ignore - ignore files
with file extension not equal to file type
--no-import Do not import dumps, just check dump time and use
existing database
--db-name arg Name of MYSQL database (default: librusec)
--archives arg Path(s) to off-line archives. Multiple entries should
be separated by ';'. Each path must be valid and must
point to some archives, or processing would be aborted.
(If not present - entire database in converted for
online usage)
--read-fb2 arg When archived book is not present in the database - try
to parse fb2 in archive to get information. "all" - do
it for all absent books, "last" - only process books
with ids larger than last database id (If not present -
no fb2 parsing)
--inpx arg Full name of output file (default: <db_name>_<db_dump_d
ate>.inpx)
--comment arg File name of template (UTF-8) for INPX comment
--update arg Starting with "<arg>.zip" produce "daily_update.zip"
(Works only for "fb2")
--db-format arg Database format, change date (YYYY-MM-DD). Supported:
2010-02-06. (Default - old librusec format before
2010-02-06)
--quick-fix Enforce MyHomeLib database size limits, works with
fix-config parameter. (default: MyHomeLib 1.6.2
constrains)
--fix-config arg Allows to specify configuration file with MyHomeLib
database size constrains
Предположим, что сегодняшние дампы Либрусека лежат в уже распакованном виде в директории d:\librusec\sql (программа подберет все файлы с расширением .sql), a локальные архивы Либрусека лежат в директории d:\librusec\local (программа подберет все файлы с расширением .zip). Тогда выдача следующей команды:
lib2inpx.exe --process fb2 –archives d:\librusec\local d:\librusec\sql
приведет к тому, что в поддиректории data (в той же директории, откуда запущена программа) появится файл librusec_20090804.inpx. На экране при этом вы увидите что-то вроде:
Creating MYSQL database "librusec_20090804" Importing - "lib.libavtor.sql" - done in 00:00:01 Importing - "lib.libavtoraliase.sql" - done in 00:00:00 Importing - "lib.libavtorname.sql" - done in 00:00:01 Importing - "lib.libbook.sql" - done in 00:00:09 Importing - "lib.libfilename.sql" - done in 00:00:00 Importing - "lib.libgenre.sql" - done in 00:00:01 Importing - "lib.libgenrelist.sql" - done in 00:00:00 Importing - "lib.libseq.sql" - done in 00:00:01 Importing - "lib.libseqname.sql" - done in 00:00:00 Archives processing - 15 file(s) [D:/Books_e/Library/local/] Processing - "fb2-000024-030559.zip" - done in 00:00:14 (22807:0:0 records) Processing - "fb2-030560-060423.zip" - done in 00:00:16 (24395:0:0 records) Processing - "fb2-060424-074391.zip" - done in 00:00:05 (8131:0:0 records) Processing - "fb2-074392-091839.zip" - done in 00:00:05 (7134:0:0 records) Processing - "fb2-091841-104214.zip" - done in 00:00:05 (7772:0:0 records) Processing - "fb2-104215-113436.zip" - done in 00:00:05 (6638:0:0 records) Processing - "fb2-113437-119690.zip" - done in 00:00:03 (5508:0:0 records) Processing - "fb2-119691-132107.zip" - done in 00:00:04 (6176:0:0 records) Processing - "fb2-132108-141328.zip" - done in 00:00:04 (5889:0:0 records) Processing - "fb2-141329-149815.zip" - done in 00:00:05 (6161:0:0 records) Processing - "fb2-149816-153661.zip" - done in 00:00:02 (3386:0:0 records) Processing - "fb2-153662-161693.zip" - done in 00:00:04 (6013:0:0 records) Processing - "fb2-161694-168102.zip" - done in 00:00:04 (5441:0:2 records) Processing - "fb2-168103-173663.zip" - done in 00:00:03 (4984:0:0 records) Processing - "fb2-173664-173908.zip" - done in 00:00:00 (203:0:0 records) Complete processing took 00:00:59
Если вы хотите создать файл "daily_update.zip", который позволяет добавить дневные архивы Либрусека к уже имеющейся коллекции без ее полной перестройки, используйте ключ --update. Выдача команды
lib2inpx.exe --process fb2 --update 167585-167678 --archives d:\librusec\local d:\librusec\sql
приведет к созданию daily_update.zip в котором будут содержаться INP для всех имеющихся в директории дневных архивов от 167585-167678.zip до более поздних. Архивы с именами, начинающимися с "fb2-", "usr-", а так же более ранние дневные архивы будут игнорироваться. Этот режим работатет только для FB2 и MyHomeLib версии 1.6 и позже - созданный файл нужно скопировать в директорию MyHomeLib и инициировать update. Если вы не хотите, чтобы MyHomeLib в дополнение к вашему update ходил в интернет - поставьте заведомо неправильный адрес сервера обновлений, например http://localhost.
При анализе архивов программа намеренно игнорирует "soft links" (MyHomeLib этого не делает), что позволяет определенную гибкость при хранении архивов. Например, можно расположить архивы, общие для flibusta и librusec в базовой директории и хранить дневные обновления, отличающиеся для библиотек, отдельно друг от друга, воспользовавшись "soft links" для создания путей с полными библиотеками для MyHomeLib. При этом при создании INPX для таких коллекций опция --archives позволяет перечислить несколько путей к архивам, разделяя их ";". Например:
--archives=d:\library\local;d:\library\local\librusec
Выдача
lib2inpx.exe --process usr –archives d:\librusec\local d:\librusec\sql
произведет на свет librusec_usr_20090804.inpx, в котором соответственно будет информация по всем файлам, кроме FB2.
Если вы увидели
Processing - "160443-160588.zip" - done in 00:00:00 ==> Not in database!
значит ни одного файла из этого архива не было найдено в процессируемой базe Либрусека (база старше архивов) или внутри нет ни одного файла подходящего типа (например FB2 - или не FB2, если вы задавали --process=usr).
Обычно это случается когда Либрусек перестает выкладывать обновленную базу, а дневные файлы с книгами продолжают появляться. Здесь может помочь ключ --read-fb2=last. При этом программа вычислит id самой последней FB2 книги в базе и для всех книг из архивов с большим id информация для создания inpx будет взята из FB2 файла в архиве. Вы увидите что-то вроде:
Largest FB2 book id in database: 179509 Archives processing - 15 file(s) [D:/Books_e/Library/local/] Processing - "fb2-000024-030559.zip" - done in 00:00:14 (22807:0:0 records) Processing - "fb2-030560-060423.zip" - done in 00:00:16 (24395:0:0 records) Processing - "fb2-060424-074391.zip" - done in 00:00:05 (8131:0:0 records) Processing - "fb2-074392-091839.zip" - done in 00:00:05 (7134:0:0 records) Processing - "fb2-091841-104214.zip" - done in 00:00:05 (7772:0:0 records) Processing - "fb2-104215-113436.zip" - done in 00:00:05 (6638:0:0 records) Processing - "fb2-113437-119690.zip" - done in 00:00:03 (5508:0:0 records) Processing - "fb2-119691-132107.zip" - done in 00:00:04 (6176:0:0 records) Processing - "fb2-132108-141328.zip" - done in 00:00:04 (5889:0:0 records) Processing - "fb2-141329-149815.zip" - done in 00:00:05 (6161:0:0 records) Processing - "fb2-149816-153661.zip" - done in 00:00:02 (3386:0:0 records) Processing - "fb2-153662-161693.zip" - done in 00:00:04 (6013:0:0 records) Processing - "fb2-161694-168102.zip" - done in 00:00:04 (5441:0:2 records) Processing - "fb2-168103-173663.zip" - done in 00:00:03 (4984:0:0 records) Processing - "fb2-173664-173908.zip" - done in 00:00:00 (203:0:0 records) Archives processing - 12 file(s) [D:/Books_e/Library/local/librusec/] Processing - "180345-180529.zip" - done in 00:00:00 (0:131:0 records) Processing - "180530-180701.zip" - done in 00:00:00 (0:107:0 records) Processing - "180702-180996.zip" - done in 00:00:00 (0:262:0 records) Processing - "180997-181172.zip" - done in 00:00:00 (0:135:0 records) Processing - "181173-181360.zip" - done in 00:00:00 (0:133:0 records) Processing - "181361-181497.zip" - done in 00:00:00 (0:97:0 records) Processing - "181498-181687.zip" - done in 00:00:00 (0:171:0 records) Processing - "181688-181793.zip" - done in 00:00:00 (0:67:0 records) Processing - "181794-181963.zip" - done in 00:00:00 (0:84:1 records) Processing - "181964-182094.zip" - done in 00:00:00 (0:85:0 records) Processing - "182095-182284.zip" - done in 00:00:00 (0:155:0 records) Processing - "fb2-173909-180344.zip" - done in 00:00:03 (4049:561:1 records)
Первый номер в скобках - количество записей, созданное из базы данных, второй - количество записей, созданное путем разбора FB2 и третий - количество пропущенных книг.
Если указать --read-fb2=all, то для всех FB2 книг, отсутствующих в базе будет сделана попытка прочесть информацию из FB2.
Обратите пожалуйста внимание на то, что некоторые архивы Либрусека в настоящий момент находятся в странном состоянии. Не FB2 книги внутри них могут находиться в архивированном состоянии (архивы в архивах). Причем использованны могут быть разные архиваторы - я встретил RAR и ZIP. По умолчанию (или когда использована опция --strict=ext) программа положит в INPX реальное расширение имени файла и проигнорирует поле FileType из базы данных. Так сейчас работает MyHomeLib. Если задать --strict=db, то в INPX будет использваться поле FileType из базы данных. И, наконец, если использовано --strict=ignore, тогда lib2inpx не будет включать в INP файлы, для которых file extension не совпадает с database file type.
При выдаче следующей комманды:
lib2inpx.exe d:\librusec\sql
архивы процессироваться не будут и появившийся на свет librusec_20090804.inpx будет просто содержать все записи из базы Либрусека. Такой вариант без архивов может быть использован для on-line работы с библиотекой:
Creating MYSQL database "librusec_20090804" Importing - "lib.libavtor.sql" - done in 00:00:01 Importing - "lib.libavtoraliase.sql" - done in 00:00:00 Importing - "lib.libavtorname.sql" - done in 00:00:01 Importing - "lib.libbook.sql" - done in 00:00:09 Importing - "lib.libfilename.sql" - done in 00:00:01 Importing - "lib.libgenre.sql" - done in 00:00:01 Importing - "lib.libgenrelist.sql" - done in 00:00:00 Importing - "lib.libseq.sql" - done in 00:00:00 Importing - "lib.libseqname.sql" - done in 00:00:00 Database processing ............................................ 132933 records done in 00:00:40
Опция --db-name=flibusta везде заменит librusec на flibusta, т.е. в имени базы данных, именах произведенных файлов и комментариях в них будет использоваться другое название.
Опция --db-format=2010-02-06 (или более поздние - 2010-03-17) позволит обработать базы данных с изменившимся после 5 февраля 2010 года форматом (творчество Librusec).
Опция --quick-fix обрежет поля, которые при импорте в MyHomeLib не поместятся в базу и вызовут ошибки в функционировании программы. По умолчанию будет использоваться размер полей из MyHomeLib 1.6.2. Используя --fix-config можно специфицировать другие размеры полей. Список поддерживаемых проверок и пример находится в файле limits.conf.
Оставшиеся ключи программы не особенно важны: --clean-when-done удалит созданную при работе MYSQL базу данных, --ignore-dump-date проигнорирует дату в дамп файлах и использует сегодняшнее число (UTC), а --inpx позволит указать имя и путь желаемого INPX файла. Если нужно запускать программу из batch файла много раз на одном и том же наборе MYSQL дампов можно воспользоваться ключом --no-import и создавать базу данных один раз. В ключе --comment можно задать путь к файлу с шаблоном для INPX комментария (UTF-8, единственный "%s" будет заменен на имя генерируемого INPX файла. Для примера смотрите comment_fb2.utf8 и comment_usr.utf8 в дистрибутиве программы). Если этого параметра нет, то комментарии будут генериться в формате, максимально приближенном к тем, что использует MyHomeLib для "стандартных" коллекций Либрусека.
В предлагаемые дистрибутивы в качестве примера входят 2 PowerShell скрипта (и все необходимое для их успешной работы): fb2_librusec.ps1 и fb2_flibusta.ps1. Они принимают единственным параметром путь к локальным архивам:
fb2_librusec.ps1 d:\library\local
При выполнении каждый скрипт
- Загрузит недостающие дневные обновления (в d:\library\local\libruec или d:\library\local\flibusta соответственно)
- Загрузит последние дампы базы данных и распакует их
- Запустит lib2inpx с обработкой архивов – полученный INPX будет лежать в поддиректории data
Вы сможете посмотреть логи закачек в файлах *.log в директории, откуда запущен скрипт.
Осталось создать новую коллекцию в MyHomeLib или запустить MyHomeLib с ключом /clear, чтобы начать создавать все коллекции заново.
История версий
3.8 (2010-04-11 16:00 EST)
- Опять изменился формат базы Либрусека - новoe значение db-format: 2010-04-11
- Добавлена обработка роли автора для Либрусека
3.7 (2010-03-17 10:30 EST)
- Опять изменился формат базы Либрусека - новoe значение db-format: 2010-03-17
- CMD scripts are replaced with PowerShell ones...
- gzip is replaced with 7za...
3.6 (2010-02-06 12:30 EST)
- Добавлен параметр --db-format. Пока подерживается единственное значение: 2010-02-06 для обработли изменившихся Либрусековских баз
3.5 (2010-02-05 19:30 EST)
- Слегка изменена обработка LibRate - теперь рейтинг округляется так, чтобы результат был целым числом - у текущего MyHomeLib в базе это integer, а код ничего и никуда не преобразует.
3.4 (2010-01-22 22:00 EST)
- Добавлен параметр --fix-config для управления проверкой размера импортируемых данных.
3.3 (2010-01-21 17:30 EST)
- Добавлен --quick-fix. Включает проверку длинны имени серии. Если превышает MyHomeLib'овское ограничение в 80 символов - обрезает. Со временем можно сделать такие же проверки для всех полей и настраивать ограничения из конфигурационного файла.
3.2 (2010-01-20 22:00 EST)
- Добавлен параметр --read-fb2 (last/all) - дополнение отсутствующей в базе информации путем чтения FB2
3.1 (2010-01-11 22:00 EST)
- Добавлен импорт и обработка "rates" по образу и подобию SQL2Inpx
3.0 (2010-01-09 23:40 EST)
- Добавлена опция --db-name (можно обрабатывать librusec и flibusta не меняя директорий
- --archives позволяют специфицировать несколько путей к архивам
- Изменены скрипты - поддерживается librusec и flibusta (только FB2)
- Слегка изменены INPX комментарии и имена генерируемых INPX по умолчанию
- Добавлено игнорирование "soft links" при обработке архивных файлов
- Используется последняя версия MySQL - 5.1.42
2.7 (2010-01-05 10:00 EST)
- Комментарии к коллекциям приведены в соответствие с SQL2Inpx
2.6 (2009-10-20 19:00 EST)
- Починена ошибка в обработке параметра --update.
2.5 (2009-10-20 18:00 EST)
- Починена ошибка в обработке параметра --comment.
- Добавлен параметр --update для создания daily_updates.zip
2.4 (2009-10-18 12:30 EST)
- Добавлен параметр "comment" - имя файла с шаблоном для INPX комментария. Ожидается UTF-8 файл с единственным "%s", который будет заменен на имя создаваемого INPX файла. В программе шаблон комментария используется как первый параметр (format) в printf без дополнительных проверок, так что надо соблюдать осторожность. Если шаблон не задан, то будет генерироваться комментарий, максимально похожий на используемые MyHomeLib для "стандартных" коллекций Либрусека.
- Изменен код FB2 коллекции в комментариях INPX (65536 вместо 0).
2.3 (was not released)
- Игнорировать архивы меньше 22 байтов - такие архивы создает 7z если из них удалить все файлы. Очень удобно использовать в скриптах, чтобы не загружать перепакованные архивы
2.2 (2009-08-25 18:30 EST)
- Починена обработка смешанных архивов (где есть книги разных типов - например ежедневные архивы Либрусека). Чтобы не менять порядковый номер файла в архиве (и позволить MyHomeLib правильно вытаскивать книги) в INPX теперь будут генерится dummy записи. Так например если задана обработка USR, а в архиве присутствуют и FB2 - для них в INPX будут сгенерены пустые записи.
2.1 (2009-08-25 16:00 EST)
- Изменен параметр strict - он теперь позволяет использовать в INPX реальное file extension вместо типа файла из базы данных (режим по умолчанию - strict=ext). Старый strict режим включается при помощи strict=ignore, а прежний default режим - теперь strict=db.
- sync_script разбит на sync_script_fb2 и sync_script_usr, слегка изменена функциональность - теперь в поддиректории с MYSQL dumps создается librusec.inpx без обработки архивов.
2.0 (2009-08-22 13:00 EST)
- Поля теперь фильтруются и на наличие LF - после замены CR/LF на пробел, поле будет проверено на оставшиеся LF и если нужно они будут просто удалены.
- sync_script при наличии skip параметра пропустит все действия связанные с доступом к интернету - т.е. MYSQL dump загружаться не будет. В директории, куда sync_script загружает dump MYSQL будет создан librusec.inpx для FB2 без обработки локальных архивов - для всей базы.
1.9 (2009-08-22 11:00 EST)
- Добавлена фильтрация полей на наличие CR/LF. В полях author, genres, sequence, title и keywords CR/LF будет заменен на пробел. Если CR/LF встретится в имени файла - такой файл будет пропущен при импорте.
- Изменен код не-FB2 коллекции в комментариях INPX (65537 вместо 1).
- Починены ошибки в обработке clean-when-done.
- sync_script удаляет MYSQL database после конца работы.
1.8 (2009-08-10 22:30 EST)
- Убрана зависимость от C/C++ run-time DLLs, MYSQL DLL и ZLIB DLL (статический линк).
1.7 (2009-08-10 16:10 EST)
- Исправлена обработка странного случая, когда в архиве имеется FB2 файл с именем, не являющимся BookId. Будет процессироваться как USR файл.
1.6 (2009-08-10 09:30 EST)
- Изменен strict режим в соответсвии с предложением Алексея - теперь результат работает в неизмененном MyHomeLib.
1.5 (2009-08-09 22:00 EST)
- Добавлено процессирование не-FB2 файлов. Добавлена опция "strict".
- Починены мелкие проблемы. Скрипт больше не удаляет не-FB2 файлы из архивов.
- Добавлены комментарии к INPX в формате, понимаемом MyHomeLib.
1.3 (2009-08-06 16:34 EST)
- Добавлен параметр в sync_script.cmd чтобы не загружать дневные архивы с Либрусека. Если архив не содежит нужных файлов или ни один файл из архива не найден в имеющейся басе данных Либрусека - не создавать пустые INP файлы в INPX.
1.2 (2009-08-04 22:56 EST)
- Обновлен sync_script.cmd.
1.1
- Первый блин.
Где взять программу
Последняя версия:
- MD5 0da6b518ee7c5dd3ff89ff4e77a65194 - 32 бита
- MD5 af6a69908b6cf951e2efabdd49f4352f - 64 бита
Обсуждение использования
- Происходит на форуме MyHomeLib в этой теме

