Автор Тема: [Сеть, интернет] Скрипт уведомление о свободных талончиках  (Прочитано 843 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Эта тема содержит сообщение, помеченное как лучший ответ. Кликните здесь для перехода к этому сообщению.

Оффлайн artpluss [?]

  • Новичок
  • *
  • Сообщений: 20
  • Репутация: 0
    • Награды
Здравствуйте уважаемые форумчане!

Помогите пожалуйста написать скрипт, который будет отслеживать на сайте: https://registratura96.ru свободные талончики и выводить уведомление

Конкретно интересует талончик к хирургам по этому адресу: https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1181&DocId=20559

Например при появлении на страничке (см выше ссылку) слов Ближайшее время: (это значит есть свободный талон) скрипт должен вывести уведомление.


Русское сообщество AutoIt


Оффлайн homesad [?]

  • Новичок
  • *
  • Сообщений: 2
  • Репутация: 0
    • Награды
Вот набросок, в конце работы если все ОК, показывает массив с именами врачей и их кабинетов.
слов "ближайшее время" пока не видел.

Код: AutoIt [Выделить]
#include <Array.au3>

 local  $sAB = "А,Б,В,Г,Д,Е,Ж,З,И,Й,К,Л,М,Н,О,П,Р,С,Т,У,Ф,Х,Ц,Ч,Ш,Щ,Ъ,Ы,Ь,Э,Ю,Я,а,б,в,г,д,е,ж,з,и,й,к,л,м,н,о,п,р,с,т,у,ф,х,ц,ч,ш,щ,ъ,ы,ь,э,ю,я"
 local  $aAB = StringSplit($sAB,',',2)

 local  $sLNK = 'https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1181&DocId=20559'
 local  $sBuf = InetRead($sLNK,1+2)
        If @error Then
          MsgBox(0,1,@error)
          Exit
        EndIf
        $sBuf = BinaryToString($sBuf,4)
        ;FileWrite('1.txt',$sBuf)
 local  $aDim = StringRegExp($sBuf,'<p style.*>(.*)</p>',3)
 local  $aKab = StringRegExp($sBuf,'<div style.*>(.*)</div>',3)
        If IsArray($aDim) Then
          For $i=0 to UBound($aDim)-1
            $aDim[$i] = GetQuotingStr($aDim[$i])
          Next
          If IsArray($aKab) Then
            For $i=0 to UBound($aDim)-1
              $aDim[$i]&= ' - ' & $aKab[$i]
            Next
          EndIf
          _ArrayDisplay($aDim)
        Else
          MsgBox(0,UBound($aDim),$sBuf)
        EndIf

Func GetQuotingStr($sStr,$iDebug=0)
 local  $aDim = StringSplit($sStr,';',2)
 local  $sNum
 local  $sRet = ''
        If $iDebug Then _ArrayDisplay($aDim)
        For $i=0 to UBound($aDim)-2
          $sNum = $aDim[$i]
          If StringLeft($sNum,1)=' ' Then
            $sRet&= ' '
            $sNum = StringMid($sNum,2)
          EndIf
          $sNum = Int('0' & StringMid($sNum,3))
          $aDim[$i] = $sNum
          ;MsgBox(0,$sNum,$sRet)
          $sRet&=  ( $sNum=1025 ? 'Ё' : $aAB[$sNum-1040] )
        Next
        If $iDebug Then _ArrayDisplay($aDim,$sRet)
        Return $sRet
EndFunc
 


Оффлайн artpluss [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
    • Награды
Спасибо за ваши старания. Но мне нужно немного другое, хотя ваш код мне тоже пригодится

Вот пример того, что у меня вышло

1. Просьба поправить код, если что не так
2. Не работает функция отправки уведомления на почту
3. Хотелось бы прерывать выполнение кода например сочетанием клавиш Ctrl + Alt + P

Попробуйте выбрать дерматолога и запустить код. У дерматолога всегда есть талончики

Код: AutoIt [Выделить]
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <ComboConstants.au3>
#include <WindowsConstants.au3>
#Include <IE.au3>

Local $msg, $sVer, $hGUI, $start, $hDoctor, $oIE, $index, $link, $str, $hMAIL, $exit

$sVer="версия 2019.04.18"

If WinExists(@ScriptName) Then Exit
    AutoItWinSetTitle(@ScriptName)

Opt("TrayIconHide", 1)

; Создать окно
$hGUI=GUICreate("Registratura96", 500, 500, -1, -1, BitOR($ws_minimizebox, $ws_group, $ws_caption, $ws_popup, $ws_sysmenu))

GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)

$hDoctor = GUICtrlCreateCombo ( "Терапевт", 180, 30, 90, 20)
GUICtrlSetData(-1, "Хирург" , "Терапевт") ; добавляет другие пункты и устанавливает новый по умолчанию
GUICtrlSetData(-1, "Невролог" , "Терапевт") ; добавляет другие пункты и устанавливает новый по умолчанию
GUICtrlSetData(-1, "Окулист" , "Терапевт") ; добавляет другие пункты и устанавливает новый по умолчанию
GUICtrlSetData(-1, "Дерматолог" , "Терапевт") ; добавляет другие пункты и устанавливает новый по умолчанию

$start = GUICtrlCreateButton ( "Пуск", 300, 30, 40, 20)
$exit = GUICtrlCreateButton ( "Выход", 360, 30, 40, 20)

While 1
   $msg = GUIGetMsg()
        Select
        Case $msg = -3 Or $msg = -1 Or $msg = $exit Or $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $start

            $index = GUICtrlSendMsg($hDoctor, $CB_GETCURSEL, 0, 0)

            If $index = 0 Then
;~                   Терапевт
                     $link = "https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1177"
                     _Progress ($link)
            EndIf

            If $index = 1 Then
;~                   Хирург
                     $link = "https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1181"
                     _Progress ($link)
            EndIf

            If $index = 2 Then
;~                   Невролог
                     $link = "https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1167"
                     _Progress ($link)
            EndIf

            If $index = 3 Then
;~                   Окулист
                     $link = "https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1170"
                     _Progress ($link)
            EndIf

            If $index = 4 Then
;~                   Дерматолог
                     $link = "https://rish.registratura96.ru/Doctor?CityId=city20&OrgId=13003694&DepId=99560005714&ServId=1163"
                     _Progress ($link)
            EndIf
      EndSelect
   WEnd

Func _Progress ($link)
   $i = 0
   Do
      $oIE = _IECreate ($link, 0, 1)
         If StringInStr(_IEBodyReadHTML($oIE),'<zzz class="text-primary">Ближайшее время:</zzz>') Then
            MsgBox(262208, "Информация", "Есть талончик")
            $i = 1
            _IEQuit($oIE)
;~          Здесь нужно отправить уведомление на почту, о том что появился талончик
;~          _SendMail()
         Else
;~          MsgBox(262208, "Информация", "Талончика нет")
            _IEQuit($oIE)
         EndIf

   Until $i = 1
EndFunc   ;==>_Progress

Func _SendMail()
   $str = "http://schemas.microsoft.com/cdo/configuration/"
   $hMAIL = ObjCreate ("CDO.Message")
       With $hMAIL
           .From = "[email protected]"
           .To = "[email protected]"
           .Subject = "Test"
           .TextBody = "Test"
;~         .AddAttachment ("C:\boot.ini") ;файл для отправки
       EndWith
       With $hMAIL.Configuration.Fields
           .Item ($str & "sendusing") = 2
           .Item ($str & "smtpserver") = "smtp.inbox.ru" ;SMTP Server
           .Item ($str & "smtpauthenticate") = 1
           .Item ($str & "sendusername") = "login"
           .Item ($str & "sendpassword") = "password" ;Пароль SMTP-сервер
           .Item ($str & "smtpserverport") = 465 ;Порт
           .Update
       EndWith
   $hMAIL.Send
EndFunc   ;==>_SendMail

 


Русское сообщество AutoIt

Re: [Сеть, интернет] Скрипт уведомление о свободных талончиках
« Ответ #2 Отправлен: Апрель 18, 2019, 09:10:40 »

Помечен как лучший ответ пользователем artpluss Отправлен Апрель 18, 2019, 15:18:58

Оффлайн gunter123 [?]

  • Осваивающий
  • **
  • Сообщений: 120
  • Репутация: 46
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Привет, вот что у меня получилось:

(нажмите для показа/скрытия)

Цитировать
Не работает функция отправки уведомления на почту
Добавил опцию smtpusessl, получилось отправить письмо с gmail

Цитировать
Хотелось бы прерывать выполнение кода например сочетанием клавиш Ctrl + Alt + P
Добавил

Также заменил проверку с помощью IE на InetRead

Is it future or is it past?

Оффлайн artpluss [?]

  • Новичок
  • *
  • Сообщений: 20

  • Автор темы
  • Репутация: 0
    • Награды
Привет, вот что у меня получилось:

(нажмите для показа/скрытия)
Добавил опцию smtpusessl, получилось отправить письмо с gmail
Добавил

Также заменил проверку с помощью IE на InetRead

СПАСИБО. ИМЕННО ТО ЧТО И НУЖНО БЫЛО.
Все работает. Все красиво.

Русское сообщество AutoIt

Re: [Сеть, интернет] Скрипт уведомление о свободных талончиках
« Ответ #4 Отправлен: Апрель 18, 2019, 15:26:09 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
0 Ответов
2348 Просмотров
Последний ответ Март 01, 2013, 14:22:21
от Zalman1980
11 Ответов
7826 Просмотров
Последний ответ Апрель 24, 2013, 04:26:00
от defens
1 Ответов
3689 Просмотров
Последний ответ Июнь 08, 2013, 21:40:00
от madmasles
0 Ответов
865 Просмотров
Последний ответ Сентябрь 04, 2014, 12:01:10
от Денис
1 Ответов
1980 Просмотров
Последний ответ Март 04, 2015, 22:00:12
от madmasles
0 Ответов
1035 Просмотров
Последний ответ Март 05, 2015, 15:28:03
от madmasles
3 Ответов
2145 Просмотров
Последний ответ Май 08, 2015, 19:06:10
от madmasles
0 Ответов
877 Просмотров
Последний ответ Май 09, 2015, 08:56:04
от madmasles
0 Ответов
419 Просмотров
Последний ответ Апрель 15, 2017, 15:29:18
от art22
0 Ответов
580 Просмотров
Последний ответ Июнь 22, 2017, 11:57:13
от ssvih-miaa