Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.08.2014, 14:13   #1
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию Cпарсить курс валют

Помогите спарсить курс валют на finance.i.ua/usd/
Код:
<div class="content clear">
		<h2>Средний курс валют</h2>
		<table class="local_table" summary="Курс покупки и продажи доллара (USD), евро (EUR) и рубля (RUB) к гривне в коммерческих банках Украины">
			<tr>
				<th class="align_left">Валюта</th>
				<th class="width_25" title="курс покупки валюты">Покупка</th>
				<th class="width_25" title="курс продажи валюты">Продажа</th>
				<th class="width_25" title="курс продажи валюты">НБУ</th>
			</tr>
			<tr>
				<td class="align_left"><b>USD/td>
				<td><big>12.1510</big><i class="increase"></i><br /><span class="report">+0.0616</span></td>
				<td><big>12.5337</big><i class="increase"></i><br /><span class="report">+0.0451</span></td>
				<td><big>12.3549</big><i class="increase"></i><br /><span class="report">0.0573</span></td>
			</tr>
			<tr>
				<td class="align_left"><b>EUR</b></td>
				<td><big>16.2600</big><i class="increase"></i><br /><span class="report">+0.1049</span></td>
				<td><big>16.9404</big><i class="increase"></i><br /><span class="report">+0.0726</span></td>
				<td><big>16.5333</big><i class="increase"></i><br /><span class="report">0.0275</span></td>
			</tr>
			<tr>
				<td class="align_left"><b>RUB</b></td>
				<td><big>0.3267</big><i class="decrease"></i><br /><span class="report">-0.0026</span></td>
				<td><big>0.3542</big><i class="increase"></i><br /><span class="report">+0.0017</span></td>
				<td><big>0.3451</big><i class="increase"></i><br /><span class="report">0.0003</span></td>
			</tr>
		</table>
	</div>
foxes вне форума Ответить с цитированием
Старый 07.08.2014, 15:07   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

foxes, покажите Ваши наработки. В помощь Copy, Pos, можно библиотекой RegExpr
Lardes вне форума Ответить с цитированием
Старый 07.08.2014, 15:12   #3
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

Питался так не выходит
Код:
function parse(s, exchange: string; var buy, sell: string): boolean;
var
  p1, p2: integer;
begin
  result := false;
  p1 := pos(exchange + '</td>', s);
  if p1 <> 0 then
  begin
    p1 := posex(';">', s, p1);
    if p1 <> 0 then
    begin
      p2 := posex('</td>', s, p1);
      if p2 <> 0 then
      begin
        buy := copy(s, p1 + 3, p2 - p1 - 3);
        p1 := posex(';">', s, p2);
        if p1 <> 0 then
        begin
          p2 := posex('</td>', s, p1);
          if p2 <> 0 then
          begin
            sell := copy(s, p1 + 3, p2 - p1 - 3);
            result := true;
          end;
        end;
      end;
    end;
  end;
end;
//Курсы валют
  if parse(IdHTTP1.Get('http://finance.i.ua/usd/'), 'USD', b, s) then
  begin
    Label2.Caption := b;
    Label3.Caption := s;
  if parse(IdHTTP1.Get('http://privatbank.ua/'), 'EUR', e, u) then
  begin
    Label4.Caption := e;
    Label5.Caption := u;
  if parse(IdHTTP1.Get('http://privatbank.ua/'), 'RUB', ru, d) then
  begin
    Label6.Caption := ru;
    Label7.Caption := d;
foxes вне форума Ответить с цитированием
Старый 07.08.2014, 15:45   #4
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Код:
uses
  RegExpr;

procedure TMainForm.RegExprParsButtonClick(Sender: TObject);
var
  AData: string;
  RegExpr, SubRegExpr: TRegExpr;

  Value, Currency, Curse, Report, Res: string;
  I: Integer;
begin
  AData := Trim(SourceMemo.Lines.Text); // здесь исходный текст

  Res := '';

  RegExpr := TRegExpr.Create;
  try
    RegExpr.Expression := '<tr>(.*?)<td class="align_left"><b>(.*?)</b></td>(.*?)</tr>';

    if RegExpr.Exec(AData) then
      repeat
        Currency := Trim(RegExpr.Match[2]);
        Value := Trim(RegExpr.Match[3]);

        SubRegExpr := TRegExpr.Create;
        try
          SubRegExpr.Expression := '<td><big>(.*?)</big>(.*?)<span class="report">(.*?)</span></td>';
          if SubRegExpr.Exec(Value) then
          begin
            I := 0;

            repeat
              Curse := Trim(SubRegExpr.Match[1]);
              Report := Trim(SubRegExpr.Match[3]);

              case I of
                0: Res := Res + Format('Валюта %s. Покупка: %s (%s)',
                    [Currency, Curse, Report]) + #13#10;
                1: Res := Res + Format('Валюта %s. Продажа: %s (%s)',
                    [Currency, Curse, Report]) + #13#10;
                2: Res := Res + Format('Валюта %s. НБУ: %s (%s)',
                    [Currency, Curse, Report]) + #13#10;
              end;

              Inc(I);

            until not SubRegExpr.ExecNext;

          end;

        finally
          SubRegExpr.Free;
        end;

        Res := Res + #13#10;

      until not RegExpr.ExecNext;

  finally
    RegExpr.Free;
  end;

  Res := Trim(Res);
  ShowMessage(Res);
end;
Скачать библиотеку с оф. сайта
Lardes вне форума Ответить с цитированием
Старый 07.08.2014, 17:53   #5
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

Большое вам спасибо не подскажите как сделать проверку на decrease или increase ?
Код:
				<td><big>0.3267</big><i class="decrease"></i><br /><span class="report">-0.0026</span></td>
				<td><big>0.3542</big><i class="increase"></i><br /><span class="report">+0.0017</span></td>
foxes вне форума Ответить с цитированием
Старый 07.08.2014, 19:27   #6
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Пожалуйста. Либо изменить регулярку в SubRegExpr.Expression := '<td><big>(.*?)</big>(.*?)<span class="report">(.*?)</span></td>';, либо узнать присутствует "+" или "-" в переменной Report (я бы так сделал) и исходя из полученного результата выводить что-то своё
Lardes вне форума Ответить с цитированием
Старый 07.08.2014, 19:42   #7
foxes
Пользователь
 
Регистрация: 14.11.2008
Сообщений: 94
По умолчанию

А можно код?
foxes вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Калькулятор валют svob Фриланс 8 19.06.2013 14:21
Курс валют xml Dmitriy.G Работа с сетью в Delphi 6 11.08.2010 13:14
Калькулятор валют... sew960i Фриланс 9 22.02.2010 21:26
получить курс валют WebMoney DeDoK Работа с сетью в Delphi 4 08.02.2010 12:45
Скачать курс валют nemaster21 Общие вопросы Delphi 1 21.11.2007 17:41