Информационный портал
pocket versionPOCKET  wikiWIKI  FAQFAQ  ПоискПоиск  ПользователиПользователи  ГруппыГруппы  РегистрацияРегистрация  ПрофильПрофиль  Войти и проверить личные сообщенияВойти и проверить личные сообщения  ВходВход

Обработка FictionBook на Perl

 
Найти сообщения без ответов
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Сделано для FB
Предыдущая тема :: Следующая тема  
Автор Сообщение


Bamse
Новенький участник форума

Новенький участник форума

Зарегистрирован: 03.02.2005
Сообщения: 97

СообщениеДобавлено: Пт Фев 04, 2005 10:55    Заголовок сообщения: Обработка FictionBook на Perl Ответить с цитатой

Ахтунг! Если у Вас мало времени, просто прочтите фразу, выделеную жирным.

Хочу написать простую программу сортировки FB2 по папкам.
Наткнулся на проблему, что Book2Shelf на некоторые файлы говорит, что-то типа того, что этот файл похож на fb2, но элемент body не найден.... Нет, я понимаю, что это плохо. Но я не хотел бы терять такие файлы. Да и сама B2Shelf мне не особо нужна... Главное, чтобы файлы в папках на месте были, чтобы я просто их себе на MStick копировал.

В общем, наткнулся на проблему. Не понимаю я как работают все эти XML Парсеры... Даже уже в PHP ткнулся... Не врубаюсь..

Кто-нибудь добрый может привести Perl функцию, которая выдергивает из fb2 файла имя, фамилию автора и название книги и кладет их в три переменных? Желательно с использованием стандартных модулей ActivePerl.

После окончания скрипта, обязуюсь его выложить.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Shaman
Администратор библиотеки FictionBook.Lib

Администратор библиотеки FictionBook.Lib

Зарегистрирован: 04.10.2004
Сообщения: 781
Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Пт Фев 04, 2005 11:04    Заголовок сообщения: Ответить с цитатой

Bamse писал(а):
Наткнулся на проблему, что Book2Shelf на некоторые файлы говорит, что-то типа того, что этот файл похож на fb2, но элемент body не найден....


По поводу Book2Shelf вел переписку с автором этой проги. Дело оказалось в том, что прога лопатит не весь xml файл, а только первые байты. И ежели не находит в них тега body, то ругается. Лечится все так: в ветке реестра HKEY_USERS\S-1-5-21-436374069-789336058-839522115-1298\Software\Alex Shabarshov\Book2Shelf\Settings
есть параметр FastPrefetchBufferSize, который как раз отвечает за размер читаемого блока от книги. Этот параметр можно изменить. У меня стоит 0х2000 (8192 десятичное).
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Bamse
Новенький участник форума

Новенький участник форума

Зарегистрирован: 03.02.2005
Сообщения: 97

СообщениеДобавлено: Пт Фев 04, 2005 11:21    Заголовок сообщения: Ответить с цитатой

2Shaman
Хм. Спасибо! Сейчас попробую.
Но вопрос открыт... Из принципа уже Smile
Хочется простой скрипт, да и разобраться хочется.

--

Ага работает. Еще раз, спасибо.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Shaman
Администратор библиотеки FictionBook.Lib

Администратор библиотеки FictionBook.Lib

Зарегистрирован: 04.10.2004
Сообщения: 781
Откуда: Россия, Санкт-Петербург

СообщениеДобавлено: Пт Фев 04, 2005 12:14    Заголовок сообщения: Ответить с цитатой

Да не за что.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Bamse
Новенький участник форума

Новенький участник форума

Зарегистрирован: 03.02.2005
Сообщения: 97

СообщениеДобавлено: Сб Фев 05, 2005 16:14    Заголовок сообщения: Ответить с цитатой

Проблему я решил (вернее, мне помогли). Скоро выложу сортировщик.
Если кто-то может предоставить надежное место, буду очень благодарен (там, если килобайт наберется, то хорошо).

Добавлено спустя 1 час 52 минуты 3 секунды:

Хех... Туплю...
Я просто сюда код выложу, да и все.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Admin
Администратор информационного портала FB

Администратор информационного портала FB

Зарегистрирован: 11.06.2004
Сообщения: 1610
Откуда: Воронеж

СообщениеДобавлено: Пн Фев 07, 2005 9:02    Заголовок сообщения: Ответить с цитатой

Безсайтовым программистам (впрочем и сайтовым) предлагаю размещать файлы, относящиеся к FB на сайте. Присылайте мылом.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Пн Фев 07, 2005 13:15    Заголовок сообщения: Ответить с цитатой

Цитата:
Кто-нибудь добрый может привести Perl функцию, которая выдергивает из fb2 файла имя, фамилию автора и название книги

Ну раз никто ничего не пишет... Хватит и названия, полагаю, дальше сами догадаетесь:

Код:
my $parser = XML::LibXML->new();
my $MsgDoc=$parser->parse_file($MesFN);
my $Title=$MsgDoc->findnodes("//description/title-info/book-title")->string_value();
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


Bamse
Новенький участник форума

Новенький участник форума

Зарегистрирован: 03.02.2005
Сообщения: 97

СообщениеДобавлено: Пн Фев 07, 2005 14:16    Заголовок сообщения: Ответить с цитатой

2GribUser
Да, это я тебе писал.

Но, честно говоря в ООП я не силен.... Вот купил книжку -- читаю Smile

Почему у меня не работает такой код?
Код:
use XML::LibXML;

my $parser = XML::LibXML->new();
my $MsgDoc=$parser->parse_file($ARGV[0]);
my $Title=$MsgDoc->findnodes("//description/title-info/book-title")->string_value();
print $Title;


Я что-то не так понимаю?

Вообще, такой скрипт тоже не очень хорош.... Потому что использует XML::LibXML, которого даже в хранилице activestate нету... Я пока его нашел и установил запарился... Всякие там либы дополнительные...

Сейчас пытаюсь решить проблему через RegExp, но мешают файлы с ошибочной кодировкой... Здесь уже писали про файлы наполненые вместо букв метасимволами html...
Надо их как-то перекодировать...

Еще смотрю стандартный Парсер... Пытаюсь разобраться.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


GribUser
Автор формата FB2 - Автор библиотеки FB

Автор формата FB2 - Автор библиотеки FB

Зарегистрирован: 30.09.2004
Сообщения: 2475
Откуда: Москва

СообщениеДобавлено: Пн Фев 07, 2005 19:01    Заголовок сообщения: Ответить с цитатой

Хм... Это, вобще-то, из другой оперы кусок взял я, может там надо еще с неймспейсами что-то шаманить. Хотя должно работать.

Добавлено спустя 14 часов 25 минут 24 секунды:

ps. Посмотри еще на http://www.gribuser.ru/xml/fictionbook/2.0/software/cleanup_book.zip

Там парсер стандартный юзается.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора


unclesam
Новенький участник форума

Новенький участник форума

Зарегистрирован: 11.10.2004
Сообщения: 15
Откуда: Минск, Беларусь

СообщениеДобавлено: Вт Фев 15, 2005 16:56    Заголовок сообщения: Ответить с цитатой

Сегодня 3 часа убил на разборки с LibXML:
Вот это работает -
Код:
$MsgDoc->findnodes(q|//*[name()='description']/*[name()='title-info']/*[name()='book-title']|);

А вот это нет -
Код:
$MsgDoc->findnodes(q|//description/title-info/book-title|)

Почему - непонятно. Question Question Question
Дурдом.... Twisted Evil

Смутные подозрения на комбинацию Виндовс - LibXML - UTF-8
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


Gremlin
Зрелый участник форума

Зрелый участник форума

Зарегистрирован: 14.02.2005
Сообщения: 155

СообщениеДобавлено: Вт Фев 15, 2005 17:24    Заголовок сообщения: Ответить с цитатой

unclesam писал(а):
Сегодня 3 часа убил на разборки с LibXML:
Вот это работает -
Код:
$MsgDoc->findnodes(q|//*[name()='description']/*[name()='title-info']/*[name()='book-title']|);

А вот это нет -
Код:
$MsgDoc->findnodes(q|//description/title-info/book-title|)

Почему - непонятно. Question Question Question
Дурдом.... Twisted Evil

Смутные подозрения на комбинацию Виндовс - LibXML - UTF-8

Было подобное под Linux - LibXML - cp1251.
Больше похоже на заморочки с namespace. Когда столкнулся, то получив что-то вроде первого варианта дальше копать не стал.
По уму надо понять, как задать namespace и вызывать с его указанием (например /fb:description/fb:title-info/fb:book-title)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение


unclesam
Новенький участник форума

Новенький участник форума

Зарегистрирован: 11.10.2004
Сообщения: 15
Откуда: Минск, Беларусь

СообщениеДобавлено: Вт Фев 15, 2005 18:02    Заголовок сообщения: Ответить с цитатой

Gremlin писал(а):

Было подобное под Linux - LibXML - cp1251.
Больше похоже на заморочки с namespace. Когда столкнулся, то получив что-то вроде первого варианта дальше копать не стал.
По уму надо понять, как задать namespace и вызывать с его указанием (например /fb:description/fb:title-info/fb:book-title)

Gremlin, my respects. Exclamation

Работает, если сделать вот так -
Код:
$MsgDoc->documentElement()->setNamespace("http://www.gribuser.ru/xml/fictionbook/2.0", "fb" , 1);
my @parts = $MsgDoc->findnodes(q|//fb:description/fb:title-info/fb:book-title|);
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов www.fictionbook.org -> Сделано для FB Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group