Pull to refresh

Экспорт Избранного на Хабре в PDF

Python *PDF
Доброго времени суток, хабровчане!


Думаю многих из вас когда-либо посещала мысль «вот бы сохранить статьи с Хабра».
Такая же мысль посетила и меня два дня назад. Сохранить захотел не просто каждую статью, а только те, что в избранном, да не поштучно, а сразу всё скопом.
Первая мысль — надо написать скрипт, который всё это вытянет. Python я уже подучил, но вот с генерацией PDF на нем сталкиваться ещё не приходилось.

Закручинился я было… Но OpenSource и Хабр спасли меня!
Краткая суть статьи для тех, кому не интересно много читать
В статье описан доработанный скрипт на Python fav2pdf.
Изначальный автор скрипта vrtx, за что ему большое спасибо.
«Usage — лучше тысячи слов!»
usage: fav2pdf.py [-h] [-d OUTPUT_DIR] [--from-date FROM_DATE]
                  [--to-date TO_DATE] [--all-in-one]
                  [--only-hubs [ONLY_HUBS [ONLY_HUBS ...]]] [--no-comments]
                  [--no-symlinks]
                  user

Tool for save favorite posts from habrahabr.ru in pdf's or html's

positional arguments:
  user                  habrahabr.ru username

optional arguments:
  -h, --help            show this help message and exit
  -d OUTPUT_DIR, --output-dir OUTPUT_DIR
                        Directory for output
  --from-date FROM_DATE
                        From date
  --to-date TO_DATE     To date
  --all-in-one          Save all posts in one PDF-file
  --only-hubs [ONLY_HUBS [ONLY_HUBS ...]]
                        Save only posts from hubs. For multiple: "--only-hubs
                        Hub1 Hub2 --"
  --no-comments         Dont save comments from posts
  --no-symlinks         Dont create symlinks to posts
  --create-html         Create html's instead of pdf's
  --create-url-list     Just save user.txt with all links



Из чего собрана картинка
Ещё раз спасибо Хабру. КДПВ собрана из двух, которые были в статьях раз и два.

После первой мысли меня посетила вторая. Наверняка не я один над этим задумывался. И стал методично обыскивать Хабр в поисках чего-нибудь вкусненького. И довольно быстро наткнулся на статью товарища vrtx, где он описывал примерно то, что я и хотел.

Но как всегда есть НО:
его скрипт fav2pdf.py собирает все статьи из избранного и сливает их в один PDF, да ещё и без комментариев, а в них часто намного больше ценной информации, чем бывает в самой статье.
Мне же хотелось иметь по отдельной PDF-ке на статью. Иметь возможность выбора: с коментариями или без, иметь или нет разбивку по хабам...

Сделав форк скрипта fav2pdf.py (за что низкий поклон движению OpenSource), я сначала сделал мелкие доработки, чтобы всё сохранялось по отдельным файлам. Порадовал автора тем, что его наработки кому-то пригодились.

Правда потом мне стало немного стыдно. Я кое-как поправил скрипт и сделал, что было нужно мне. Но не все же хабражители знают python и могут поправить скрипт под свои нужды.

Поэтому я потратил ещё немного времени и допилил скрипт fav2pdf до вполне себе полезной утилиты.
Теперь скрипт дает возможность:
— выбрать директорию, куда можно сохранить pdf (правда для набора pdf'ок будут созданы подпапки posts и hubs)
— задать ограничение по времени (например, сохранить только статьи за 2013 год)
— выбрать сохранять или нет комментарии
— сохранить все в один pdf или разбить на много pdf'ок
— если много pdf'ок, то можно ещё создать рубрикатор из симлинков (подпапки hubs/hub_name с симлинками на posts/post_id.pdf), чтобы можно было легче ориентироваться в коллекции.

Зависимости скрипта
Для корректной работы скрипта мне понадобилось через pip (для pyhton2) поставить следующие пакеты:
— pisa
— reportlab
— html5lib
— requests
— lxml

Параметры командной строки утилиты
usage: fav2pdf.py [-h] [-d OUTPUT_DIR] [--from-date FROM_DATE]
                  [--to-date TO_DATE] [--all-in-one]
                  [--only-hubs [ONLY_HUBS [ONLY_HUBS ...]]] [--no-comments]
                  [--no-symlinks]
                  user

Tool for save favorite posts from habrahabr.ru in pdf's or html's

positional arguments:
  user                  habrahabr.ru username

optional arguments:
  -h, --help            show this help message and exit
  -d OUTPUT_DIR, --output-dir OUTPUT_DIR
                        Directory for output
  --from-date FROM_DATE
                        From date
  --to-date TO_DATE     To date
  --all-in-one          Save all posts in one PDF-file
  --only-hubs [ONLY_HUBS [ONLY_HUBS ...]]
                        Save only posts from hubs. For multiple: "--only-hubs
                        Hub1 Hub2 --"
  --no-comments         Dont save comments from posts
  --no-symlinks         Dont create symlinks to posts
  --create-html         Create html's instead of pdf's
  --create-url-list     Just save user.txt with all links



На сим всё. Если кому понравилось, то пользуйтесь на здоровье!
Если кому-то чего-то не хватает, то пишите фич-реквест в комментах, по мере сил постараюсь реализовать.

PS. Реализован вывод в html. (В спойлерах обновлены описания командной строки.)
PS2. Реализован вывод в txt простого списка url постов. Все ограничения, что вы можете задать из командной строки (даты, хабы), распространяются и на этот список. (В спойлерах обновлены описания командной строки. )
Tags:
Hubs:
Total votes 87: ↑86 and ↓1 +85
Views 34K
Comments Comments 93