Ir al contenido


Foto

Seleccionar imagen de sitio web y guardar desde delphi


  • Por favor identifícate para responder
17 respuestas en este tema

#1 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 11 marzo 2012 - 04:29

Hola a todos.
Esta es una pregunta muy difícil:
Como puedo situarme en una parte especifica de una pagina web, colocar un dato, esperar a que cargue, copiar la dirección de una imagen, guardar la imagen, todo esto desde delphi ?.
Os explico:
1-Tengo esta pagina: http://www.myperfect...0P19-2P-Winkle.
2-En la pagina, arriba, hay un label que dice ''What are you looking for?'' seguido de un search donde se pone el dato a buscar y un botón.
3-Una vez que se pone el dato y se presiona el botón, la pagina se carga y muestra un color.
4-Este color tiene una dirección a la imagen que quiero guardar en mi disco.
Se puede?.
Tenéis algún ejemplo ?.
Saludos
PD: Esta si esta difícil. :
PD2: En esta pagina están todos los colores que quiero buscar (de la pagina 1 a la pagina 34 están los que necesito).

  • 0

#2 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 01:27

Pues no parece tan difícil, aunque tampoco estoy seguro de lo que quieres conseguir con eso  ^o|

Pero vamos por partes. En el primer caso si te fijas la URL (la dirección de la pagina) tiene una forma como esta:


delphi
  1. http://www.myperfectcolor.com/index.php?keyword=loquebusco&submitsearch=Search&controller=CSearch&component=search&action=generalSearch



Donde "loquebusco" es el texto que introduces es el texto que buscas, asi que para buscar cualquier otra cosa solamente tienes que cambiar ese trozo de la URL

Una vez obtienes el texto con resultado solamente tienes que examinarlo en busca de URLs con la siguiente forma:


delphi
  1. http://www.myperfectcolor.com/repositories/images/products/xxxxxx.jpg
  2. http://images.myperfectcolor.com/repositories/images/colors/MPC00002814-0.jpg


Y entonces bajar las imágenes una a una.

Con respecto a la segunda pregunta la respuesta es similar. Si te fijas todas las imágenes tienen una dirección como esta:


delphi
  1. http://images.myperfectcolor.com/repositories/images/colors/xxxxxx.jpg


Así que solamente tienes que obtener el código de la pagina y buscar direcciones como esa.

  • 0

#3 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 05:46

Hola
Gracias amigo.
En el segundo enlace está todo el catalogo de colores.
Hay alguna manera de bajar los colores pero lo mas rápido posible, es que de uno en uno es muy lento, son muchos.
Saludos
  • 0

#4 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.460 mensajes
  • LocationMéxico

Escrito 12 marzo 2012 - 08:47

Hay alguna manera de bajar los colores pero lo mas rápido posible, es que de uno en uno es muy lento, son muchos.


Si, mandale un correo al dueño de la página y que te regale sus imagenes en un zip :D :D :D

Saludos
  • 0

#5 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 09:39

Vamos "robarle" las imágenes  (h)



