Просмотрщик постов пикабушников (версия 1.0, MVP)

* - MVP - minimum viable product, минимальный работоспособный продукт


Привет, Пикабу!

Меня зовут Сергей, мне 25 и я программист (хлоп-хлоп).

Летом 2019 года решил побаловаться каким-нибудь полезным пет-проектом. Итак, представляю вам программку Pikabu Profile Posts Viewer!

С ее помощью можно одним махом просмотреть все посты пользователя.


А ТЕПЕРЬ ПО ПОРЯДКУ:

0) Обязательно устанавливаем .NET Framework 4.6.2 — без него программа не запустится.

По умолчанию уже установлен в Windows 10 (v1607 и далее).

Пользователям Windows 7, 8.1, 10 (v1507-v1511) надо скачать его с сайта Майкрософта — https://dotnet.microsoft.com/download/dotnet-framework/thank....

Windows 8 в пролете, простите :(.

1) Запускаем программу.

Сверху — поле для ввода имени интересующего юзера, кнопка поиска постов в профиле, галочка укорачивателя ссылок (см. далее), кнопка сохранения найденного в текстовый файл Блокнота.

Ниже — строка статуса, показывающая сейчас, что программа готова к работе.

В правом углу — кнопка «О программе».

Ну и остальное место — табличка, куда будут выводиться посты.

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

2) Вводим имя пользователя. Если ввести меньше 5 символов, выдаст ошибку, т.к. таких коротких ников на Пикабу нет.

3) Нажимаем кнопку Найти посты.

Программа отправится на поиски, визуально «зависнув» на некоторое время. Сколько — зависит от кол-ва постов в искомом профиле и скорости вашего интернета. У меня на ADSL 10Мб/с понадобилось 15-75 секунд. На монстрах вроде IProcione не проверял :).

Пока она «виснет», можете заняться чем-нибудь другим.

На галочку пока не обращаем внимания.

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

3) Программа загрузит посты и отобразит их списком.

Строка статуса показывает, сколько всего постов имеется и на скольких страницах, а также, сколько из них удалось загрузить (это не одно и то же — если вдруг пропадет свет и т.п., отобразится только то, что успели выхватить, да и то не всегда).

Если в поле рейтинга стоит «DELETED», значит, пост был мягко удален (в браузере отображается значок корзины).

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

4) Нажимаем кнопку сохранения.

Если удалось сохранить, строка статуса сообщит об этом.

В папке, куда вы положили файл программы, появится папка "Pikabu userprofiles", а в ней — текстовые файлы (имена которых соответствуют именам пользователей).

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

5) Программа сохранит данные в текстовые файлы.

Данные сохраняются таким же списком, только вместо колонок — табуляция. Кроме того, в начале файла еще раз указывается имя пользователя, а в конце — дата последней «выхватки» данных (понятно, что легко правится вручную, но сейчас не об этом).

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

6) Можете делать теперь с ними что угодно — например, быстро перейти к посту годичной давности, просто скопировав ссылку и вставив в браузер, а не мотая профиль пользователя до Х-й страницы.


НЮАНСЫ:

1) Колонки в таблице можно менять местами, но ТОЛЬКО после закачки данных (иначе — некорректно отобразятся).

При следующей скачке (не закрывая программу) порядок столбцов сохранится.

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

2) При нажатии на заголовок колонки списка данные отсортируются по возрастанию/убыванию.

Это может занять время почти столько же, а то и больше, чем потрачено на скачку постов. Связано с временной сложностью алгоритма сортировки.

При следующей скачке (не закрывая программу) указание на сортировку по ... сохранится.

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

Недочет: поскольку все данные в списке компьютер видит как текст, то все колонки сортируются как текст — посимвольно, в т.ч. и № п/п и рейтинг (числа по сути) (см. рис.). Подобное встречается и у других программ, вроде Total Commander, но все же бывает неудобно. Надеюсь поправить со временем.

Частичный обход недочета: поскольку дата у всех постов разная, то сортировка по дате автоматически = сортировке по порядку (№ п/п).

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

