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

    Добрый день!

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

    Жду ваши замечания и пожелания!
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 27

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

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

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

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

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

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

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

                                    Самое читаемое