Как стать автором
Обновить

Приложение для чтения хабра в оффлайне

Время на прочтение2 мин
Количество просмотров838
Добрый день!

Я уже рассказывал на хабре о Data Extracting SDK, который вызвал определенный интерес у пользователей. С тех пор было добавлено много вкусных фич и хотелось бы о них немножко рассказать. В качестве примера было реализовано небольшое приложение — HabraPDFReader, которое предназначено для сохранения хабратопиков в PDF файлах для оффлайн чтения. Попутно расскажу о тонкостях реализации.

Алгоритм


Алгоритм очень простой:
1. Выбираем количество обрабатываемых страниц.
2. Загружаем список последних топиков.
3. Отмечаем понравившиеся топики.
4. Сохраняем их в PDF файлы.

Теперь подробнее.

Создаем приложение


Это будет Windows приложение, написанное на C# версии 3.5 в VS2008 SP1.

Внешний вид показан на рисунке:

image

Получаем список последних топиков (с первой страницы):

UriHtmlProcessor proc = new UriHtmlProcessor(new Uri("http://habrahabr.ru/new/page1/"));
proc.Initialize();

var links = from l in proc.Links
      where l.Class == "topic" && EndsWithInt(l.Href) == true
      select new ResultItem{
        Link = l.Href,
        TopicName = l.Text.ToWindows1251()
      };


* This source code was highlighted with Source Code Highlighter.

Data Extracting SDK научился делать запросы к DOM дереву, поэтому мы можем использовать все прелести Linq для получения нужных нам ссылок. В нашем случае мы берем все ссылки, класс которых равен «topic» и ссылки заканчиваются на число (это необходимо для отсеивания ссылок типа #habracut и #comment).

Преобразование текста по ссылке в PDF файл


Данную функциональность можно было бы легко реализовать с помощью VSTO, но мне не хотелось привязываться к MS Office. Поэтому был найдет сервис Html2Pdf, с помощью которого мы будем получать наши PDF файлы.

Код следующий:

UriHtmlProcessor proc = new UriHtmlProcessor("<www.htm2pdf.co.uk/?url=наш линк");
proc.Initialize();
var pdf = proc.Links.Where(ll => ll.Text == "Download PDF").FirstOrDefault();

if (pdf != null)
{
  Uri uri = pdf.Href.FixUrl(new Uri("http://www.htm2pdf.co.uk/"));
  proc.Download(uri, Path.Combine(<папка, куда сохранять>, "имя_файла.pdf"));
}


* This source code was highlighted with Source Code Highlighter.


Таким образом мы можем получить набор PDF для чтения хабра оффлайн.

Скриншот после выполнения программы:

image

Адрес проекта SDK: http://extracting.codeplex.com/ (там еще пока находится старый вариант)

Загрузить программу HabraPDFReader

Жду ваши замечания и пожелания!
Теги:
Хабы:
Всего голосов 53: ↑42 и ↓11+31
Комментарии27

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
19 сентября
CDI Conf 2024
Москва
20 – 22 сентября
BCI Hack Moscow
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
25 сентября
Конференция Yandex Scale 2024
МоскваОнлайн
28 – 29 сентября
Конференция E-CODE
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн