Pull to refresh

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

Reading time2 min
Views799
Добрый день!

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

Жду ваши замечания и пожелания!
Tags:
Hubs:
Total votes 53: ↑42 and ↓11+31
Comments27

Articles