Пишем приложение для чтения Хабрахабр в оффлайне с помощью Data Extracting SDK

четверг, 24 декабря 2009, Александр Краковецкий

Добрый день!

Я уже рассказывал на хабре о 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 можно внизу статьи.

Жду ваши замечания и пожелания!


Ищите нас в интернетах!

Комментарии

Свежие вакансии