Экспорт избранного Хабра в FB2 — скоростная PHP-версия

в 8:56, , рубрики: api, fb2, php, избранное, хабрахабр, Хабрахабр API, экспорт, электронные книги, метки: , , , , ,

В своё время я уже видел такой конвертер здесь же на Хабре, написанный на питоне, но он на моей машинке сжирал много-много-много ресурсов и ни разу не смог моё избранное (а это 400+ постов) до конца сохранить, падая то на некорректном файле, то на «кривой» статье. Пришлось переписать, результаты трудов под катом.

  • Уже было, причем дважды (в fb2, на питоне)!
    • PDF на телефоне требует больше ресурсов для просмотра.
    • питоновский скрипт сохранения в fb2 съедал у меня около 3 Гб оперативной памяти (а на старом ноутбуке ровно 3 и было), и ни разу не смог успешно завершить процесс успешно.

  • Комментарии к постам сохраняются?
    В библиотеку парсера соответствующую функцию я добавил, но сохранение в файл не сделал. Если будут идеи, как красиво отобразить комментарии ограниченными возможностями fb2-разметки — поделитесь идеей, с удовольствием доделаю следующим патчем.
  • Валидация, работоспособность файла, известные проблемы?
    В CoolReader под android открывается 100%, windows-версия FBReader может падать на некоторых статьях.
    Не всё корректно отображается — тэги таблицы удаляются, код не оборачивается в соответствующий тэг (будет в следующем патче).
    Все некорретные статьи или картинки молча отбрасываются, никакого логгирования ошибок.
  • Как запустить?
    Качаем, распаковываем в любой виртуальный хост, правим config.php под себя и открываем в браузере.
    Все нужные библиотеки или в комплекте, или докачиваются сабмодулями.
  • Где взять то?
    На github'е, вестимо.
  • Настройки?
    В файле config.php, всё подписано русским utf'ом. Можно, например, отключить сохранение картинок или сменить папки для сохранения данных.
  • Что интересного в реализации?
    • парсинг ведётся силами библиотеки phpquery
    • все действия разнесены в отдельные файлы (скачивание списка, скачивание статьи, сохранение картинки)
    • за один шаг выполняется одно атомарное действие (скачивание одной статьи, скачивание одного вложенного файла и т.п.). Таким образом памяти каждый скрипт ест мало, а работает относительно быстро.

  • Я нашел ошибку/баг/кривой код/у меня есть идея!
    Делитесь здесь, в личку, на github'е — в свободное время могу заняться.

Автор: Newbilius

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js