delphi
  1. program Colores;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Urlmon,
  7.   SysUtils,
  8.   Classes;
  9.  
  10.  
  11. const
  12.   strColor = '[url=http://images.myperfectcolor.com/repositories/images/colors/';]http://images.myperfectcolor.com/repositories/images/colors/';[/url]
  13.  
  14. procedure ProcesarFichero;
  15. var
  16.   Dst: String;
  17.   Html: AnsiString;
  18.   Str: AnsiString;
  19.   P: PAnsiChar;
  20. begin
  21.   // Creamos la carpeta de destino
  22.   Dst:= IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'colores\';
  23.   if not ForceDirectories(Dst) then
  24.     Exit;
  25.   // Cargamos la pagina
  26.   with TStringList.Create do
  27.   try
  28.     LoadFromFile(ChangeFileExt(ParamStr(0),'.tmp'));
  29.     Html:= Text;
  30.   finally
  31.     Free;
  32.   end;
  33.   // Buscamos los enlaces (es un poco chapucero pero sirve)
  34.   P:= PAnsiChar(Html);
  35.   while P^ > #0 do
  36.   begin
  37.     if StrLComp(P,strColor,Length(StrColor)) = 0 then
  38.     begin
  39.       inc(P,Length(strColor));
  40.       Str:= EmptyStr;
  41.       while (P^ > #0) and (P^ <> '"') do
  42.       begin
  43.         Str:= Str + P^;
  44.         inc(P);
  45.       end;
  46.       // Bajamos la imagen a la carpeta de destino
  47.       Writeln(Str);
  48.       UrlDownloadToFile(nil,
  49.       PChar(strColor + Str),
  50.       PChar(Dst + Str),0,nil)
  51.     end;
  52.     inc(P);
  53.   end;
  54. end;
  55.  
  56. var
  57.   i: Integer;
  58. begin
  59.   i:= 1;
  60.   // Bajamos todas las paginas que podamos
  61.   while UrlDownloadToFile(nil,
  62.     PChar('[url=http://www.myperfectcolor.com/Mobile-Paints-Color-Matches/136.htm/page/']http://www.myperfectcolor.com/Mobile-Paints-Color-Matches/136.htm/page/'[/url] + IntToStr(i)),
  63.     PChar(ChangeFileExt(ParamStr(0),'.tmp')),0,nil) = S_OK  do
  64.   begin
  65.     // Procesamos cada pagina por separado
  66.     ProcesarFichero;
  67.     inc(i);
  68.   end;
  69. end.



Pero te dejo a ti la tarea de como sacar los nombres de cada color  :D
  • 0

#6 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 09:41

Adjunto el código en un zip, porque en el foro se ve mal

Archivos adjuntos


  • 0

#7 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 10:04

Hola
No se como funciona, lo corrí pero no hace nada.
Me parece que conocer el nombre de cada foto (color) eso si va a ser una faena. 8o|
Lo veo difícil.
No es que este quedándome con los colores, el palette de esa empresa lo tengo, solo que en cartulina, tipo abanico.
Lo que estoy haciendo es un programa que me muestre las características de cada color (formula) y me gustaba la posibilidad de que se viera la foto, la puedo escanear del palette, pero es mucha faena.
No se como hacerlo. :
Saludos
  • 0

#8 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 10:19

Hola
A ver si con esto ayudo en algo:
Segun lo que he visto cada color esta en la misma ubicación, solo cambia el numero segun el color, se pueden ver asi:
Color 1, pagina = http://images.myperf...C00093397-1.jpg
Color 2, pagina = http://images.myperf...C00093398-1.jpg
Color 3, pagina = http://images.myperf...C00093399-1.jpg
Color 4, pagina = http://images.myperf...C00093400-1.jpg
En realidad solo cambia el numero MPC00093397-1.jpg y es consecutivo.
Conociendo ese dato se puede hacer algo ?.
Saludos
  • 0

#9 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 10:26

Te veo con pocas ganas de trabajar  :D

Pues venga, aquí te dejo el programa completo.

Cuando lo ejecutas se te tiene que mostrar una pantalla negra donde van apareciendo los nombres de los colores según se van descargando. Las imágenes las encontraras en una carpeta llamada colores dentro de la carpeta del programa

Archivos adjuntos


  • 0

#10 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.460 mensajes
  • LocationMéxico

Escrito 12 marzo 2012 - 10:28

Te veo con pocas ganas de trabajar  :D

Pues venga, aquí te dejo el programa completo.

Cuando lo ejecutas se te tiene que mostrar una pantalla negra donde van apareciendo los nombres de los colores según se van descargando. Las imágenes las encontraras en una carpeta llamada colores dentro de la carpeta del programa


Este programa se parece al Sin Antena  *-) *-) :D :D :D

Saludos
  • 0

#11 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 10:32


Te veo con pocas ganas de trabajar  :D

Pues venga, aquí te dejo el programa completo.

Cuando lo ejecutas se te tiene que mostrar una pantalla negra donde van apareciendo los nombres de los colores según se van descargando. Las imágenes las encontraras en una carpeta llamada colores dentro de la carpeta del programa


Este programa se parece al Sin Antena  *-) *-) :D :D :D

Saludos


Ese si que era un gran programa. No se por que dejamos su desarrollo  *-) *-) *-)
  • 0

#12 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 10:33

Hola

Te veo con pocas ganas de trabajar  :D

:D :D, no creas amigo, es que son muchos colores y es desesperante ir de uno en uno. 8o|
He probado el programa pero no me hace nada, ni siquiera crea la carpeta. :

Este programa se parece al Sin Antena  *-) *-) :D :D :D

Saludos

:D :D, en so mismo pensé cuando estaba solicitando esto  :D :D
Parece que no me quieren los colores... : 8o|
Saludos
  • 0

#13 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 10:37

Pues yo lo acabo de descargar en otro PC y lo ejecuto sin problemas ... tarda unos segundos en empezar a descargar ¿no lo cerraras antes de que empiece?
  • 0

#14 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 10:39

Hola
No amigo, lo ejecuto, sale la pantalla negra, espera un par de segundos y se cierra solo, pero no crea ni la carpeta ni baja nada.
Saludos
  • 0

#15 seoane

seoane

    Advanced Member

  • Administrador
  • 1.259 mensajes
  • LocationEspaña

