Пишем приложение для чтения Хабрахабр в оффлайне с помощью Data Extracting SDK
Добрый день!
Я уже рассказывал на хабре о Data Extracting
SDK, который вызвал определенный интерес у пользователей. С тех пор было
добавлено много вкусных фич и хотелось бы о них немножко рассказать. В качестве
примера было реализовано небольшое приложение — HabraPDFReader, которое
предназначено для сохранения хабратопиков в PDF файлах для оффлайн
чтения. Попутно расскажу о тонкостях реализации.
Алгоритм
Алгоритм очень простой:
- Выбираем количество обрабатываемых страниц.
- Загружаем список последних топиков.
- Отмечаем понравившиеся топики.
- Сохраняем их в PDF файлы.
Теперь подробнее.
Создаем приложение
Это будет Windows приложение, написанное на
C# версии 3.5 в VS2008 SP1.
Внешний вид показан на
рисунке:
Получаем список последних топиков (с первой
страницы):
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() };
Data Extracting SDK научился делать
запросы к DOM дереву, поэтому мы можем использовать все прелести Linq для
получения нужных нам ссылок. В нашем случае мы берем все ссылки, класс которых
равен «topic» и ссылки заканчиваются на число (это необходимо для отсеивания
ссылок типа #habracut и #comment).
Преобразование текста по ссылке в PDF файл
Данную
функциональность можно было бы легко реализовать с помощью VSTO, но мне не
хотелось привязываться к MS Office. Поэтому был найдет сервис Html2Pdf, с помощью которого мы будем
получать нашу PDF.
Код следующий:
UriHtmlProcessor proc = new UriHtmlProcessor("http://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")); }
Таким образом мы можем
получить набор PDF для чтения хабра оффлайн.
Скриншот после выполнения
программы:
Адрес проекта SDK: http://extracting.codeplex.com/
Загрузить
программу HabraPDFReader можно внизу статьи.
Жду ваши замечания и пожелания!