3) Галочка укорачивания ссылок убирает текст — ведь он может быть любым — из ссылок на посты, оставляя только номер истории (см. рис.).

Нажимать ее следует ПЕРЕД скачкой постов.

Просмотрщик постов пикабушников (версия 1.0, MVP) Программа, Программирование, Пикабу, Пикабушники, Профиль, Помощь, Длиннопост

4) Добавлена простенькая поддержка исключений, например, если отвалился инет, или страница не найдена.


СКАЧАТЬ: http://www.mediafire.com/file/oii09nxdecfkldk (zip-архив, 161 Кб, в распакованном виде — 628 Кб)


ТЕХНИЧЕСКИЕ ПОДРОБНОСТИ ДЛЯ ПРОГРАММИСТОВ:

1) Написано на языке программирования С# с использованием библиотеки HtmlAgilityPack в среде разработки Microsoft Visual Studio Professional 2017.

2) Версия .NET framework – 4.6.2.

3) Исходный код на Github (без папки packages): https://github.com/serhiy1994/PikabuProfilePostsViewer . Можете форкнуть, тем более, что в коде остались некоторые логические дыры в закомменченных строках. Потом смерджу, если хотите.

4) Программа работает медленновато еще и потому, что я не умею в асинхронное программирование :(.


БАГ-РЕПОРТЫ И ЗАМЕЧАНИЯ: оставляйте под соответствующим комментом. Постараюсь пофиксить и обновить релиз.


БЛАГОДАРНОСТИ:

1) Двум десяткам пикабушников, чьи интересные посты заставили меня что-то придумать, чтоб их оперативно посмотреть (полный список выложу позже);

2) персонально @iranaut и @Malica за их существование в качестве пикабушников(-иц);

3) прочий народ — коллеги-программисты, чьи советы мне помогли (указаны в окне About).


Приятного пользования!

1
Автор поста оценил этот комментарий

Сергей, сможете ответить, что я делаю не так? Ваша программа на Win7 загружалась и работала без проблем. На Win10 что то не выдает список постов. Пишет неопознанная ошибка и предлагает повторить позднее.

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

хорошо, через несколько недель разгружусь и попробую посмотреть.

показать ответы
5
Автор поста оценил этот комментарий

конкретно, на примере MainForm.cs: налицо, как минимум, грязный код - дефолтные имена компонентов, типа listView1, логика работы помещена прямо в обработчик события (Button1Click), подготовка данных происходит прям "по месту", что неприемлемо во многих случаях.


Далее: у ListView есть виртуальный режим, в вашем случае использовать его - практически обязательно, т.к. в случае, когда у юзера хотя бы 1000 постов - всё будет очень печально по быстродействию работы интерфейса. Но для реализации нормальной работы с таким режимом - данные должны быть подготовлены отдельно, а для этого - должна быть разработана архитектура представления данных, как минимум.


Обработка ошибок: "An unexpected error occured" - и что из этого можно понять? Только то, что "Упс, что-то пошло не так!". Т.е. налицо парадигма "на отъебись". Если хотите нормальную обработку ошибок - то это тоже архитектурный слой.


Далее: нет обработки ошибок (раз речь зашла о ней) при работе со StreamWriter - а ну как там исключение по правам доступа выкинется?


Затем: захардкоженные информационные сообщения - недопустимы. Они должны быть в ресурсном файле, чтобы, при случае - можно было легко пересесть на мультиязычность.


Ну и, в заключение - весь код оставляет ощущение сделанного быстро, как набросок. Поймите - код обязан быть красивым и легко читаемым, это минимально необходимое условие того, что он будет нормально работать. Как говорил один авиаконструктор - не взлетит, потому что некрасивый. Это я про вот такие монструозные конструкции, которые бы надо переносить в слой представления данных, а не парсить по ходу:


postRating = doc.DocumentNode.SelectSingleNode("//div[contains(@class, 'stories-feed__container')]/article[" + i.ToString() + "]").GetAttributeValue("data-rating", "DELETED");


По простому - хотя бы статический метод класса PostParser, типа:


class PostParser

{

   public static string Rating(XMLNode node, int postNumber)

   {

      return node.SelectSingleNode("//div[contains(@class, 'stories-feed__container')]/article[" + postNumber.ToString() + "]").GetAttributeValue("data-rating", "DELETED");

   }

}


Таким образом - получаем первичную декомпозицию, что позволит в дальнейшем изменять части кода централизовано, не задумываясь о том, в каких ещё местах мы забыли поменять селекторы запроса.


Достаточно конкретно?

раскрыть ветку (1)
Автор поста оценил этот комментарий

да, благодарю.

походу надо что-то делать с моей любовью к минимализму...

Автор поста оценил этот комментарий

https://github.com/serhiy1994/PikabuProfilePostsViewer/blob/... 🤔, так вот на что пол года ушло

раскрыть ветку (1)
Автор поста оценил этот комментарий

вы не совсем правы. Я создал репозиторий и на полгода забыл о нем, что видно по истории коммитов. Перед НГ вспомнил и быстренько доделал. @XuiSGory,

показать ответы
5
Автор поста оценил этот комментарий

зашел на гатихаб проекта, ТС забыл тег "жесть" поставить

раскрыть ветку (1)
Автор поста оценил этот комментарий

а можно конкретней? (спокойным любознательным тоном)

показать ответы
1
Автор поста оценил этот комментарий

А можно на русский переключиться? А то я с французским не дружу

раскрыть ветку (1)
Автор поста оценил этот комментарий

язык программы английский. хорошо, русифицирую.

1
Автор поста оценил этот комментарий
Развивайся, молодец, но зачем это надо не особо понятно, если можно зайти в профиль, а там уже по любым фильтрам поискать что надо.
раскрыть ветку (1)
Автор поста оценил этот комментарий

лично для меня - скорость работы)

3
Автор поста оценил этот комментарий

@serhiy1994 прикрутите автоматическую возможность минусования, что уж там

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

по одному или всех постов сразу?)

показать ответы
2
Автор поста оценил этот комментарий

Более распространённый целевой фреймворк выбрать религия не позволяет?

раскрыть ветку (1)
Автор поста оценил этот комментарий

окей, понижу до версии 4.0 - максимально совместимой с ХР -  и перезалью.

показать ответы
6
Автор поста оценил этот комментарий

Ну, на домашнем компе, фиг с ним...

А на рабочем ноуте с Хрюшей? А на рабочем компе с Убунтой?

Но все-равно не понял, нафига мне это надо?

раскрыть ветку (1)
2
Автор поста оценил этот комментарий
А на рабочем ноуте с Хрюшей? А на рабочем компе с Убунтой?

Не совсем понял, что вы хотите спросить. ХР и Юбунту не поддерживает.

показать ответы
1
Автор поста оценил этот комментарий

Меня зовут Сергей, мне 25 и я программист
хм, а у меня ты помечен как

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

логично - программерством зарабатываю на жизнь, а приправы - хобби)

3
DELETED
Автор поста оценил этот комментарий

Кто это, Серёжа?

Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий

комп, на котором я все это программировал - бабушкин)

показать ответы
7
Автор поста оценил этот комментарий

Однако, испытываю двоякие чувства. Автору 25 лет. Программированием зарабатывает на жизнь. Но (в посте упомянуты оговорки, но...) - не может в многопоточное программирование, которое на C# реализуется левой пяткой. "Программа "виснет" секунд на 25" - двадцать первый век, что мешает почитать несколько примеров, и убрать всю обработку в не-GUI поток? А оттуда - через Invoke дёргать обновление какого-нибудь прогресс-бара?


Объснить себе могу это только одним - автор на позиции джуниора, и не увлекается самообразованием, хотя учебного материала - тонны.


Короче, поддержу так: ещё много работы над приложением надо сделать до того, как выкладывать. Юзер нынче избалованный ;)

раскрыть ветку (1)
Автор поста оценил этот комментарий

в объянении вы правы не полностью - как бы дико не звучало, ни разу не приходилось заниматься многопоточностью и асинхронностью.

показать ответы
2
Автор поста оценил этот комментарий

Коммент для баг-репортов

показать ответы