Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.11.21;
Скачать: CL | DM;

Вниз

Курсы валют центробанка Украины   Найти похожие ветки 

 
pasha_golub ©   (2010-08-10 19:32) [0]

Точно помню, что кто-то выкладывал здесь ссылку на RSS, или просто страницу с сабжем. Плюс потом еще показывал примеры парсинга всего этого дела.

Люди добрые, поделитесь еще раз. А то все информеры убогие до беспредела. Хочу свой сделать


 
xayam ©   (2010-08-10 20:06) [1]

http://www.delphimaster.net/view/15-1252433478

Не то? Ты там писал


 
TIF ©   (2010-08-10 20:11) [2]

> ссылку на RSS

Ссылки, помню, я выкладывал
http://delphimaster.net/view/15-1252433478
А вот примеров в той теме нет, только

pasha_golub ©   (2009-09-22 14:15) [33]
> TohaNik ©   (10.09.09 13:04) [32]

А мне, а мне... Пжлста.

- - - - -

TohaNik ©   (2009-09-22 15:14) [34]
> pasha_golub ©   (22.09.09 14:15) [33]

отправил

:)


 
PEAKTOP ©   (2010-08-10 20:14) [3]

Ограничения алгоритма:
1) Есть ERP-система, обладающая встроенным внутренним языком, при помощи которого пишется "Конфигурация" (натройка под вид деятельности) и уже конечная заточка системы под заказчика.
2) Алгоритм представлен на этом встроенном языке.
3) Имеется допущение, что якобы существует функция вида:

function StrReplaceStr(
 const aStr:string; // передаваемая в функцию строка
 conts aStringToFind:string; // искомая в aStr строка для замены
 const aStringReplaceWith:string // строка, которой нужно заменить все вхождения aStringToFind в строке aStr  
):string;



const
 CourceHost               = "bank.gov.ua";

 CourceURLValute          = "http://bank.gov.ua/Fin_ryn/OF_KURS/Currency/FindByDate.aspx";
 CourceBlockBeginValute   = "<table cellspacing="0" cellpadding="3" rules="cols" bordercolor="#DADADA" border="1" id="DataGrid1" bgcolor="White" width="85%">";
 CourceBlockBeginValute2  = "<table id="DataGrid1" bgcolor="White" border="1" bordercolor="#dadada" cellpadding="3" cellspacing="0" rules="cols" width="85%">";
 CourceBlockEndValute     = "</table>";

 CourceURLMetall          = "http://bank.gov.ua/FIN_RYN/GOLD/OF_DRAGMET/LASTMET.ASPX";
 CourceBlockBeginMetall   = "<table cellspacing="0" rules="cols" bordercolor="#DADADA" border="1" id="DataGrid1" bgcolor="White" height="140" width="80%">";
 CourceBlockEndMetall     = "</table>";
 CourceMultiplyMetall     = " * 28.3495231";

 ValuteIdsPrefix          = "ID";

 //============================================================================
 function GetCourceNBU(const aHttpHost, aHttpURL:string; var aHTMLBody:string):Boolean;
 begin
   {Эта функция получает из инета страницу с курсами НБУ в HTML}
   Result    := "<html>.....</html>"; // html-страница из bank.gov.ua
 end;
 //============================================================================
 function PreprocessPage(const aBlockBegin, aBlockEnd, aHTMLBody:string):string;
 var
   lkPos :Integer;
 begin
   Result := aHTMLBody;
   lkPos := Pos(AnsiUpperCase(aBlockBegin), AnsiUpperCase(Result));
   if(lkPos > 0)then
     begin
     lkPos := lkPos + Length(aBlockBegin);
     Delete(Result, 1, lkPos - 1);
     end;
   lkPos := Pos(AnsiUpperCase(aBlockEnd), AnsiUpperCase(Result));
   if(lkPos > 0)then
     Delete(Result, lkPos, Length(Result) - lkPos);
   if((Result[1] = #32) or (Result[1] = #13) or (Result[1] = #10))then
     while( ((Result[1] = #32) or (Result[1] = #13) or (Result[1] = #10)) and (Length(Result) > 0) )do
       Delete(Result, 1, 1);
   Result := StrReplaceStr(Result, "<tbody"  , "");  
   Result := StrReplaceStr(Result, "</tbody>", "");  
   Result := StrReplaceStr(Result, "<tr", #13#10#32#32"<row");  
   Result := StrReplaceStr(Result, "<td", #13#10#32#32#32#32"<column");  
   Result := StrReplaceStr(Result, "</td>","</column>");  
   Result := StrReplaceStr(Result, "</tr>",#13#10#32#32"</row>");  
 end;
 //============================================================================
 function GetCourceListValute(const aXMLPage:string):string;
 var
   i, j :Integer;
   lkSL :TStringList;
   lkS1 :string;
   lkS2 :string;
   lkS3 :string;
 begin
   Result := "";
   lkSL := TStringList.Create;
   lkSL.Text := aXMLPage;
   i := 1;
   i := i + 9;
   while(i < lkSL.Count-1)do
     begin
     lkS1 := lkSL[i+2];
     lkS2 := lkSL[i+6];
     lkS3 := lkSL[i+4];
     j := Pos(AnsiUpperCase("<column align="Center" width="15%">"), AnsiUpperCase(lkS1));
     if( j > 0 )then
       Delete(lkS1, 1, j + Length("<column align="Center" width="15%">") - 1);
     lkS1 := StrCiphersOnly(lkS1);
     if(Length(lkS1) < 3)then
       while(Length(lkS1) < 3)do
         lkS1 := "0" + lkS1;  
     
     j := Pos(AnsiUpperCase("<column align="Center" width="15%">"), AnsiUpperCase(lkS3));
     if( j > 0 )then
       Delete(lkS3, 1, j + Length("<column align="Center" width="15%">") - 1);
     lkS3 := StrCiphersOnlyInt(lkS3);
     if(Length(lkS3) < 9)then
       while(Length(lkS3) < 9)do
         lkS3 := "0" + lkS3;  

     j := Pos(AnsiUpperCase("<column align="Right" width="20%">"), AnsiUpperCase(lkS2));
     if( j > 0 )then
       Delete(lkS2, 1, j + Length("<column align="Right" width="20%">") - 1);
     lkS2 := StrReplaceStr(StrCiphersOnly(lkS2), ",", ".");
     if(Length(lkS2) < 12)then
       while(Length(lkS2) < 12)do
         lkS2 := "0" + lkS2;  

     Result := Result + ValuteIdsPrefix + lkS1 + "=" + lkS2 +" / "+ lkS3 +#13#10;
     i := i + 9;
     end;
   lkSL.Free;  
 end;
 //============================================================================
 function GetCourceListMetall(const aXMLPage:string):string;
 var
   i    :Integer;
   lkSL :TStringList;
   lkS1 :string;
   lkS2 :string;
   lkS3 :string;
 begin
   Result := "";
   lkSL := TStringList.Create;
   lkSL.Text := aXMLPage;
   i := 1;
   i := i + 9;
   while(i < lkSL.Count-1)do
     begin
     lkS1 := lkSL[i+2];
     lkS2 := lkSL[i+6];
     lkS3 := lkSL[i+4];
     lkS1 := StrCiphersOnly(lkS1);
     if(Length(lkS1) < 3)then
       while(Length(lkS1) < 3)do
         lkS1 := "0" + lkS1;  
     lkS3 := StrCiphersOnlyInt(lkS3);
     if(Length(lkS3) < 9)then
       while(Length(lkS3) < 9)do
         lkS3 := "0" + lkS3;  
     lkS2 := StrReplaceStr(StrCiphersOnly(lkS2), ",", ".");
     if(Length(lkS2) < 12)then
       while(Length(lkS2) < 12)do
         lkS2 := "0" + lkS2;  
     Result := Result + ValuteIdsPrefix + lkS1 + "=" + lkS2 +" / "+ lkS3 + CourceMultiplyMetall + #13#10;
     i := i + 9;
     end;
   lkSL.Free;  
 end;

var
 HTMLPage  :string;
 HTMLPage2 :string;
 SQL       :string;
 FileName  :string;
begin
 if not GetCourceNBU(CourceHost, CourceURLValute, HTMLPage)then exit;

 HTMLPage := PreprocessPage(CourceBlockBeginValute, CourceBlockEndValute, HTMLPage);
 HTMLPage := GetCourceListValute(HTMLPage);

 if not GetCourceNBU(CourceHost, CourceURLMetall, HTMLPage2)then exit;

 HTMLPage2 := PreprocessPage(CourceBlockBeginMetall, CourceBlockEndMetall, HTMLPage2);
 HTMLPage2 := GetCourceListMetall(HTMLPage2);

end.



Пример возврата функции GetCourceListValute(); строка в виде

ID036=0000716.1969 / 000000100
ID031=0000981.9540 / 000000100
ID826=0001240.6534 / 000000100
ID974=0000000.0265 / 000000010
ID208=0000139.0845 / 000000100
ID840=0000789.0000 / 000000100
ID233=0000066.2248 / 000000100
ID978=0001036.1937 / 000000100
ID352=0000003.5731 / 000000100
ID398=0000005.3539 / 000000100
ID124=0000762.1873 / 000000100
ID428=0001463.3437 / 000000100
ID440=0000300.1024 / 000000100
ID498=0000065.8367 / 000000100
ID578=0000131.1970 / 000000100
ID985=0000260.0823 / 000000100
ID643=0000002.6279 / 000000010
ID702=0000581.9351 / 000000100
ID960=0001205.2315 / 000000100
ID792=0000526.0935 / 000000100
ID795=0000276.8421 / 000000100
ID348=0000037.1329 / 000001000
ID860=0000000.4901 / 000000100
ID203=0000041.8242 / 000000100
ID752=0000110.1994 / 000000100
ID756=0000745.7313 / 000000100
ID156=0000116.5087 / 000000100
ID392=0000091.5123 / 000001000

где IDXXX - код валюты.


 
Игорь Шевченко ©   (2010-08-10 20:49) [4]

PEAKTOP ©   (10.08.10 20:14) [3]

Ужос на крыльях ночи


 
Игорь Шевченко ©   (2010-08-10 20:50) [5]

pasha_golub ©   (10.08.10 19:32)  

Паша, а у банка нельзя узнать ? Секретная информация ?


 
pasha_golub ©   (2010-08-11 11:45) [6]


> Игорь Шевченко ©   (10.08.10 20:50) [5]

А у нашего банка интерфейс такой, что проще убиться об стену. Плюс я точно помню, что здесь это обсуждали.


 
pasha_golub ©   (2010-08-11 11:55) [7]


> xayam ©   (10.08.10 20:06) [1]


> TIF ©   (10.08.10 20:11) [2]

Ага, оно. Спасибо, ребят.


 
pasha_golub ©   (2010-08-11 11:56) [8]


> PEAKTOP ©   (10.08.10 20:14) [3]
>
> Ужос на крыльях ночи

И вправду страшно выглядит. :)



Страницы: 1 вся ветка

Текущий архив: 2010.11.21;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.008 c
15-1281428898
stas
2010-08-10 12:28
2010.11.21
TWebBrowser заполнить поле типа file


3-1248096780
well
2009-07-20 17:33
2010.11.21
Обработка исключений Oracle


15-1280295714
И. Павел
2010-07-28 09:41
2010.11.21
Ученые "перепрограммировали" клетку


10-1170677069
Juice
2007-02-05 15:04
2010.11.21
Где находится библиотека типов для Excel 2003 ?


2-1283085939
guest
2010-08-29 16:45
2010.11.21
listbox