Hola amigos, esto creo que os va a gustar:
Estaba ahi experimentando con una API de Radio Browser y mirad que guapo
https://de2.api.radio-browser.info/
NECESITA LAS DLL DE SSL:
https://indy.fulgan.com/SSL/
aqui os dejo el codigo en C++ Builder y Delphi:
Código:
//---------------------------------------------------------------------------
#include <vcl.h>
#include <System.JSON.hpp>
#include <IdHTTP.hpp>
#include <IdSSLOpenSSL.hpp>
#include <memory>
#pragma hdrstop
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
try
{
std::unique_ptr<TIdHTTP> http(new TIdHTTP(nullptr));
std::unique_ptr<TIdSSLIOHandlerSocketOpenSSL> ssl(new TIdSSLIOHandlerSocketOpenSSL(nullptr));
std::unique_ptr<TStringStream> response(new TStringStream());
// Configurar SSL correctamente
ssl->SSLOptions->Method = sslvTLSv1_2;
ssl->SSLOptions->Mode = sslmClient;
ssl->SSLOptions->VerifyMode = TIdSSLVerifyModeSet();
ssl->SSLOptions->VerifyDepth = 0;
http->IOHandler = ssl.get(); // Asignar SSL a HTTP
http->HandleRedirects = true;
http->Request->UserAgent = "Mozilla/5.0";
// URL de la API de Radio Browser
String url = "http://de2.api.radio-browser.info/json/stations";
// Hacer la solicitud GET
http->Get(url, response.get());
// Parsear la respuesta JSON
std::unique_ptr<TJSONArray> jsonResponse(static_cast<TJSONArray*>(TJSONObject::ParseJSONValue(response->DataString)));
if (jsonResponse)
{
ListBox1->Items->Clear();
for (int i = 0; i < jsonResponse->Count; i++)
{
TJSONObject *station = dynamic_cast<TJSONObject*>(jsonResponse->Items[i]);
if (station)
{
TJSONString *jsonName = dynamic_cast<TJSONString*>(station->GetValue("name"));
TJSONString *jsonUrl = dynamic_cast<TJSONString*>(station->GetValue("url"));
UnicodeString name = jsonName ? jsonName->Value() : "Desconocido";
UnicodeString streamUrl = jsonUrl ? jsonUrl->Value() : "URL no disponible";
ListBox1->Items->Add(name + " - " + streamUrl);
}
}
}
}
catch (const Exception &e)
{
ShowMessage("Error: " + e.Message);
}
}
//---------------------------------------------------------------------------
Delphi:
Código Delphi
[-]
unit Unit1;
interface
uses
System.SysUtils, System.Classes, System.JSON, Vcl.Controls, Vcl.Forms,
Vcl.StdCtrls, IdHTTP, IdSSLOpenSSL;
type
TForm1 = class(TForm)
Button1: TButton;
ListBox1: TListBox;
procedure Button1Click(Sender: TObject);
private
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
http: TIdHTTP;
ssl: TIdSSLIOHandlerSocketOpenSSL;
response: TStringStream;
jsonResponse: TJSONArray;
station: TJSONObject;
jsonName, jsonUrl: TJSONString;
i: Integer;
name, streamUrl: string;
begin
try
http := TIdHTTP.Create(nil);
ssl := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
response := TStringStream.Create;
try
ssl.SSLOptions.Method := sslvTLSv1_2;
ssl.SSLOptions.Mode := sslmClient;
ssl.SSLOptions.VerifyMode := [];
ssl.SSLOptions.VerifyDepth := 0;
http.IOHandler := ssl;
http.HandleRedirects := True;
http.Request.UserAgent := 'Mozilla/5.0';
http.Get('http://de2.api.radio-browser.info/json/stations', response);
jsonResponse := TJSONObject.ParseJSONValue(response.DataString) as TJSONArray;
if Assigned(jsonResponse) then
begin
ListBox1.Items.Clear;
for i := 0 to jsonResponse.Count - 1 do
begin
station := jsonResponse.Items[i] as TJSONObject;
if Assigned(station) then
begin
jsonName := station.GetValue('name') as TJSONString;
jsonUrl := station.GetValue('url') as TJSONString;
name := IfThen(Assigned(jsonName), jsonName.Value, 'Desconocido');
streamUrl := IfThen(Assigned(jsonUrl), jsonUrl.Value, 'URL no disponible');
ListBox1.Items.Add(name + ' - ' + streamUrl);
end;
end;
end;
finally
response.Free;
ssl.Free;
http.Free;
jsonResponse.Free;
end;
except
on E: Exception do
ShowMessage('Error: ' + E.Message);
end;
end;
end.