Escrito 12 marzo 2012 - 10:46

Pues por algún motivo no puedes descargar la página web ¿te bloquearían el acceso? :D
  • 0

#16 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 10:48

Hola
No veo la razón, ni me conocen, aunque en estos días la he visitado mucho buscando los colores, pero no creo que eso amerite mi banneo  :D :D
No se que pasa. 8o| :
Saludos
  • 0

#17 escafandra

escafandra

    Advanced Member

  • Administrador
  • 4.111 mensajes
  • LocationMadrid - España

Escrito 12 marzo 2012 - 12:56

Pues yo estaba preparando un ejemplo que trataba de ser algo didáctico, pero veo que seoane se me adelantó.

Lo he estructurado en funciones separadas para que se vea el funcionamiento y se basa en cargar cada una de las paginas que quiere Caral y extraer las imagenes buscando las direcciones para descargarlas después.

Bueno, voy a ponerlo, seguro que sirve de algo:



delphi
  1. program Project2;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6.   Windows, Messages, SysUtils, StrUtils, Urlmon, Wininet;
  7.  
  8. function DownLoadURLImage(URL: String): boolean;
  9. var
  10.   l: integer;
  11.   N: String;
  12. begin
  13.   l:= length(URL);
  14.   repeat
  15.     dec(l);
  16.   until URL[l] = '/';
  17.   N:= Copy(URL, l+1, length(URL)-l);
  18.   Result:= (S_OK = URLDownloadToFile(nil, PCHAR(URL), PCHAR(N), 0, nil));
  19. end;
  20.  
  21.  
  22. function InternetReadWeb(URL: String): String;
  23. var
  24.   hNet:      pointer;
  25.   hUrl:      pointer ;
  26.   Buffer:    CHAR;
  27.   BytesRead:  DWORD;
  28.   NoError:    boolean;
  29.   Ind:      integer;
  30. begin
  31.   BytesRead:= 0;
  32.   Result:= '';
  33.  
  34.   if InternetAttemptConnect(0) <> ERROR_SUCCESS then exit;
  35.  
  36.   hNet:= InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0);
  37.   if hNet <> nil then
  38.   begin
  39.     hUrl:= InternetOpenUrl(hNet, PCHAR(URL), nil, 0, INTERNET_FLAG_RELOAD, 0);
  40.     if hUrl <> nil then
  41.     begin
  42.       // Lee la pagina web...
  43.       ind:=0;
  44.       repeat
  45.         NoError:= InternetReadFile(hUrl, @Buffer, sizeof(CHAR), BytesRead);
  46.         if NoError and (BytesRead = 0) then break;
  47.         Result:= Result + Buffer;
  48.         inc(ind, BytesRead);
  49.       until NoError and (BytesRead=0);
  50.       InternetCloseHandle(hUrl);
  51.     end;
  52.     InternetCloseHandle(hNet);
  53.   end;
  54. end;
  55.  
  56.  
  57. procedure DownLoadImages;
  58. var
  59.   URL, Image: String;
  60.   Page: String;
  61.   i, n, l: integer;
  62.  
  63. begin
  64.   n:=0;
  65.   URL:= '_http://www.myperfectcolor.com/Mobile-Paints-Color-Matches/136.htm/page/';  // Quitar el guión delante de http
  66.   for i:= 1 to 43 do
  67.   begin
  68.     Page:= InternetReadWeb(URL+IntToStr(i));
  69.     repeat
  70.       n:= PosEx('.jpg', Page, n);
  71.       if n = 0 then break;
  72.       l:= n;
  73.       repeat
  74.         dec(l);
  75.       until Page[l] = '"';
  76.       inc(n, 4);
  77.       Image:= Copy(Page, l+1, n-l-1);
  78.       writeln(Image);
  79.       DownLoadURLImage(Image);
  80.     until n=0;
  81.   end;
  82. end;
  83.  
  84. var
  85. c: char;
  86. begin
  87.   DownLoadImages;
  88.   Writeln('Fin de captura');
  89.   readln(c);
  90. end.



Subo el ejemplo.

PD: Se debe quitar el guión delante de http está puesto para evitar que el foro meta las etiquetas
[url][/url]
.
      En el archivo que subo está bien.

Saludos.
  • 0

#18 Caral

Caral

    Advanced Member

  • Moderador
  • PipPipPip
  • 4.266 mensajes
  • LocationCosta Rica

Escrito 12 marzo 2012 - 01:15

Hola
Gracias amigo.
Seoane fe tan rápido que ya tengo las fotos con su programa. :D
Muchas gracias a todos por vuestra ayuda. (y)
Hilo resuelto.
Saludos
  • 0




IP.Board spam blocked by CleanTalk.