Версия AutoIt: 3.
Доброго времени и с наступившим 2012.
На форуме попался скрипт по отправке смс
хочу к нему прикрутить рассылку погоды.
что то на ковырял -скрипт полурабочий.Не хватает в принципе элементарных знаний.
Логин и пароль изменен :laugh:
Надеюсь ,что это идея пригодиться не только мне
Описание:
Примечания:
Доброго времени и с наступившим 2012.
На форуме попался скрипт по отправке смс
хочу к нему прикрутить рассылку погоды.
что то на ковырял -скрипт полурабочий.Не хватает в принципе элементарных знаний.
Логин и пароль изменен :laugh:
Надеюсь ,что это идея пригодиться не только мне
Код:
#Include <INet.au3> ;Подключаем библиотеку
;**************************AutoIt_MA v0.1****************************************
;****AutoItv3.3.6.1 ****
;****Author:Renz ****
;********************************************************************************
;константы протокола mrim
Const $CS_MAGIC = 0xDEADBEEF
Const $CS_PROTO = 0x00010013 ;ma v1.13
Const $MRIM_CS_HELLO = 0x00001001
Const $MRIM_CS_HELLO_ACK = 0x00001002
Const $MRIM_CS_LOGIN_ACK = 0x00001004
Const $MRIM_CS_LOGIN_REJ = 0x00001005
Const $MRIM_CS_PING = 0x00001006
Const $MRIM_CS_MESSAGE = 0x00001008
Const $FST_SEQ = 0x00000001
Const $RESERVED = "00000000000000000000000000000000"
Const $FROM = 0x00000000
Const $FROMPORT = 0x00000000
Const $DLENZERO = 0x00000000
Const $MRIM_CS_LOGIN2 = 0x00001038
Const $STATUS_OFFLINE = 0x00000000
Const $STATUS_ONLINE = 0x00000001
Const $STATUS_AWAY = 0x00000002
Const $STATUS_UNDETERMINATED = 0x00000003
Const $STATUS_FLAG_INVISIBLE = 0x80000000
Const $FROM_LOGIN_HZ = 0x0000FF03
Const $MRIM_CS_SMS = 0x00001039
Const $STATUS_SMS = 0x00000004
; моё начало
$HTML = _INetGetSource('http://www.mskpogoda.ru/') ;Получаем HTML код страницы
FileWrite(@ScriptDir & '\pog.txt', $HTML) ;Записываем полученный код в файл
$sSearched = 'В Москве:</td' ;Текст который ищем
$sText1 = FileRead('pog.txt') ;Читаем файл
$aLines = StringReplace($sText1, ">",@CRLF) ;Разбиваем текст на строки, строки помещаем в массив
$df=FileWrite('pog1.txt', $aLines)
FileClose($sText1)
FileClose($df)
;$sSearched = 'text' ;Текст который ищем
$sText = FileRead('pog1.txt') ;Читаем файл
$aLines = StringSplit($sText, @CRLF, 1) ;Разбиваем текст на строки, строки помещаем в массив
FileClose($sText)
For $i = 1 To $aLines[0] Step +1
If StringInStr($aLines[$i], $sSearched) Then $f=$i
; If StringInStr($aLines[$i], $sSearched) Then MsgBox(0, 'Found', 'Line ' & $i & @CRLF & $aLines[$i]) ;В каждой строке ищем текст, если текст найден, выдаём сообщение с номером строки, где нашли
Next
;$gorod=FileReadLine ('pog1.txt',$f)
$vb=FileOpen('pog1.txt',1)
$dfd=FileOpen('pog2.txt',2)
;$gorod=
FileWrite ($dfd,$f )
; моё конец
$STATUS_SMS_STR = "status_24"
$status_str ="sms"
$login= "[email protected]" ;логин
$pass= "dedfgllnokia" ;пароль
$name_clt = 'client="magent" version="5.3" build="2546"'
$name_clt2 = "MRA 5.3 (build 2546);"
$RU ="ru"
$sms_msg = "+2 -3 ветер снег" ;сообщение
$nom_tel = "+79169445672" ;номер телефона
;**********************msg hello*****************************************************
$hello_title = _Rotate_cl($CS_MAGIC) &_Rotate_cl($CS_PROTO) & _Rotate_cl($FST_SEQ) & _Rotate_cl($MRIM_CS_HELLO) & _Rotate_cl($DLENZERO) & _Rotate_cl($FROM) & _Rotate_cl($FROMPORT)
$hello_msg = Binary ( $hello_title ) & $RESERVED
;MsgBox(1,"$hello_msg--IsBinary",IsBinary($hello_msg))
;**********************msg login*****************************************************
$login_str = _string_UPL($login) & _string_UPL($pass) & _Rotate_cl($STATUS_SMS) & _string_UPL($STATUS_SMS_STR) & _string_UPL_RU($status_str) & _Rotate_cl($FROM) & _Rotate_cl($FROM_LOGIN_HZ)
$login_str = $login_str & _string_UPL($name_clt) & _string_UPL($RU) & _string_UPL($name_clt2)
$login_str = Binary($login_str)
;MsgBox(1,"$login_str--IsBinary",IsBinary($login_str))
$DLENLOGIN = BinaryLen ($login_str)
;MsgBox(1,"BinaryLen",$DLENLOGIN)
$login_title = _Rotate_cl($CS_MAGIC) &_Rotate_cl($CS_PROTO) & _Rotate_cl($FST_SEQ+1) & _Rotate_cl($MRIM_CS_LOGIN2) & _Rotate_cl($DLENLOGIN) & _Rotate_cl($FROM) & _Rotate_cl($FROMPORT)
$login_msg = Binary ( $login_title ) & $RESERVED & StringTrimLeft( String($login_str),2)
;$login_msg = Binary ($login_msg)
;MsgBox(1,"$login_msg",$login_msg)
;Exit
;****************msg ping************************************************************
$ping_title1 = _Rotate_cl($CS_MAGIC) &_Rotate_cl($CS_PROTO)
$ping_title2 = _Rotate_cl($MRIM_CS_PING) & _Rotate_cl($DLENZERO) & _Rotate_cl($FROM) & _Rotate_cl($FROMPORT)
;***************msg sms**************************************************************
$sms_str = _Rotate_cl($DLENZERO) & _string_UPL($nom_tel) & _string_UPL_RU($sms_msg)
$sms_str = Binary($sms_str)
$dlensms = BinaryLen($sms_str)
$sms_title1 = _Rotate_cl($CS_MAGIC) & _Rotate_cl($CS_PROTO) ;& п\номер пакета
$sms_title2 = _Rotate_cl($MRIM_CS_SMS) & _Rotate_cl($dlensms) & _Rotate_cl($FROM) & _Rotate_cl($FROMPORT)
;****************Инициировать использование службы TCP*******************************
If TCPStartup() = 0 Then
MsgBox(1,"TCP","Неудалось инициализировать службу TCP",5)
EndIf
;***************создание сокета для подкл. к серверу*********************************
Do
$ip_srv = _GetMrimIp()
$socket_srv = TCPConnect( $ip_srv[0], $ip_srv[1] )
Until $socket_srv <> -1
;***************инициализация клиента на сервере*************************************
TCPSend($socket_srv,$hello_msg)
While 1
$msg_srv = TCPRecv($socket_srv, 2048)
If $msg_srv <> "" Then
$rez = _ReadMsgSrv($msg_srv)
If @error <> -1 Then
If $rez[0] = Binary($MRIM_CS_HELLO_ACK) Then
TCPSend($socket_srv,$login_msg)
$interval = $rez[1]
;MsgBox(1,"interval_ping",$interval_ping)
ElseIf $rez[0] = Binary($MRIM_CS_LOGIN_ACK) Then
ExitLoop
EndIf
EndIf
EndIf
Wend
;**************сам клиент********************************************************
$first_ping_msg = $ping_title1 & Binary(0x00000003) & $ping_title2 & $RESERVED
TCPSend($socket_srv,$first_ping_msg)
$timer = TimerInit()
$counter_seq = 0x00000003
$interval_ping = Dec(Hex(_Rotate_srv($interval)))*1000
While 1
;$msg_srv = TCPRecv($socket_srv, 2048)
$dif = TimerDiff($timer)
If $dif >= $interval_ping Then
$counter_seq = $counter_seq+1
$ping_msg = $ping_title1 & Binary($counter_seq) & $ping_title2 & $RESERVED
TCPSend($socket_srv,$ping_msg)
$timer = TimerInit()
Else
$counter_seq = $counter_seq+1
;тут смс сообщения
$sms_msg = $sms_title1 & Binary($counter_seq) & $sms_title2 & $RESERVED & StringTrimLeft( String($sms_str),2)
TCPSend($socket_srv,$sms_msg)
ExitLoop
EndIf
Wend
TCPCloseSocket ( $socket_srv )
;функция обрабатывает сообщение сервера
Func _ReadMsgSrv($msg_srv)
Local $rezmsgsrv[2],$lenfullmsg,$lenmsg,$error = -1
If BinaryMid($msg_srv,1,4) = Binary($CS_MAGIC) Then
$lenfullmsg = BinaryLen($msg_srv)
;MsgBox(1,"lenfullmsg",$lenfullmsg)
$lenmsg = Binary(Dec(Hex(BinaryMid($msg_srv,17,4))))
$lenmsg = Dec(Hex($lenmsg))
;MsgBox(1,"lenmsg",$lenmsg)
$rezmsgsrv[0] = BinaryMid($msg_srv,13,4) ;тип пакета
$rezmsgsrv[1] = BinaryMid($msg_srv,$lenfullmsg-$lenmsg+1,$lenmsg) ;текст сообщения
Return $rezmsgsrv
EndIf
Return SetError(1,0,-1)
EndFunc ;==>_ReadMsgSrv
; функция возвращает ip & port сервера
Func _GetMrimIp()
Local $ip[2]
If InetGet("http://mrim.mail.ru:2042/", @TempDir & "\~ipm.tmp") Then
$ipstr = FileRead(@TempDir & "\~ipm.tmp", FileGetSize(@TempDir & "\~ipm.tmp"))
$ipstr = StringStripWS($ipstr,8)
$ipstrlen = StringLen($ipstr)
$ipstrin = StringInStr($ipstr, ":")
$ip[0] = StringTrimRight($ipstr,$ipstrlen-$ipstrin+1)
$ip[1] = StringTrimLeft($ipstr,$ipstrin)
If $ip[0] <>"" Then
Return $ip
EndIf
EndIf
If InetGet("http://mrim.mail.ru:2042/", @TempDir & "\~ipm.tmp") Then
$ipstr = FileRead(@TempDir & "\~ipm.tmp", FileGetSize(@TempDir & "\~ipm.tmp"))
$ipstr = StringStripWS($ipstr,8)
$ipstrlen = StringLen($ipstr)
$ipstrin = StringInStr($ipstr, ":")
$ip[0] = StringTrimRight($ipstr,$ipstrlen-$ipstrin+1)
$ip[1] = StringTrimLeft($ipstr,$ipstrin)
If $ip[0] <>"" Then
Return $ip
EndIf
EndIf
Return SetError(1,0,-1)
EndFunc ;==>_GetMrimIp
;функция разворачивает число от клиента
Func _Rotate_cl($val)
Local $valrot
$valrot = Binary($val)
Return $valrot
EndFunc ;==>_Rotate_cl
;функция разворачивает число от сервера
Func _Rotate_srv($val)
Local $valrot
$valrot = Binary(Dec(Hex($val)))
Return $valrot
EndFunc ;==>_Rotate_srv
;функция создает ULP строку(формат протокола)
Func _string_UPL($val)
Local $bstr,$lenstr
$bstr = StringToBinary ( $val,4 )
$lenstr = Binary(BinaryLen($val))
$string_UPL = $lenstr & $bstr
$string_UPL = Binary($string_UPL)
;MsgBox(1,"",$lenstr&"\"& $bstr)
Return $string_UPL
EndFunc ;==>_string_UPL
;функция создает ULP_RU строку(формат протокола)
Func _string_UPL_RU($val)
Local $bstr,$lenstr
$bstr = StringToBinary ( $val,2 )
;MsgBox(0,"",$bstr)
$lenstr = Binary(BinaryLen($bstr))
$string_UPL = $lenstr & $bstr
;$string_UPL = Binary($string_UPL)
;MsgBox(1,"",$lenstr&"\"& $bstr)
Return $string_UPL
EndFunc ;==>_string_UPL_RU
;заголовок пакета
#cs
u_long magic; // Magic
u_long proto; // Версия протокола
u_long seq; // Sequence
u_long msg; // Тип пакета
u_long dlen; // Длина данных
u_long from; // Адрес отправителя
u_long fromport; // Порт отправителя
u_char reserved[16]; // Зарезервировано
#ce
Примечания: