В своё время я уже видел такой конвертер здесь же на Хабре, написанный на питоне, но он на моей машинке сжирал много-много-много ресурсов и ни разу не смог моё избранное (а это 400+ постов) до конца сохранить, падая то на некорректном файле, то на «кривой» статье. Пришлось переписать, результаты трудов под катом.
- Уже было, причем дважды (в fb2, на питоне)!
- PDF на телефоне требует больше ресурсов для просмотра.
- питоновский скрипт сохранения в fb2 съедал у меня около 3 Гб оперативной памяти (а на старом ноутбуке ровно 3 и было), и ни разу не смог успешно завершить процесс успешно.
- Комментарии к постам сохраняются?
В библиотеку парсера соответствующую функцию я добавил, но сохранение в файл не сделал. Если будут идеи, как красиво отобразить комментарии ограниченными возможностями fb2-разметки — поделитесь идеей, с удовольствием доделаю следующим патчем. - Валидация, работоспособность файла, известные проблемы?
В CoolReader под android открывается 100%, windows-версия FBReader может падать на некоторых статьях.
Не всё корректно отображается — тэги таблицы удаляются, код не оборачивается в соответствующий тэг (будет в следующем патче).
Все некорретные статьи или картинки молча отбрасываются, никакого логгирования ошибок. - Как запустить?
Качаем, распаковываем в любой виртуальный хост, правим config.php под себя и открываем в браузере.
Все нужные библиотеки или в комплекте, или докачиваются сабмодулями. - Где взять то?
На github'е, вестимо. - Настройки?
В файле config.php, всё подписано русским utf'ом. Можно, например, отключить сохранение картинок или сменить папки для сохранения данных. - Что интересного в реализации?
- парсинг ведётся силами библиотеки phpquery
- все действия разнесены в отдельные файлы (скачивание списка, скачивание статьи, сохранение картинки)
- за один шаг выполняется одно атомарное действие (скачивание одной статьи, скачивание одного вложенного файла и т.п.). Таким образом памяти каждый скрипт ест мало, а работает относительно быстро.
- Я нашел ошибку/баг/кривой код/у меня есть идея!
Делитесь здесь, в личку, на github'е — в свободное время могу заняться.
Автор: Newbilius