Что нового

[Автоматизация] курс доллора в СБЕРБАНКЕ

gagarin74

Новичок
Сообщения
44
Репутация
0
Версия AutoIt: 3.

Описание:
Добрый день.
Большая просьба "выдрать" данные о курсе продажи и покупки из сбербанка. по баксу
Примечания:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gagarin74,
Вы сайт хотя бы найдите сами.
 

AZJIO

Меценат
Меценат
Сообщения
2,879
Репутация
1,194
gagarin74
RateUSD
При запуске создаётся ini-файл в котором вы можете поменять адрес и регулярное выражение.
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
можно и так
конкретно к данному адресу
Код:
#include <String.au3>
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Курс валют", 359, 128, 283, 215)
$Label1 = GUICtrlCreateLabel("Доллар", 16, 56, 83, 17)
$Label2 = GUICtrlCreateLabel("Евро", 16, 88, 85, 17)
$Label3 = GUICtrlCreateLabel("Покупка", 120, 16, 87, 17)
$Label4 = GUICtrlCreateLabel("Продажа", 240, 16, 98, 17)
$Label5 = GUICtrlCreateLabel("", 120, 56, 84, 17)
$Label6 = GUICtrlCreateLabel("", 240, 56, 100, 17)
$Label7 = GUICtrlCreateLabel("", 120, 88, 84, 17)
$Label8 = GUICtrlCreateLabel("", 240, 88, 100, 17)
GUISetState(@SW_SHOW)
Local $rate = _GetRate()
GUICtrlSetData($Label5, StringStripWS($rate[0], 3))
GUICtrlSetData($Label6, StringStripWS($rate[1], 3))
GUICtrlSetData($Label7, StringStripWS($rate[2], 3))
GUICtrlSetData($Label8, StringStripWS($rate[3], 3))
Local $timer = TimerInit()
While 1
	If TimerDiff($timer) >= 1800 * 1000 Then
		$rate = _GetRate()
		GUICtrlSetData($Label5, $rate[0])
		GUICtrlSetData($Label6, $rate[1])
		GUICtrlSetData($Label7, $rate[2])
		GUICtrlSetData($Label8, $rate[3])
		$timer = TimerInit()
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GetRate()
	Local $ir = InetRead('http://www.sberbank.ru/moscow/ru/quotes/currencies/', 1)
	Local $bts = BinaryToString($ir)
	Local $srate = _StringBetween($bts, '#cc0000">', '</td>')
	Return $srate
EndFunc   ;==>_GetRate
 
Автор
G

gagarin74

Новичок
Сообщения
44
Репутация
0
Ребят, большое спасибо!!!!!! Сейчас иногда проблема с сайтом сбербанка -иногда он сам не фурычит.
Я просто не знаю по трудозатратам -но БОЛЬШОЕ спасибо!!!!!!





И ещё одна просьба (может у кого есть уже какие наработки). Нельзя ли график выводить за 10(30) дней ? Желательно само обновляемый :smile:

Или хотя бы назначить переменные.
$a= курс продажи
$b= курс покупки



Добавлено:
Сообщение автоматически объединено:

joiner сказал(а):
можно и так
конкретно к данному адресу
Код:
#include <String.au3>
#include <GUIConstantsEx.au3>
$Form1 = GUICreate("Курс валют", 359, 128, 283, 215)
$Label1 = GUICtrlCreateLabel("Доллар", 16, 56, 83, 17)
$Label2 = GUICtrlCreateLabel("Евро", 16, 88, 85, 17)
$Label3 = GUICtrlCreateLabel("Покупка", 120, 16, 87, 17)
$Label4 = GUICtrlCreateLabel("Продажа", 240, 16, 98, 17)
$Label5 = GUICtrlCreateLabel("", 120, 56, 84, 17)
$Label6 = GUICtrlCreateLabel("", 240, 56, 100, 17)
$Label7 = GUICtrlCreateLabel("", 120, 88, 84, 17)
$Label8 = GUICtrlCreateLabel("", 240, 88, 100, 17)
GUISetState(@SW_SHOW)
Local $rate = _GetRate()
GUICtrlSetData($Label5, StringStripWS($rate[0], 3))
GUICtrlSetData($Label6, StringStripWS($rate[1], 3))
GUICtrlSetData($Label7, StringStripWS($rate[2], 3))
GUICtrlSetData($Label8, StringStripWS($rate[3], 3))
Local $timer = TimerInit()
While 1
	If TimerDiff($timer) >= 1800 * 1000 Then
		$rate = _GetRate()
		GUICtrlSetData($Label5, $rate[0])
		GUICtrlSetData($Label6, $rate[1])
		GUICtrlSetData($Label7, $rate[2])
		GUICtrlSetData($Label8, $rate[3])
		$timer = TimerInit()
	EndIf
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _GetRate()
	Local $ir = InetRead('http://www.sberbank.ru/moscow/ru/quotes/currencies/', 1)
	Local $bts = BinaryToString($ir)
	Local $srate = _StringBetween($bts, ':16px">', '</td>')
	Return $srate
