Ver Mensaje Individual
  #16  
Antiguo 03-01-2024
Badillo Badillo is offline
Miembro
 
Registrado: jun 2021
Posts: 33
Reputación: 0
Badillo Va por buen camino
Comparto una vía de solución.

Saludos,

Compartiré la vía con la que solucioné el problema de la llamada a la API.

Código Delphi [-]
unit MdNPI;

interface

uses
  System.SysUtils, System.Variants, System.Classes, System.UITypes,
  System.AnsiStrings, System.IOUtils, uLkJSON;

type

  TNPI = class(TObject)
  private
    { Private declarations }
    FBaseURL: string;
    FParams: string;
    FResponse: string;
    FResponseJson: TlkJSONbase;

    function CallAPI(aUrl: string): string;
  public
    { Public declarations }
    property BaseURL: string read FBaseURL write FBaseURL;
    property ResponseJson: TlkJSONbase read FResponseJson;

    constructor Create;
    function ValidateNPIForAPI(aNumber, aNpiType, aTaxonomy :string): boolean;
  end;

implementation

uses
  System.Character, Vcl.AxCtrls, Winapi.ActiveX, WinHttp_TLB, IdURI;

{ TNPI }

constructor TNPI.Create;
begin
  FBaseURL :=  'https://npiregistry.cms.hhs.gov/api/?version=2.1';
  FParams := '';
  FResponse := '';
  FResponseJson := TlkJSONbase.Create;
end;

function TNPI.CallAPI(aUrl: string): string;
var
  Http: IWinHttpRequest;
  HttpStringStream: TStringStream;
  HttpStream: IStream;
  OleStream: TOleStream;
begin
  Http := CoWinHttpRequest.Create;
  Http.Open('GET', aUrl, False);
  Http.Send(EmptyParam);

  if Http.Status = 200 then
  begin
    HttpStream := IUnknown(Http.ResponseStream) as IStream;
    OleStream  := TOleStream.Create(HttpStream);
    try
      HttpStringStream := TStringStream.Create('');
      try
        OleStream.Position:= 0;
        HttpStringStream.CopyFrom(OleStream, OleStream.Size);

        Result := HttpStringStream.DataString;
      finally
        HttpStringStream.Free;
      end;
    finally
      OleStream.Free;
    end;
  end;
end;

function TNPI.ValidateNPIForAPI(aNumber, aNpiType,
  aTaxonomy: string): boolean;
var
  xCount: Integer;
  xUrl: string;
begin
  try
    xCount := 0;

    if aNumber <> '' then
      FParams := FParams + '&number='+aNumber;

    if aNpiType <> '' then
      FParams := FParams + '&enumeration_type='+aNpiType;

    if aTaxonomy <> '' then
      FParams := FParams + '&taxonomy_description='+aTaxonomy;

    xUrl := TIdURI.URLEncode(FBaseURL + FParams);
    FResponse := CallAPI(xUrl);
    TlkJSONbase(FResponseJson) := TlkJSON.ParseText(FResponse);

    xCount := StrToInt(FResponseJson.Field['result_count'].Value);
  except
    on e: Exception do
      begin
        xCount := 0;
      end;
  end;

  Result := (xCount > 0);

end;

end.

Gracias.
Responder Con Cita