Ver Mensaje Individual
  #5  
Antiguo 27-06-2019
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Reputación: 11
bucanero Va camino a la fama
Post

Cita:
Empezado por Chaja Ver Mensaje
Ahora emtiendo por que no soy millonario.... Bucanero es es exelente....no entiendo como sabe, de que debe bajar el ultimo archivo... me doy cuenta que solo soy un simple Mortal.... y ya que esta te pregunto... no es posible listar los archivos disponibles ... por si uno quiere bajar uno anterior... gracias que existen personas que saben.... gracias Maestro Yoda

Ahora me queda descomprimirlo .....
Pues con lo de millonario... ya te digo que yo tampoco lo soy
Y maestro... pues tampoco lo creo, solo se trata de aportar en algunos temas de los que pueda conocer un poco

En cuanto a tu pregunta de como saber cual es el ultimo fichero que se ha subido y por tanto el que hay que descargar, es porque en tu listado HTML los ficheros van ordenados de mas recientes a mas antiguos, por eso el primero que encuentra es el mas reciente y no continua con la búsqueda.

Si lo que deseas es obtener la lista completa de ficheros disponibles, con unas pequeñas modificaciones al código que te propuse se consigue fácilmente:

La función GetURLZip la convierto a procedimiento pasandole un nuevo parámetro de tipo TStrings donde va a devolver toda la lista de ficheros obtenidos
Código Delphi [-]
procedure GetURLZip(const AContent: string; Alist:TStrings; const Prefijo: string = '''../zips/cheques/'; const Sufijo: string = '.zip''');
  var
    inicio, fin, longitud:Integer;
    AFile:string;
  begin
    Alist.clear;
    inicio := 1;
    while inicio > 0 do begin
      // localiza el inicio de la cadena de descarga
      inicio := Pos(Prefijo, AContent, inicio);
      if inicio > 0 then begin
        // localiza el fin de la cadena de descarga
        fin := Pos(Sufijo, AContent, inicio);
        if (fin > inicio) then begin
          // calcula la longitud
          longitud := (fin + Sufijo.Length) - inicio;
                //extrae la cadena
          AFile := Copy(AContent, inicio, longitud);
          // la cadena esta en formato '../XXX/XXX.zip'
          // se elimina las comillas iniciales y finales y los dos puntos
          Alist.Add(AFile.Replace('''', '').Replace('../', ''));
        end;
        inicio := fin + 1;
      end;
    end;
  end;

la función DonwloadZIP tienes que separarla en dos partes:
1.- una la encargada de descargar el HTML y su correspondiente análisis, a esta yo le he cambiado el nombre y queda así:

Código Delphi [-]
  function DonwloadListZIP (const APageBase, AURL:string; AList:TStrings):string;
  var
    HTMLContent,          //Contenido de la pagina en HTML
    LocalFileZip: string; // Ruta local al fichero ZIP
  begin
    // Se descarga el contenido de la pagina en formato HTML
    HTMLContent := GetHTMLContent(APageBase + AURL);
    if (HTMLContent = '') then
      MessageDlg('No se ha podido realizar la descarga', mtError, [mbOK], 0)
    else begin
      // Se busca la primera URL a un fichero ZIP
      GetURLZip(HTMLContent, AList);
    end;
  end;

Inserta un listbox en tu formulario y en el botón de carga

Código Delphi [-]
procedure TForm2.Button1Click(Sender: TObject);
begin
  DonwloadListZIP('http://www.bcra.gob.ar/', 'cheques/actualiza.asp', ListBox1.Items);
end;
2.- y la parte correspondiente a la descarga del propio fichero ZIP, llevala al evento dobleClick del listBox:

Código Delphi [-]
procedure TForm2.ListBox1DblClick(Sender: TObject);
var
  LocalFileZip: string;
begin
  with ListBox1 do
    if ItemIndex >= 0 then begin
      LocalFileZip := DescargarFileURL('http://www.bcra.gob.ar/' + items[ItemIndex]);
      if LocalFileZip = '' then
        MessageDlg('No se ha podido descargar el fichero ZIP desde la URL ', mtError, [mbOK], 0)
      else
        MessageDlg(LocalFileZip, mtInformation, [mbOK], 0);
    end;
end;
En cuanto a descomprimir el fichero ZIP y obtener los datos que contiene, puedes hacerlo:
-Con ShellApi a compresores externos como el propio WINZIP, WINRAR, etc. con sus correspondientes parámetros. Como desventaja, el programa tiene que estar instalado en el equipo del cliente y aquí no puedes controlar casi nada en el proceso de descompresión.
-Con componentes de compresión de ficheros para delphi (yo en particular utilizo el componente TZIPMASTER) funciona aunque no haya instalado ningún programa de compresión externo, y en este caso si que podrás utilizar las propias herramientas del componente para listar los ficheros contenidos y/o descomprimir selectivamente lo que puedas necesitar.
Responder Con Cita