LINUX.ORG.RU
ФорумTalks

прошу любить и жаловать — программа для каталогизации fb2-книг


0

0

Итак, представляю вниманию местный троллей и примкнувшим к ним свою новую программу pybookshelf.

Назначение программы — каталогизация локальной библиотеки fb2-файлов. Язык программы — python. Целевая ось — Linux/UNIX, на винде не пробовал запускать, да и не хочется.

Как работает. Указываете каталоги, в которых лежат книги, после чего программа их рекурсивно индексирует, находя файлы fb2 (зазипованные тоже). После индексации можно использовать.

Задача стояла не визуализировать реляционную субд, а предоставить удобные возможности навигации и поиска. Поиск работает по авторам-названиям. Навигация — по авторам, названиям, жанрам и всему такого прочему. Текущие скриншоты можно посмотреть тут ( http://code.google.com/p/pybookshelf/wiki/ScreenshotsAlpha001 ).

Статус разработки. Пока ещё полуконцепт-полуальфа. Ядро программы есть, всякие рендерилки и прочее — тоже. Осталось забить фичами. Отзывы и прочие предложения приветствуются.

Как установить. Поскольку программа в стадии разработки, готовых архивов/пакетов нет, получить можно напрямую из subversion, например, так:

svn checkout http://pybookshelf.googlecode.com/svn/trunk/ pybookshelf-read-only

Заходим в каталог и запускаем pybookshelf.py

Системные требования. python2.5, python-lxml, python-gtkmozembed, python-gtk, pysqlite3, PIL. Возможно, что-то забыл, если вспомню, добавлю на главной странице проекта ( http://code.google.com/p/pybookshelf/ )

Координаты обратной связи тут http://code.google.com/p/pybookshelf/wiki/Feedback

Ответ на: комментарий от Neko

> Лучше бы нормальную читалку написал. fbreader не радует.

Есть AlReader2 на КПК, нормальнее некуда. А читать на компьютере — это для извращенцев.

annoynymous ★★
() автор топика

Симпатично...

Еще бы встроенную читалку... И поиск по сайтам с fb2-книгами.. Воообще-бы цены не было.

mono ★★★★★
()
Ответ на: комментарий от mono

> Еще бы встроенную читалку... И поиск по сайтам с fb2-книгами.. Воообще-бы цены не было.

М. б. интегрировать с FBReader как-нибудь?

GFORGX ★★★
()
Ответ на: комментарий от annoynymous

Ну у меня кпк нет, поэтому занимаюсь извращениями.

+voice к реквесту моно.

Neko
()
Ответ на: комментарий от GFORGX

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

annoynymous ★★
() автор топика
Ответ на: комментарий от GFORGX

Можно, уже есть кнопка «читать книгу», но пока не работает. Также в планах есть создание встроенной простейшей читалки, чтобы книгу можно было оценить.

annoynymous ★★
() автор топика
Ответ на: комментарий от annoynymous

> А читать на компьютере — это для извращенцев.

Эт еще почему? Потому что экран большой, не то что на кпк?

anonymous
()
Ответ на: комментарий от mono

> И поиск по сайтам с fb2-книгами.. Воообще-бы цены не было.

Были бы ещё эти сайты… Везде хотят денег, но над идеей подумаю. Можно ещё какой-нибудь интерфейс до fantlab сделать, тоже надо думать.

annoynymous ★★
() автор топика
Ответ на: комментарий от anonymous

> Эт еще почему? Потому что экран большой, не то что на кпк?

Ну, ок. Читайте с компьютера. Лично мне это неудобно, формфактор мешает. А с КПК — удобно, в транспорте, например. Или просто лёжа на диване.

annoynymous ★★
() автор топика
Ответ на: комментарий от annoynymous

> Из PDF практически нечего извлекать, там метаданных — кот наплакал. Но реализовать можно, когда основной функционал обкатается.

ели что, про пдф есть такая штука:

http://code.google.com/p/gpapers

overmind88 ★★★★★
()
Ответ на: комментарий от annoynymous

>Из PDF практически нечего извлекать, там метаданных — кот наплакал. Но реализовать можно, когда основной функционал обкатается.

можно самому вписывать данные для каждого ПДФ.

mono ★★★★★
()

зачёт, хотя предпочтительней было бы видеть вместо

>python-gtkmozembed, python-gtk

pyQT

lazyklimm ★★★★★
()
Ответ на: комментарий от overmind88

> если честно, хотелось бы чего-то вроде http://home-lib.net/

Смотрел, но лично мне такая идеология программы не нравится. Слишком много данных на экране, «браузерный» интерфейс показался удобнее.

annoynymous ★★
() автор топика
Ответ на: комментарий от anonymous

> lib.rus.ec Они что уже просят денех, чтоль?

Там качество книг не фонтан. Либо невалидный FB2, либо даже невалидный XML. Часто никакого форматирования, разбиения на главы и так далее.

annoynymous ★★
() автор топика
Ответ на: комментарий от mono

> можно самому вписывать данные для каждого ПДФ.

Можно. Посмотрим. Пока хочется прикрутить возможность изменять метаданные в имеющихся fb2-файлах. А там и до PDF дело дойдёт.

annoynymous ★★
() автор топика

ещё бы туда функционал редактора - было бы вообще прелестно, например - серию подправить или опечатку в тексте

overmind88 ★★★★★
()
Ответ на: комментарий от overmind88

>>если честно, хотелось бы чего-то вроде http://home-lib.net/

Да, действительно, хотя бы основной функционал: - возможность добавления не fb2 форматов, по возможности парсится метаинформация (pdf?, html, ...) - назначение форматам сторонних читалок - отметка прочитаных

ne3x
()
Ответ на: комментарий от annoynymous

ещё вроде неплохой каталогизатор был в icebookreader, по крайней мере - моя тётка им пользуется

overmind88 ★★★★★
()
Ответ на: комментарий от ne3x

имхо, каталогизатору читать ничего не надо, читают соответсвующие проги. его дело хранить метаинформацию/пути к книгам. да, и лучше бы это было не Gtk:), но вообще без разницы, лишь бы функционал необходимый был.

ne3x
()
Ответ на: комментарий от ne3x

>Были бы ещё эти сайты… Везде хотят денег, но над идеей подумаю. Можно ещё какой-нибудь интерфейс до fantlab сделать, тоже надо думать.

lib.rus.ec

bioreactor ★★★★★
()

а, ещё у многих линуксоидов можно встретить fb2.gz и fb2.bz2

overmind88 ★★★★★
()
Ответ на: комментарий от ne3x

>имхо, каталогизатору читать ничего не надо

+1. Из него только должна удобно вызываться внешняя читалка.

KRoN73 ★★★★★
()
Ответ на: комментарий от overmind88

> а в качестве читалки можно прикрутить pybookreader/ornametbook они тоже на pygtk

Лично у меня они глючат безбожно.

anonymous
()
Ответ на: комментарий от KRoN73

>>имхо, каталогизатору читать ничего не надо

>+1. Из него только должна удобно вызываться внешняя читалка.

это все равно что сказать "амароку совершенно не обязательно уметь играть музыку"

mono ★★★★★
()
Ответ на: комментарий от mono

> это все равно что сказать "амароку совершенно не обязательно уметь играть музыку"

да, было бы неплохо когда-нибудь увидеть что-то типа амарока для fb2, но, видимо, не сейчас

overmind88 ★★★★★
()
Ответ на: комментарий от mono

>это все равно что сказать "амароку совершенно не обязательно уметь играть музыку"

Нет. Интегрированность медиаменеджера и проигрывателя - требование разумное. Музыка быстро меняется с одной композиции на другую, требует массы интеграционных решений, начиная с простановки оценок, кончая подсказками last.fm

А с книжкой что может понадобиться в плане интеграции?

Вообще, темпы разные. 5 минут на песню или 50 часов на книгу...

KRoN73 ★★★★★
()
Ответ на: комментарий от overmind88

> вчера запускал орнамент из pybookreader 0.5 = отлично работал

А у меня рэндомно сохраняет настройки и позицию чтения в книге. А book-manager не запускается принципиально. Из-за этого в итоге слез на fbreader :(

anonymous
()
Ответ на: комментарий от KRoN73

> 5 минут на песню или 50 часов на книгу...

Ты всегда знаешь какую книгу хочешь читать? Никогда не был в мучительных раздумиях, чего бы еще такого осилить перед сном? Никогда не бывало, что откроешь книгу, прочтешь пару страниц и понимаешь, что это не то?

anonymous
()

aifiltr0@invyl:~/Documentz/dev/other/pybookshelf-read-only$ ./pybookshelf.py
Traceback (most recent call last):
File "./pybookshelf.py", line 47, in <module>
locale.setlocale(locale.LC_ALL, 'ru_RU')
File "/usr/lib/python2.5/locale.py", line 478, in setlocale
return _setlocale(category, locale)
locale.Error: unsupported locale setting

запустилось после исправление ru_RU на ru_RU.UTF8. Однако коллекцию сканить отказался:
aifiltr0@invyl:~/Documentz/dev/other/pybookshelf-read-only$ ./pybookshelf.py
location: /usr/lib/xulrunner-1.9/libxpcom.so
before 3


ERROR: INSERT INTO search_index_table (file_id, index_string) VALUES (?, ?)
ERROR: Arguments: (1, '\xd0\x95\xd0\xbb\xd0\xb8\xd0\xb7\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x82\xd0\xb0 \xd0\x90\xd0\xb1\xd0\xb0\xd1\x80\xd0\xb8\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0-\xd0\x 9a\xd0\xbe\xd0\xb6\xd1\x83\xd1\x85\xd0\xbe\xd0\xb2\xd0\xb0 \xd0\x94\xd0\xb2\xd0\xb5\xd1\x80\xd1\x8c \xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8 e\xd1\x8e')
ERROR: Unable to commit changes into the database
Traceback (most recent call last):
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 332, in run
_ab_list, _sb_list, _genres_list = process_one_file(cur, fpath, id)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 125, in process_one_file
_ab_list, = _adding_new_authors_links(id, book.authors(), book_title, cur)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 62, in _adding_new_authors_links
database.execute(query, args=(file_id, index_string), cursor=cursor)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/database. py", line 119, in execute
raise exceptions.DbError(str(e))
DbError: DbError : You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
ERROR: INSERT INTO search_index_table (file_id, index_string) VALUES (?, ?)
ERROR: Arguments: (1, '\xd0\x95\xd0\xbb\xd0\xb8\xd0\xb7\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x82\xd0\xb0 \xd0\x90\xd0\xb1\xd0\xb0\xd1\x80\xd0\xb8\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0-\xd0\x 9a\xd0\xbe\xd0\xb6\xd1\x83\xd1\x85\xd0\xbe\xd0\xb2\xd0\xb0 \xd0\x94\xd0\xb2\xd0\xb5\xd1\x80\xd1\x8c \xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8 e\xd1\x8e')
ERROR: Unable to commit changes into the database
Traceback (most recent call last):
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 332, in run
_ab_list, _sb_list, _genres_list = process_one_file(cur, fpath, id)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 125, in process_one_file
_ab_list, = _adding_new_authors_links(id, book.authors(), book_title, cur)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 62, in _adding_new_authors_links
database.execute(query, args=(file_id, index_string), cursor=cursor)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/database. py", line 119, in execute
raise exceptions.DbError(str(e))
DbError: DbError : You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.
ERROR: INSERT INTO search_index_table (file_id, index_string) VALUES (?, ?)
ERROR: Arguments: (1, '\xd0\x95\xd0\xbb\xd0\xb8\xd0\xb7\xd0\xb0\xd0\xb2\xd0\xb5\xd1\x82\xd0\xb0 \xd0\x90\xd0\xb1\xd0\xb0\xd1\x80\xd0\xb8\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb0-\xd0\x 9a\xd0\xbe\xd0\xb6\xd1\x83\xd1\x85\xd0\xbe\xd0\xb2\xd0\xb0 \xd0\x94\xd0\xb2\xd0\xb5\xd1\x80\xd1\x8c \xd0\xb2 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb8\xd1\x81\xd0\xbf\xd0\xbe\xd0\xb4\xd0\xbd\xd1\x8 e\xd1\x8e')
ERROR: Unable to commit changes into the database
Traceback (most recent call last):
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 332, in run
_ab_list, _sb_list, _genres_list = process_one_file(cur, fpath, id)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 125, in process_one_file
_ab_list, = _adding_new_authors_links(id, book.authors(), book_title, cur)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/collectio n.py", line 62, in _adding_new_authors_links
database.execute(query, args=(file_id, index_string), cursor=cursor)
File "/home/aifiltr0/Documentz/dev/other/pybookshelf-read-only/pybookshelf/database. py", line 119, in execute
raise exceptions.DbError(str(e))
DbError: DbError : You must not use 8-bit bytestrings unless you use a text_factory that can interpret 8-bit bytestrings (like text_factory = str). It is highly recommended that you instead just switch your application to Unicode strings.


AiFiLTr0 ★★★★★
()
Ответ на: комментарий от anonymous

>Ты всегда знаешь какую книгу хочешь читать?

Не всегда. Но при чём тут интеграция читалки с каталогом?

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Не всегда. Но при чём тут интеграция читалки с каталогом?

Ты свои посты читаешь? Ты сам как аргумент указал разный темп смены книг и треков. Я тебе ответил, что темп смены книг (при выборе что почитать) может быть весьма быстрым.

anonymous
()
Ответ на: комментарий от anonymous

>Ты сам как аргумент указал разный темп смены книг и треков.

Это лишь комментарий даже, не аргумент :)

И то, что ты некоторое время поберебираешь по одной книге в 2-10 минут не отменяет всё равно низкого темпа чтения по отношению к музыке.

KRoN73 ★★★★★
()

а если прикрутить систему плагинов/модулей по типу муз.прогрывателей? устанавливаешь новый плагин - умеет парсить/просматривать новый тип файлов.

ne3x
()
Ответ на: комментарий от annoynymous

> Везде хотят денег

По автору/названию/серии можно искать совершенно бесплатно и даже без регистрации. Что найдётся - уже пользователь будет решать, купить или нет.

INFOMAN ★★★★★
()
Ответ на: комментарий от ne3x

> а если прикрутить систему плагинов/модулей по типу муз.прогрывателей? устанавливаешь новый плагин - умеет парсить/просматривать новый тип файлов.

Это тоже в планах. Сначала нужно устаканить базу данных, интерфейс, прежде чем подобное реализовывать. Код уже писался в расчёте на плагины, так что всё впереди :)

FB2 очень хорошо в том смысле, что он предоставляет очень большое (пожалуй, даже максимально возможное) количество метаданных, поэтому систему сначала обкатать на нём, а потом уже браться за другие форматы.

annoynymous ★★
() автор топика
Ответ на: комментарий от anonymous

> прочтешь пару страниц и понимаешь, что это не то?

причём после того, как деньги уже уплачены.

INFOMAN ★★★★★
()
Ответ на: комментарий от mono

>>это все равно что сказать "амароку совершенно не обязательно уметь играть музыку"

если делать только FB2-каталогизатор, то не вижу смысла, их итак хватает, тот же FBReader вполне себе работает.

книги хранятся в большом количестве форматов, поэтому не стоит зацикливаться только на fb2. поэтому же не стоит реализовывать просмотрщики всех форматов. либо добавлять их плагинами.

ne3x
()
Ответ на: комментарий от ne3x

> если делать только FB2-каталогизатор, то не вижу смысла, их итак хватает, тот же FBReader вполне себе работает.

Не хватает их, в том-то и проблема. Я примерно десяток разнообразных перебрал, несколько штук на линуксе работали. И все они мне не понравились, мне эта «реляционная» форма представления информации о книгах жутко не нравится. Неудобно ходить по всем этим спискам, выпадающим меню и прочим. Особенно если книг много тысяч. Некоторые каталогизаторы настолько «заточены под всё», что не умеют практически ничего, поэтому я и взялся писать каталогизатор, который устраивает меня и удовлетворяет моим запросам. А мои запросы практически на 99% ограничиваются форматом FB2.

annoynymous ★★
() автор топика
Ответ на: комментарий от annoynymous

>>практически на 99% ограничиваются форматом FB2 художественная - да, у меня тоже художественная на 99.9% в fb2

тем не менее, очень много тех.литературы хранится в pdf, djvu, txt Хотелось бы их тоже упорядочивать

ne3x
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.