Что нового

[RegExp] Получить курс USD по ЦБРФ

Pavel

Новичок
Сообщения
125
Репутация
3
Господа. Тривиальная ситуация - получить отсюда курс доллара США.

Голова болит, не могу сообразить как лучше :wacko:
Подскажите , плз.
 

WSWR

AutoIT Гуру
Сообщения
941
Репутация
363
Через таблицу и массив:
Код:
#include <IE.au3>
#include <Array.au3>

$oIE=_IECreate ("http://www.cbr.ru/currency_base/daily.aspx?C_month=08&C_year=2011&date_req=23.08.2011", 1, 0)

$oTable = _IETableGetCollection($oIE,39)
$avArray = _IETableWriteToArray($oTable)
_IEQuit ($oIE)
;_ArrayDisplay($avArray)
MsgBox(0, 'Заголовок',$avArray[4][10])
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Pavel,
Можно так попробовать:
Код:
#include <Array.au3>

Dim $aCurrency[4][2] = [[3],['Доллар США'],['Канадский доллар'],['Австралийский доллар']]

For $i = 1 To $aCurrency[0][0]
	$aCurrency[$i][1] = _Get_Exchange_Rate($aCurrency[$i][0])
Next
_ArrayDisplay($aCurrency)

Func _Get_Exchange_Rate($s_Currency)
	Local $s_Sourse, $s_Return
	$s_Url = 'http://www.cbr.ru/currency_base/daily.aspx?C_month=' & @MON & '&C_year=' & @YEAR & '&date_req=' & _
			@MDAY & '.' & @MON & '.' & @YEAR
	$s_Sourse = InetRead($s_Url, 17)
	If @error Then Return SetError(1, 0, 'Error')
	$s_Sourse = BinaryToString($s_Sourse, 4)
	$s_Return = StringRegExpReplace($s_Sourse, '(?s).*?' & $s_Currency & '</td>\r\n<td align="right">(.*?)</td></tr>?.*', '$1')
	If @extended <> 1 Then Return SetError(1, 0, 'Error')
	Return SetError(0, 0, $s_Return)
EndFunc   ;==>_Get_Exchange_Rate
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Pavel
Ещё один вариант:
Код:
$URL = 'http://www.cbr.ru/currency_base/daily.aspx?C_month=08&C_year=2011&date_req=23.08.2011'
$HTML = BinaryToString(InetRead($URL, 4))
$Split = StringRegExp($HTML, '(?s)<td align="right">(.*?)</td>', 3)
MsgBox(0, 'Курс доллара', 'Доллар США - ' & $Split[29])
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Kaster, если не затруднит - выложи, плз, на этот форум. С удовольствием заценю. :IL_AutoIt_1:
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
Pavel,
Вариант получить все валюты:
Код:
#include <Array.au3>

$aCurrency = _Get_Exchange_Rate('eng')
If @error Then
	MsgBox(16, 'Error', 'Error')
Else
	_ArrayDisplay($aCurrency, @MDAY & '.' & @MON & '.' & @YEAR)
EndIf

Func _Get_Exchange_Rate($s_Lang = 'rus', $s_Day = @MDAY, $s_Mon = @MON, $s_Year = @YEAR)
	;$s_Lang = 'eng' - англ.язык, другое - русский.
	Local $s_Sourse, $a_CurrencyTemp, $a_Currency[1][4], $i_Ubound, $s_Url, $i_Lang, _
			$a_Title[5][2] = [['Цифр. код', 'Num сode'],['Букв. код', 'Char сode'], _
			['Валюта', 'Currency'],['Единиц', 'Unit'],['Курс', 'Rate']]
	Switch $s_Lang
		Case 'eng'
			$s_Url = 'http://www.cbr.ru/eng/currency_base/D_print.aspx?date_req=' & $s_Day & '.' & $s_Mon & '.' & $s_Year
			$i_Lang = 1
		Case Else
			$s_Url = 'http://www.cbr.ru/currency_base/D_print.aspx?date_req=' & $s_Day & '.' & $s_Mon & '.' & $s_Year
			$i_Lang = 0
	EndSwitch
	$s_Sourse = InetRead($s_Url, 17)
	If @error Then Return SetError(1, 0, '')
	$s_Sourse = BinaryToString($s_Sourse, 4)
	$a_CurrencyTemp = StringRegExp($s_Sourse, '(?s)<tr><td align="right">(.*?)</td></tr>', 3)
	If @error Then Return SetError(1, 0, '')
	$i_Ubound = UBound($a_CurrencyTemp)
	ReDim $a_Currency[$i_Ubound + 1][5]
	For $i = 0 To 4
		$a_Currency[0][$i] = $a_Title[$i][$i_Lang]
	Next
	For $i = 0 To $i_Ubound - 1
		$a_Currency[$i + 1][0] = StringLeft($a_CurrencyTemp[$i], 3)
		$a_Currency[$i + 1][1] = StringRegExpReplace($a_CurrencyTemp[$i], '(?s).*?  (.*?)</td>?.*', '$1')
		If @extended <> 1 Then Return SetError(1, 0, '')
		$a_Currency[$i + 1][2] = StringRegExpReplace($a_CurrencyTemp[$i], '(?s).*?<td>  (.*?)</td>?.*', '$1')
		If @extended <> 1 Then Return SetError(1, 0, '')
		$a_Currency[$i + 1][3] = StringRegExpReplace($a_CurrencyTemp[$i], '(?s).*?<td align="right">(.*?)</td>?.*', '$1')
		If @extended <> 1 Then Return SetError(1, 0, '')
		$a_Currency[$i + 1][4] = StringRegExpReplace($a_CurrencyTemp[$i], '(?s).*?' & $a_Currency[$i + 1][3] & '.*">(.*?)$', '$1')
		If @extended <> 1 Then Return SetError(1, 0, '')
	Next
	Return SetError(0, 0, $a_Currency)
EndFunc   ;==>_Get_Exchange_Rate
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
во вложении
 

Zaramot

I ♥ AutoIt
Сообщения
1,160
Репутация
660
Вот ещё вариант (топорнный метод ;D):
Код:
GUICreate("База данных по курсам валют", 413, 690)
$Obj1 = ObjCreate("Shell.Explorer.2")
$Obj1_ctrl = GUICtrlCreateObj($Obj1, -238, -310, 700, 2000)
$Obj1.Navigate("http://www.cbr.ru/currency_base/daily.aspx?C_month=08&C_year=2011&date_req=23.08.2011")
GUISetState()

Do
Until GUIGetMsg() = -3
 
Автор
P

Pavel

Новичок
Сообщения
125
Репутация
3
Всем спасибо!
Постараюсь не забыть жмакнуть "полезняшку" всем отписавшимся ;)
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
RateUSD в виде готовой утилитки, с исходником.
 
Верх