Здравствуйте.
Каждый эмитент на своем сайте предоставляет подробную информацию для своих акционеров. И рано или поздно каждый инвестор приходит к понимаю того, что чем раньше он узнает новостную информацию об эмитенте, тем больше прибыли он получит в данный период.
Как пример, появилась информация о выплате дивидендов, а инвестор прочел ее только на следующий день и понял, что цена акций за сутки уже возросла как раз на сумму дивидендов и покупать активы уже особого смысла не имеет!
Сегодня мы разработаем инструмент, который будет с дотошностью компьютера постоянно проверять сайт на появление новой информации и сигнализировать Вам о появлении оной.
Использовать будем новый инструмент - не 1С, а потому, пример будет элементарным, не сложным, но и не очень функциональным и тупым, хотя работу будет выполнять исправно.
Инструмент опять же не потребуется покупать. Он бесплатен. Выпускает его Microsoft и называется он Visual Studio.
Откройте любой поисковик вбейте туда строку "Visual Studio" и произведите поиск. Скорее всего первая же строка в поиске будет вести на официальный сайт для скачивания продукта. На момент написания статьи страница выглядит так:
Ны видим кнопку Скачать Visual Studio, которую и следует нажать:
Скачается инсталлер. Его следует запустить и пройти по всем шагам установки. Я установку уже произвел ранее и показать данный процесс уже не могу. Для этого мне придется удалить с ПК уже имеющуюся, что делать не буду. Тем более, установка не так уж и сложна.
Единственное что покажу, так это это компоненты, установленные конкретно у меня:
После установки, запускаем Visual Studio (на момент написания статьи у меня оно называется "Visual Studio 2022").
Видим мастер начала работы.
У меня проекты уже есть, потому слева у меня видим список. У Вас его естественно не будет, так как Вы еще ничего не создавали.
Жмем справа кнопку "Создание проекта".
Ищем "Приложение Windows Forms (Майкрософт)". Так как программировать сегодня мы будем на Visual Basic, то под название должен быть этот тег:
Выбираем и жмем кнопку далее. На следующем шаге нам необходимо как-то назвать наше будущее приложение. Я завал его "Informer"
На следующем шаге жмем Создать:
Запускается среда программирования и мы видим заготовку нашей будущей программы:
На нашей заготовке нам нужно расположить новые элементы, поля ввода, кнопку, надпись... Это находится в раскрывающейся панели элементов слева:
Добавить элемент можно или перетаскиванием или просто щелкнув по нему 2 раза. Добавьте:
- Label (1 шт)
- TextBox (2 шт)
- NumericUpDown (1 шт)
- Button (1 шт)
- Timer (1 шт)
Я расположил эти элементы так:
PS. Все элементы сразу примут название в котором указан и порядковый номер. Timer на форме не располагается. Он располагается ниже ее. Чтобы отличить TextBox1 от TextBox2, можно ориентироваться по свойствам в правом нижнем окне:
Так же как и в 1С, здесь можно попробовать запустить программу в отладке, нажав соответствующий инструмент:
Идея такова: в верхнее поле ввода вводим гиперссылку страницы, где располагается информация об эмитенте. В нижнее - текст, который будем искать на данной странице. В данном случае, я на официальном сайте ОГК -2 в разделе раскрытия информации буду искать тест 30.07.2022. В данную дату состоялось годовое собрание акционеров данного эмитента, и информация об этом здесь должна обязательно появиться. Кнопка запускает или останавливает поиск, а цифровой счетчик указывает через сколько секунд поиск нужно повторить.
Как видим, программа уже запускается, счетчик позволяет вводить числа, текст в текстбоксы заносится, кнопка нажимается... Но при этом ничего не происходит.
А все потому, что мы еще ничего не программировали.
Прежде всего, следует при запуске программы уже занести какие-то значения у наших элементов.
Закройте запущенную в отладке программу. Вернитесь в среду разработки и щелкните 2 раза на любом пустом месте нашей формы (НЕ ПО ЭЛЕМЕНТАМ, ПО ФОРМЕ).
При этом среда откроет код этой формы формы и добавит обязательный к выполнению код, который выполняется при загрузке формы.
Нам останется только его дополнить своим кодом.
Что нам надо сделать при загрузке:
- назовем форму более информативно: "Informer"
- текст надписи изменим на "не активно"
- у цифрового счетчика значение выставим в 60
- тексты у TextBox1 и TextBox2 очистим
- Текст кнопки изменим на "ПУСК"
Код процедуры Form1_Load при этом станет таким:
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Me.Text = "Informer"
Label1.Text = "не активно"
NumericUpDown1.Value = 60
TextBox1.Text = ""
TextBox2.Text = ""
Button1.Text = "ПУСК"
End Sub
Теперь при запуске наша программа будет выглядеть так:
Закройте наше приложение и вернитесь в среду разработки.
Добавим процедуру, которая будет сигнализировать о том, ради чего все это и затевалось - информацию наконец-то на сайте разместили и она найдена. Назовем ее "InformerAlert". Она издаст звуковой сигнал и выведет поверх всех окон форму "ВНИМАНИЕ". Таким образом Вы и услышите, и увидите сигнал. Код процедуры такой:
Private Sub InformerAlert()
Beep()
Dim form2 As New Form
form2.TopMost = True
form2.Text = "ВНИМАНИЕ"
form2.Show()
End Sub
Данный код просто печатаем руками.
Добавим процедуру поиска на сайте. Она осуществляет поиск и если он успешен, то запускает написанную нами ранее процедуру "InformerAlert". Назовем ее "InformerSearch". Код процедуры:
Private Sub InformerSearch()
Dim webClient As New System.Net.WebClient
Dim url As String = TextBox1.Text
Dim result As String = webClient.DownloadString(url)
Dim ISrch As Integer = InStr(result, TextBox2.Text)
If Not ISrch = 0 Then
InformerAlert()
End If
End Sub
Запрограммируем размещенный нами таймер на выполнение процедуры поиска. Для этого перейдем на вкладку конструирования и щелкнем по нему 2 раза:
Среда снова перебросит Вас к коду и дополнит его процедурой инициализации таймера. Вставьте в процедуру таймера всего одну строку:
InformerSearch()
Осталось последнее. Запрограммировать нажатие кнопки. Нажатие кнопки должно проверить запущена ли проверка, то есть запущен ли таймер. Если да, то нужно изменить надпись на "НЕ АКТИВНО" и выключить таймер. А вот если поиск еще не запущен, то изменить надпись на "активно". Выполнить поиск, выставить таймеру задержку какую пользователь выставил и запустить таймер. Так как задержка таймера в миллисекундах, а на форме мы выставляем в секундах, то количество выставленных секунд умножаем на 1000. Так же как и с таймером перейдите на вкладку формы щелкните два раза по кнопке. Среда вернет Вас к тексту кода идополнит его шаблоном нажатия на кнопку. Дополните процедуру нажатия на кнопку:
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If Timer1.Enabled = True Then
Label1.Text = "НЕ АКТИВНО"
Timer1.Enabled = False
Else
Label1.Text = "активно"
InformerSearch()
Timer1.Interval = NumericUpDown1.Value * 1000
Timer1.Enabled = True
End If
End Sub
Запустите программу в режиме отладки и проверьте ее работу. Для примера, я взял сайт ОКГ-2. Ссылка https://ogk2.ru/aktsioneram-i-investoram/informatsiya-dlya-aktsionerov/resheniya-obshchego-sobraniya-aktsionerov/ Текст поиска "18.06.2021". Слышим сигнал и видим форму ВНИМАНИЕ.
Изменим текст поиска которого еще нет на странице. Допустим изменим год. Текст поиска "18.06.2091". То звука в этом случае мы уже не услышим и информационная форма не появляется.
Работа программы так и задумывалась, но она работает только из под среды Visual Studio. Нам надо создать самостоятельную программу. Для этого существует функция публикации.
Закройте отладочную программу. вернитесь в среду разработки. Найдите в меню сборку и нажмите опубликовать выбранные элементы:
Запустится мастер. Следует выбрать следующее:
Тут не меняем:
Жмем "показать все параметры"
Выставляем параметры так:
Жмем кнопку Опубликовать:
Ждем окончания. Затем жмем на ссылку "Целевое расположение":
Откроется папка с нашей программой.
Нас интересует файл с расширением exe. Это и будет нужная нам программа. Этот файл можно копировать на флешку. Нести на другой компьютер из запускать там для работы.
Программа получилась очень простой. Она не идеальна. Что будет, когда отключат интернет или выставят таймер на 0 или поиск нужен боле сложный... Но это всего лишь пример. Это основа...
Ну а на сегодня все. При определенном интересе со стороны читателей данная статья будет продолжена...