EndFunc   ;==>_GetRate

а вот это не работает :(
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
gagarin74 [?]
а вот это не работает
правильно. сейчас ни один пример из темы не работает.потому, что вот
Уважаемые посетители, в настоящее время на сервере ведутся профилактические работы.
Телефонная справочная служба Сбербанка России +7 (495) 500-55-50, 8 (800) 555-55-50

В настоящее время официальный сайт Сбербанка временно недоступен по техническим причинам. При этом системы дистанционного обслуживания «Сбербанк ОнЛ@йн» и «Сбербанк Бизнес ОнЛ@йн» и другие сервисы Банка работают в полном объеме и доступны по прямым ссылкам:
утром, по нашему времени (Владивосток), когда я писал пример, все работало :smile:


Добавлено:
Сообщение автоматически объединено:

если подставить другую функцию , для приморья, то работает
Код:
Func _GetRate()
    Local $ir = InetRead('http://www.sberbank.ru/primorskykrai/ru/quotes/currencies/', 1)
    Local $bts = BinaryToString($ir)
    Local $srate = _StringBetween($bts, '#cc0000">', '</td>')
    Return $srate
EndFunc   ;==>_GetRate
 
Автор
G

gagarin74

Новичок
Сообщения
44
Репутация
0
joiner сказал(а):
gagarin74 [?]
а вот это не работает
правильно. сейчас ни один пример из темы не работает.потому, что вот
Уважаемые посетители, в настоящее время на сервере ведутся профилактические работы.
Телефонная справочная служба Сбербанка России +7 (495) 500-55-50, 8 (800) 555-55-50

В настоящее время официальный сайт Сбербанка временно недоступен по техническим причинам. При этом системы дистанционного обслуживания «Сбербанк ОнЛ@йн» и «Сбербанк Бизнес ОнЛ@йн» и другие сервисы Банка работают в полном объеме и доступны по прямым ссылкам:
утром, по нашему времени (Владивосток), когда я писал пример, все работало :smile:


Добавлено:
Сообщение автоматически объединено:

если подставить другую функцию , для приморья, то работает
Код:
Func _GetRate()
    Local $ir = InetRead('http://www.sberbank.ru/primorskykrai/ru/quotes/currencies/', 1)
    Local $bts = BinaryToString($ir)
    Local $srate = _StringBetween($bts, '#cc0000">', '</td>')
    Return $srate
EndFunc   ;==>_GetRate





вот так работает Local $srate = _StringBetween($bts, ':#339900">', '</td>')
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
gagarin74,
Предупреждение За нарушение общих правил (пункт В.2):
Старайтесь избегать “Over quoting” (преувеличенное цитирование) - цитируйте только необходимую часть сообщения, которая наилучшим образом подчеркнёт суть цитируемого.


С уважением, ваш Глобальный модератор.
 
Автор
G

gagarin74

Новичок
Сообщения
44
Репутация
0
Мы,строили строили и построили.
может кому пригодиться.
программа умеет собирать курс бакса в центробанке и сбербанке.
внешний IP адрес mySQL изменен :smile:
Код:
#include <Array.au3>
#include <SQLite.au3>
#include <mysql.au3>
#include <Constants.au3>
#include <IE.au3>
#include <IE.au3>
#include <Array.au3>
#include <IE.au3>
#include <String.au3>
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;#Include <Icons.au3>
#Include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
#include <array.au3>
#include "mysql.au3"
#include "EzMySql_dll.au3"
#include "EzMySql.au3"
#include <Array.au3>
#include <file.au3>
;#include <Table.au3>
#include <IE.au3>
#include <Array.au3>
#include <IE.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
;#Include <Icons.au3>
#Include <WinAPIEx.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#Include <Misc.au3>
#Include <Restart.au3>
;#include "GIFAnimation.au3"
;~ HttpSetProxy(1)

HotKeySet("{ESC}", "Terminate")

;for $s=0 to 10
$var = Ping("www.mail.ru",4000)
If $var Then ; also possible:  If @error = 0 Then ...
   MsgBox(0, "Заявка", "Центробанк и Сбербанк в ОНЛАЙНЕ",5)
Else

MsgBox(0, "Заявка", "Центробанк не виден",5)
_ScriptRestart()

EndIf

$var = Ping("192.168.88.14",4000)
If $var Then ; also possible:  If @error = 0 Then ...
   MsgBox(0, "Заявка", "Вход из дома",5)
    $sServer = "192.168.88.14"
Else

MsgBox(0, "Заявка", "Вход из вне",5)
$sServer = "80.252.153.1"
EndIf






Local $s_Xml, $a_Tmp, $i_Ub, $a_Ret[1]
Local $rate = _GetRate()
$sdsd=StringStripWS($rate[0], 3)
$sdsd=StringReplace($sdsd, ",", ".")
ConsoleWrite($sdsd& "  покупка сбербанка у населения"&@LF)

$fdfd=StringStripWS($rate[1], 3)
$fdfd=StringReplace($fdfd, ",", ".")
ConsoleWrite($fdfd& "  продажа сбербанка"&@LF)
;for $s=0 to 10

$s_Xml = BinaryToString(InetRead('http://www.cbr.ru/scripts/XML_daily.asp', 1))
If @error Then Exit 13
$a_Tmp = StringRegExp($s_Xml, '(?i)<[a-z]+>(.+?)<', 3)
$i_Ub = UBound($a_Tmp)
If (Not $i_Ub) Or (Mod($i_Ub, 5)) Then Exit 13
ReDim $a_Ret[$i_Ub / 5 + 1][5]
For $i = 45 To 50 - 1 Step 5
    $a_Ret[0][0] += 1
    For $j = 0 To 4
        $a_Ret[$a_Ret[0][0]][$j] = $a_Tmp[$i + $j]
$sd=$a_Ret

    Next

Next
$a_Tmp = 0

;_ArrayDisplay($a_Ret)
For $i = 0 to Ubound($a_Ret) - 1
   $asd=($a_Ret[1][4])
    $asd1=($a_Ret[1][3])
 Next
$asd=StringReplace($asd, ",", ".")
ConsoleWrite( $asd &" курс центробанка"& @LF) ; значение бакса
ConsoleWrite( $asd1 & @LF) ; вид валюты



$mes=@MON
$data=@MDAY
$hour=@HOUR
$min=@MIN
ConsoleWrite(  " Месяц "& $mes & " Дата " & @MDAY & @LF)
$polndata= $data&"."&$mes&"."&@YEAR ;полная дата
ConsoleWrite($polndata&" полная дата"& @LF)
$polvrem=@HOUR&":"&@MIN ; полное время
ConsoleWrite($polvrem&" полное время"& @LF)


   $sUsername = "root"
   $sPassword = ""
      $sDatabase = "baks"
 ; $sServer = "80.252.153.1"
 

   $sDriver = "{MySQL ODBC 3.51 Driver}"
   $iPort = 3306





If Not _EzMySql_Startup() Then
    MsgBox(0, "Error Starting MySql", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
 EndIf
If Not _EzMySql_Open($sServer, $sUsername, $sPassword, $sDatabase, "3306") Then
    MsgBox(0, "Error opening Database", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
EndIf

	  $aOk1 = _EzMySql_GetTable2d("SELECT MAX(numer) FROM vremy")


	If Not IsArray($aOk1) Then MsgBox(0, $sMySqlStatement & " error", $error)
;_ArrayDisplay($aOk1, "Максимальный индекс")
$dd=($aOk1[1][0])
ConsoleWrite($dd&" максимальное значение индекса"& @LF)
$aOk2 = _EzMySql_GetTable2d("SELECT numer,kurs FROM vremy WHERE numer='"&$dd&"'")
	If Not IsArray($aOk2) Then MsgBox(0, $sMySqlStatement & " error", $error)
;_ArrayDisplay($aOk2, "Последний курс ЦБ из базы")
$dd2=($aOk2[1][1])
ConsoleWrite($dd2&" курс центробанка последняя запись "& @LF)

$aOk3 = _EzMySql_GetTable2d("SELECT numer,sberpo FROM vremy WHERE numer='"&$dd&"'") ; вывуживаем последний курс продажи населению сбербанка
;_ArrayDisplay($aOk3, "Последний курс Сбера из базы")
$dd3=($aOk3[1][1]) ; загоняем в переменную последний курс продажи населению сбербанка из базы
ConsoleWrite($dd3&" курс сбербанка последняя запись "& @LF)



if $dd3 <> $sdsd then
    $ff=$dd+1
$sMySqlStatement = "INSERT INTO vremy (numer,mes, vrem, kurs,qq,sberpo,sberpr,qqq) VALUES (" & _
                        "'" & $ff & "'," & _
						"'"&$polndata  & "'," & _
                        "'" & $polvrem & "'," & _
                        "'" & $asd & "'," & _
						"'" & $asd1& "'," & _
						"'" & $sdsd& "'," & _
						"'" & $fdfd& "'," & _
                        "'" & $mes & "');"




ConsoleWrite($sMySqlStatement & @LF)
_EzMySql_Query("SET NAMES 'cp1251'")
	If Not _EzMySql_Exec($sMySqlStatement) Then
   MsgBox(0, "Error inserting data to Table", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
 EndIf
$rr1=$dd3 - $sdsd
$rr1 = Round($rr1, 2)  ;returns -1.6
ConsoleWrite($rr1 &" разница в курсе "& @LF)
 if $rr1 > 0 Then
   MsgBox(0, "Заявка", "Внимание курс СБЕРБАНКА УПАЛ "&$rr1,5)
   Beep(500, 1000)
ElseIf  $rr1 < 0 Then
   Beep(500, 1000)
MsgBox(0, "Заявка", "Внимание курс СБЕРБАНКА ВЫРОС на "&$rr1 ,5)
  EndIf
EndIf


if $dd2 <> $asd then
   $ff=$dd+1
$sMySqlStatement = "INSERT INTO vremy (numer,mes, vrem, kurs,qq,sberpo,sberpr,qqq) VALUES (" & _
                        "'" & $ff & "'," & _
						"'"&$polndata  & "'," & _
                        "'" & $polvrem & "'," & _
                        "'" & $asd & "'," & _
						"'" & $asd1& "'," & _
						"'" & $sdsd& "'," & _
						"'" & $fdfd& "'," & _
                        "'" & $mes & "');"




ConsoleWrite($sMySqlStatement & @LF)
_EzMySql_Query("SET NAMES 'cp1251'")
	If Not _EzMySql_Exec($sMySqlStatement) Then
   MsgBox(0, "Error inserting data to Table", "Error: "& @error & @CR & "Error string: " & _EzMySql_ErrMsg())
    Exit
 EndIf
$rr=$dd2 - $asd
$rr = Round($rr, 4)  ;returns -1.6
ConsoleWrite($rr &" разница в курсе "& @LF)
 if $rr > 0 Then
   MsgBox(0, "Заявка", "Внимание курс Центробанка УПАЛ "&$rr,5)
   Beep(500, 1000)
ElseIf  $rr < 0 Then
   Beep(500, 1000)
MsgBox(0, "Заявка", "Внимание курс Центробанка ВЫРОС на "&$rr ,5)
  EndIf
EndIf
;Sleep (60000)
;Next
MsgBox(0, "Заявка", " Последний курс на покупку у населения " &$sdsd,60)




;Next
_ScriptRestart()
Func _GetRate()
    Local $ir = InetRead('http://www.sberbank.ru/moscow/ru/quotes/currencies/', 1)
    Local $bts = BinaryToString($ir)
    Local $srate = _StringBetween($bts, ':#339900">', '</td>')
    Return $srate
EndFunc   ;==>_GetRate
Func Terminate()
    Exit 0
EndFunc


на красоту кода и куча лишних библиотек не обращайте внимание. Учусь......
 

joiner

Модератор
Локальный модератор
Сообщения
3,556
Репутация
628
gagarin74 [?]
это очень хорошо, только будет хорошим тоном выкладывать проекты полностью ( с библиотеками) и в специальный для этого раздел. а так это просто нерабочий код
 
Верх