Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Truco para listar emisoras de Radio Browser (web) (https://www.clubdelphi.com/foros/showthread.php?t=97362)

navbuoy 25-03-2025 18:02:38

Truco para listar emisoras de Radio Browser (web)
 
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
    { Private declarations }
  public
    { Public declarations }
  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
      // Configurar SSL
      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';

      // URL de la API de Radio Browser
      http.Get('http://de2.api.radio-browser.info/json/stations', response);

      // Parsear la respuesta JSON
      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.

navbuoy 25-03-2025 18:30:52

Lo he dividido en 2 List Box para que la URL sea mas facilmente accesible cuando usemos
el reproductor para tocar la emisora en la tarjeta de sonido



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();
                        ListBox2->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);
                                        ListBox2->Items->Add(streamUrl);

                                }
            }
                }
    }
        catch (const Exception &e)
        {
                ShowMessage("Error: " + e.Message);
        }
}
//---------------------------------------------------------------------------


navbuoy 25-03-2025 21:34:39



https://www.quazardev.net/RADIO_BROWSER_APP.rar

por si os resulta de utilidad ahi os lo dejo, si faltase algun BPL o algo decidmelo

Casimiro Notevi 26-03-2025 00:13:54

^\||/^\||/^\||/

Neftali [Germán.Estévez] 26-03-2025 08:22:28

Muchas gracias por la aportación.
La verdad es que está chulo...
^\||/^\||/

navbuoy 28-03-2025 13:33:46



le he puesto unos slots de memorias para guardar emisoras

Casimiro Notevi 28-03-2025 21:05:09

^\||/^\||/^\||/


La franja horaria es GMT +2. Ahora son las 13:24:27.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi