Seleccionar imagen de sitio web y guardar desde delphi
#1
Escrito 11 marzo 2012 - 04:29
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).
#2
Escrito 12 marzo 2012 - 01:27
Pero vamos por partes. En el primer caso si te fijas la URL (la dirección de la pagina) tiene una forma como esta:
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:
http://www.myperfectcolor.com/repositories/images/products/xxxxxx.jpg 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:
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.
#3
Escrito 12 marzo 2012 - 05:46
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
#4
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
Saludos
#5
Escrito 12 marzo 2012 - 09:39
program Colores; {$APPTYPE CONSOLE} uses Urlmon, SysUtils, Classes; const strColor = '[url=http://images.myperfectcolor.com/repositories/images/colors/';]http://images.myperfectcolor.com/repositories/images/colors/';[/url] procedure ProcesarFichero; var Dst: String; Html: AnsiString; Str: AnsiString; P: PAnsiChar; begin // Creamos la carpeta de destino Dst:= IncludeTrailingPathDelimiter(ExtractFilePath(ParamStr(0))) + 'colores\'; if not ForceDirectories(Dst) then Exit; // Cargamos la pagina with TStringList.Create do try LoadFromFile(ChangeFileExt(ParamStr(0),'.tmp')); Html:= Text; finally Free; end; // Buscamos los enlaces (es un poco chapucero pero sirve) P:= PAnsiChar(Html); while P^ > #0 do begin if StrLComp(P,strColor,Length(StrColor)) = 0 then begin inc(P,Length(strColor)); Str:= EmptyStr; while (P^ > #0) and (P^ <> '"') do begin Str:= Str + P^; inc(P); end; // Bajamos la imagen a la carpeta de destino Writeln(Str); UrlDownloadToFile(nil, PChar(strColor + Str), PChar(Dst + Str),0,nil) end; inc(P); end; end; var i: Integer; begin i:= 1; // Bajamos todas las paginas que podamos while UrlDownloadToFile(nil, 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)), PChar(ChangeFileExt(ParamStr(0),'.tmp')),0,nil) = S_OK do begin // Procesamos cada pagina por separado ProcesarFichero; inc(i); end; end.
Pero te dejo a ti la tarea de como sacar los nombres de cada color
#6
Escrito 12 marzo 2012 - 09:41
Archivos adjuntos
#7
Escrito 12 marzo 2012 - 10:04
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.
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
#8
Escrito 12 marzo 2012 - 10:19
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
#9
Escrito 12 marzo 2012 - 10:26
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
#10
Escrito 12 marzo 2012 - 10:28
Te veo con pocas ganas de trabajar
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
Saludos
#11
Escrito 12 marzo 2012 - 10:32
Te veo con pocas ganas de trabajar
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
Saludos
Ese si que era un gran programa. No se por que dejamos su desarrollo
#12
Escrito 12 marzo 2012 - 10:33
, no creas amigo, es que son muchos colores y es desesperante ir de uno en uno.Te veo con pocas ganas de trabajar
He probado el programa pero no me hace nada, ni siquiera crea la carpeta.
, en so mismo pensé cuando estaba solicitando estoEste programa se parece al Sin Antena
Saludos
Parece que no me quieren los colores...
Saludos
#13
Escrito 12 marzo 2012 - 10:37
#14
Escrito 12 marzo 2012 - 10:39
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
#15
Escrito 12 marzo 2012 - 10:46
#16
Escrito 12 marzo 2012 - 10:48
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
No se que pasa.
Saludos
#17
Escrito 12 marzo 2012 - 12:56
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:
program Project2; {$APPTYPE CONSOLE} uses Windows, Messages, SysUtils, StrUtils, Urlmon, Wininet; function DownLoadURLImage(URL: String): boolean; var l: integer; N: String; begin l:= length(URL); repeat dec(l); until URL[l] = '/'; N:= Copy(URL, l+1, length(URL)-l); Result:= (S_OK = URLDownloadToFile(nil, PCHAR(URL), PCHAR(N), 0, nil)); end; function InternetReadWeb(URL: String): String; var hNet: pointer; hUrl: pointer ; Buffer: CHAR; BytesRead: DWORD; NoError: boolean; Ind: integer; begin BytesRead:= 0; Result:= ''; if InternetAttemptConnect(0) <> ERROR_SUCCESS then exit; hNet:= InternetOpen('agent', INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0); if hNet <> nil then begin hUrl:= InternetOpenUrl(hNet, PCHAR(URL), nil, 0, INTERNET_FLAG_RELOAD, 0); if hUrl <> nil then begin // Lee la pagina web... ind:=0; repeat NoError:= InternetReadFile(hUrl, @Buffer, sizeof(CHAR), BytesRead); if NoError and (BytesRead = 0) then break; Result:= Result + Buffer; inc(ind, BytesRead); until NoError and (BytesRead=0); InternetCloseHandle(hUrl); end; InternetCloseHandle(hNet); end; end; procedure DownLoadImages; var URL, Image: String; Page: String; i, n, l: integer; begin n:=0; URL:= '_http://www.myperfectcolor.com/Mobile-Paints-Color-Matches/136.htm/page/'; // Quitar el guión delante de http for i:= 1 to 43 do begin Page:= InternetReadWeb(URL+IntToStr(i)); repeat n:= PosEx('.jpg', Page, n); if n = 0 then break; l:= n; repeat dec(l); until Page[l] = '"'; inc(n, 4); Image:= Copy(Page, l+1, n-l-1); writeln(Image); DownLoadURLImage(Image); until n=0; end; end; var c: char; begin DownLoadImages; Writeln('Fin de captura'); readln(c); 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.
#18
Escrito 12 marzo 2012 - 01:15
Gracias amigo.
Seoane fe tan rápido que ya tengo las fotos con su programa.
Muchas gracias a todos por vuestra ayuda.
Hilo resuelto.
Saludos