Экспорт Хабра в FB2

    Приветствую!

    Некоторое время назад попалась мне статья об экспорте избранного Хабра в формат FB2.
    Мне идея понравилась, но было одно 'но': необходимо было вручную запускать экспорт на локальной машине, а хотелось сразу в браузере; и во-вторых — для запуска надо было установить локально PHP и закачать исходники.

    Поэтому я решил написать расширение для браузера, которое бы позволяло просто экспортить в FB2. По ходу написания добавил также экспорт в FB2 и для Самиздата.


    Вначале решил написать userscript под Greasemonkey, но на какой-то стадии натолкнулся на неудобство разработки и запуска в Хроме таких расширений, поэтому перешел на разработку нативного расширения под Хром (возможно позже вернусь к доработке userscript версии).

    Сейчас проект еще на ранней стадии и многое из задуманого не реализовано, но даже в таком состоянии расширение уже можно использовать. Само расширение можо взять тут, а исходники посмотреть на здесь.

    Скриншоты:




    Из реализованного на текущий момент:
    1. Для статей Хабра:
      • Конвертация текста в FB2.
      • Вставка изображений из статьи.
      • Практически корректная конвертация тега code ('ужимаются' пробелы в начале строки).
      • Конвертация таблиц в текстовый вид.
      • Конвертация тегов a, b, i, s и img в соответствующие теги FB2.

    2. Для samlib'а:
      • Конвертация текста в FB2.

    Из запланированного к реализации:
    1. Поддержка добавления пользовательских конвертеров для других сайтов.
    2. Поддержка добавления других типов конвертеров (сейчас используется XSLT конвертирование).
    3. Поддержка других видов сохранения результата (сейчас сохраняется в локальный файл): GDrive, Dropbox, ...

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

    Upd. Changelog переехал сюда.
    Поделиться публикацией

    Похожие публикации

    Комментарии 39
      +1
      Давно ждал! 3837 закладок потянет?)
        0
        О каких закладках идет речь?
        • НЛО прилетело и опубликовало эту надпись здесь
            +2
            похоже речь идет об избранных постах
              0
              Все верно, об избранном
                0
                На даный момент пакетного экспорта нет, но возможно позже добавлю.
                  0
                  Только стоит учитывать, что экспорт на даный момент не очень быстрый. Страница с Хабра может экспортится 5-10 секунд, в зависимости от размера статьи и количества изображений. Поэтому экспорт 3000 статей может занять 5-10 часов. Я конечно буду оптимизтровать код, но вряд ли это сильно ускорит экспорт.
                  Книги с Самиздата тоже могут долго конвертироваться. Экспорт документа на 900к у меня занимает около 12-15 скеунд.
            0
            Отличная штука! А опцию для сохранения комментариев к конвертируемым статьям не планируете реализовать?
              0
              Тоже думал об этом, но не был уверен в необходимости такой возможности. Должно быть не очень сложно добавить. На выходных гляну.
                0
                Было бы очень славно. Только отсутствие данного функционала останавливает меня от полномасштабного использования.
                  +1
                  у меня первая мысль тоже была о комментариях.
                  Хабр такое редкое место, где комментарии могут оказаться интереснее и полезнее самой статьи.
                  +1
                  Обновил расширение. Добавлена возможность сохранения комментариев и некоторые другие улучшения. Смотри апдейт в конце статьи.
                    0
                    Спасибо добрый человек!
                  0
                  Почему-то не работает. «Converting to 'fb2'...» и тишина. Может, что не так делаю?
                    0
                    Аналогично.

                    В консоли пишет:
                    Port error: Could not establish connection. Receiving end does not exist. 
                    miscellaneous_bindings:236
                    
                    chromeHidden.Port.dispatchOnDisconnect 
                    miscellaneous_bindings:236
                    
                    Uncaught Error: Attempting to use a disconnected port object 
                    miscellaneous_bindings:58
                    
                    PortImpl.postMessage 
                    miscellaneous_bindings:58
                    
                    listener.handleEvent 
                    page_action.js:79
                    

                      0
                      А можно указать браузер, его версию, а также страницу (сайт), на которой не работает?
                      Как я уже говорил выше, это только ранняя версия и возможны глюки. В часности, есть проблемы при работе в Хромиуме, с которыми пока не разобрался.
                        0
                        Windows 7, Chrome Version 25.0.1364.172 m, эта страница
                          0
                          Странно. У меня сохраняется. Только у меня Линукс и версия 26. Может в этом проблема. Надо смотреть.
                            0
                            Обновил хром до Version 26.0.1410.43 m — проблема исчезла. Спасибо за расширение, кстати!
                              0
                              Ubuntu, chrome 26, текущая страница, не работает.
                                0
                                Ха, хром обновился утром, но, видимо, не перезапускался. Перезапустил — заработало :)
                                0
                                Ога, у меня на такой конфигурации тоже не работало с такими же. Обновился до 26-ой версии хрома и все заработало.
                          0
                          Автору огромное спасибо. До этого пользовался самописным конвертером самиздата в fb2.
                          Если принимаете фидбэк, то вот мои скромные 5 копеек:
                          1. при конверте самиздата в получившийся fb2 пришлось добавлять руками <?xml version=«1.0» encoding=«UTF-8»?>
                          2. неплохо бы сделать так, чтобы файлы с самиздата нызывались не просто book.fb2, a например <title страницы>.fb2

                            0
                            1. Добавлю.
                            2. Планирую добавить генерацию корректных имен файлов для всех сайтов.
                              0
                              Сделано. Смотрите апдейт в конце статьи.
                              0
                              При конвертации этой страницы: нумерованные списки криво преобразуются — текст слипается в одну строку.
                                0
                                Вижу. Это из-за отсутствия поддержки тега ol. Вечером добавлю.
                                +1
                                Насколько просто/сложно добавить поддержку других сайтов?
                                Например архивов популярной механики? (popmech.ru)
                                  0
                                  Сейчас мне это надо делать вручную. Для даного конкретного сайта думаю пару часов, включая тестирование и деплой.
                                    +1
                                    Я бы не был столь оптимистичен. Последний раз, когда я делал грабилку этого сайта, я был поражен ублюдочностью верстки внутри. Может что-то поменялось к лучшему за последние пару лет.
                                    0
                                    Если говорить о самой процедуре добавления поддержки, то она состоит из 2х шагов:

                                    1. Создать настройку для нового сайта в виде JSON-конфигурации. Вот как она выглядит для Хабра:
                                    habr_article = {
                                        addr: ['http://habrahabr\\.ru/post/\\d+', 'http://habrahabr\\.ru/company/\\w+/blog/\\d+'], // pages url template
                                        formatters: {
                                            fb2: { xsl: 'chrome|../pages/habr2fb2.xsl' },
                                    },
                                    

                                    В addr задаются RegExp-ы для фильтрации адресов, поддерживаемых даным конвертером.
                                    В formatters описываются форматеры и их данные поддерживаемые для указаных адресов.

                                    2. Параметр xsl в formatters.fb2 задает XSLT преобразование. Шаблон этого файла можно глянуть тут, а реализацию для Хабра тут.
                                    Во время конвертации этот файл встраивается в fb2.xsl.

                                    В дальнейшем хочу сделать добавление этих данных в панели опций.
                                      0
                                      В общем понятно, это тулза для «правильных» сайтов, фактически только для xhtml.
                                        0
                                        Не только для xhtml сайтов, для обычных тоже. Внутри производится конвертация из html формата в xhtml.
                                      0
                                      И элементы, элементы. Вот что было бы здорово.
                                      0
                                      Userscript в хроме проще некуда ставить, легче даже, чем в огнелисе. Не понятно с чем проблема?
                                        0
                                        Последние версии Хрома не поддерживают прямую установку. Надо пользоваться посредниками навроде Tampermonkey. Во вторых, с отладкой были какие-то проблемы, сейчас не вспомню. Ну и напоследок, встраивание в панель Хрома и меню опций проблематичней сделать, чем в родном расширении. Есть конечно GM_config, но он намного бедней по возможностям в сравнении с pageAction.

                                        Но, возможно, я просто не очень хорошо разобрался с разработкой userscript'ов. Как доделаю текущий вариант, гляну на userscript.
                                        0
                                        Спасибо за конвертер. Этот топик красиво законвертило, но вот, например, для habrahabr.ru/post/138666/ и habrahabr.ru/post/140012/ выдаёт пустые книги. Т.е. внутри xml правильный на первый взгляд, заголовки заполнены, но контента нет.
                                          0
                                          Поправил. Обновитесь.
                                          0
                                          Очень нужный и полезный конвертер.
                                          Но почему то не вижу картинок в экспортированных файлах, например, вот текущая страница…
                                          Fedora 17, Google Chrome 26.0.1410.43.
                                          FB2 смотреть пытаюсь FBReader'ом под этой же Федорой.

                                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                          Самое читаемое