В этой статье мы рассмотрим, как получить курс валют в приложении Delphi, используя API BCV (Banco Central de Venezuela) и компонент TFPHttpClient.
Проблема
Пользователь столкнулся с трудностями при попытке получить данные о курсе валют в формате JSON с веб-сервиса BCV. Основные проблемы:
Неправильный формат запроса к API
Ошибки при обработке JSON-ответа
Необходимость ежедневного обновления данных
Решение
Для решения этой задачи мы будем использовать следующие компоненты:
TFPHttpClient для HTTP-запросов
JSON-парсер для обработки ответа
Пример кода
uses
fphttpclient, opensslsockets, fpjson, jsonparser;
procedure TForm1.Button1Click(Sender: TObject);
var
hc: TFPHttpClient;
url: String;
jsonResponse: String;
jsonData: TJsonData;
jsonObject: TJsonObject;
begin
url := 'https://bcv.ingeint.com/api/bcv/rate';
hc := TFPHttpClient.Create(nil);
try
try
jsonResponse := hc.Get(url);
jsonData := GetJson(jsonResponse);
if jsonData <> nil then
begin
try
jsonObject := TJsonObject(jsonData);
if (jsonObject.Find('rate') <> nil) and (jsonObject.Find('date') <> nil) then
begin
// Обновляем поля в интерфейсе
lblRate.Caption := FloatToStr(jsonObject.Find('rate').AsFloat);
lblDate.Caption := jsonObject.Find('date').AsString;
// Можно сохранить в базу данных
SaveToDatabase(jsonObject.Find('rate').AsFloat, jsonObject.Find('date').AsString);
end
else
ShowMessage('Неверный формат JSON: отсутствуют необходимые поля');
finally
jsonData.Free;
end;
end;
except
on E: Exception do
ShowMessage('Ошибка при получении данных: ' + E.Message);
end;
finally
hc.Free;
end;
end;
Альтернативное решение
Если у вас возникают проблемы с TFPHttpClient, можно использовать другой HTTP-клиент, например, Indy (TIdHTTP):
uses
IdHTTP, IdSSLOpenSSL, System.JSON;
procedure TForm1.Button2Click(Sender: TObject);
var
http: TIdHTTP;
sslHandler: TIdSSLIOHandlerSocketOpenSSL;
jsonString: string;
jsonObj: TJSONObject;
begin
http := TIdHTTP.Create(nil);
sslHandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
try
http.IOHandler := sslHandler;
http.Request.Accept := 'application/json';
http.Request.ContentType := 'application/json';
try
jsonString := http.Get('https://bcv.ingeint.com/api/bcv/rate');
jsonObj := TJSONObject.ParseJSONValue(jsonString) as TJSONObject;
try
if Assigned(jsonObj) then
begin
lblRate.Caption := jsonObj.GetValue('rate').Value;
lblDate.Caption := jsonObj.GetValue('date').Value;
end;
finally
jsonObj.Free;
end;
except
on E: Exception do
ShowMessage('Ошибка: ' + E.Message);
end;
finally
sslHandler.Free;
http.Free;
end;
end;
Рекомендации
Обработка ошибок: Всегда обрабатывайте возможные ошибки при работе с сетью и парсингом JSON.
Обновление данных: Для ежедневного обновления можно использовать таймер или планировщик задач.
Кеширование: Сохраняйте полученные данные локально на случай недоступности сервера.
Проверка данных: Убедитесь, что полученные данные соответствуют ожидаемому формату.
Заключение
Использование TFPHttpClient в сочетании с JSON-парсером предоставляет простой и эффективный способ получения курса валют из веб-сервиса BCV. Представленные примеры кода можно адаптировать для работы с другими аналогичными API, что делает этот подход универсальным решением для финансовых приложений.
Использование TFPHttpClient в Delphi для получения и обработки курса валют через API BCV с примерами кода и альтернативными решениями.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.