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

Добрый день!

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

Жду ваши замечания и пожелания!
+31
24 декабря 2009, 20:07
31
sashaeve 184,1

комментарии (27)

+3
BReal #
Вот бы такое чудо в телефон + синхронизация с компьютером через Wi-fi или Bluetooth :)

P.s. Надо было добавить такую фичу в мое предложение на конкурсе HTC :)
0
YoungSkipper #
А что под синхронизацией то подразумеваеться?
На android можно все сделать на девайсе — извлечь топики, сохранить (правда в html) на флешку.
Если хотя бы 20 желающих по 5 долларов такую программу найдеться купить то можно сделать. :)
Но сомнительно — проще RSS поток получать, а потом читать.
0
Goodkat #
В RSS статьи обрезаны.
0
darkk #
Ну есть же какие-то хитрости по получению полнотектовых фидов.

Хотя, если честно, я даже рад, что они обрезаны — читать полнотекстовый фид с главной как-то затратно по времени :-)
0
BReal #
Платить то за что? Людям проще на lite.habrahabr.ru заходить, или воздержаться от прочтения :)
0
Freddy #
Ну за телефоны не скажу, а вот на винмоб и айфоне хабру читать можно уже давно :) Ну не весь конечно, а только ТОП, но тем не менее.

Прога называется mDigger (раньше это называлось Mobilizer/Newsland).

Да, версия для айфона есть только в американском аппсторе и стоит 1 бакс. В русском аппсторе появится в январе.
+11
csfmeridian #
Была у меня такая идея ХабраРидера) Вот скрин реализации:
0
Wolverine #
Чем это отличается от RSS клиентов? Например, FeedDemon :) Подписался на нужные категории и вперед…
+2
Dr_Zoidberg #
А можно исходники если Open Source? Хотелось бы посмотреть\допилить…
+2
fzfx #
что-то на что ни нажму в этом ридере — статейки не появляются.
0
ilyaster #
А комментарии, те что есть на данный момент, или возможность подгрузить их после прочтения имеется?
0
kiba95 #
Хотелось бы иметь опцию, чтобы добавлять комментарии к топику в pdf
+1
Wolverine #
Баг, Win7, 1680x1050. В spinEdit'e количества страниц первое числа не влазит из-за наезда на него label'a

0
Wolverine #
число*
0
neural #
А как насчет linux версии?
НЛО прилетело и опубликовало эту надпись здесь
+1
tiaurus #
Интерфейс ужасен.
+1
JetHedgehog #
Зато предельно функционален
–1
tiaurus #
Что там предельно функционального? Два чекбокса?
+1
JetHedgehog #
Ага. Функциональность не количеством чекбоксов определяется.
+2
snch #
не фурычит оно
+1
Danilka #
Win7 en 64: При нажатии на кнопку фетча выкидывает запрос установки флеш плеера для приложения и вне зависимости от ответа дальше ничего не делает.
+2
ippolitov #
Объяснитесь, пожалуйста, почему программа не работает и вызывает в сбое работы других приложений?
–1
sashaeve #
Какие ошибки выдает?
–1
bashor #
не удалось пустить через проксик:( и freeCap не помог…
–1
sashaeve #
Через проксю не будет работать, хотя в sdk такая функциональность предусмотрена.
0
torrie #
битая ссылка

Только зарегистрированные пользователи могут оставлять комментарии. Войдите, пожалуйста.