PDA

Ver la Versión Completa : Download archivo desde web cada 5 segundos


inecoiec
15-05-2010, 00:13:53
Hola, hace algún tiempo trabajé bastante en delphi 6, y como me sucede siempre, cuando dejo de usar un lenguaje de programación olvido gran parte de las cosas que aprendí. Ésto lo comento para "cubrirme" porque posiblemente lo que estoy consultando es algo básico pero no le encuentro la vuelta.

Tengo desarrollados unos equipos que tienen un servicio web embebido y que generan un archivo XML con algunos datos, a los que accedo en forma remota desde el explorador.
Estos equipos actualizan si archivo XML cada 1 segundo (están midiendo temperatura y humedad)

La idea es hacer una página web que lea los archivos XML de éstos equipos y los muestre. Estoy utilizando java Script para ello.

El asunto es que java script no puede leer archivos que no estén dentro de su dominio por lo que no puedo acceder directamente a éstos XML (que están en otros sitios), por lo que pensé en hacer un programa en Delphi, que grabe los XML en un directorio local para que el js pueda leerlos.

Hice ésta rutina para un solo archivo

procedure TForm1.Button1Click(Sender: TObject);
var
lStream: TFileStream;
sWebPage : string;
T:TMemoryStream;
begin
sWebPage := 'ijtt://htp.htp.htp.htp/variables.xml';
// lo puse así porque me dio un error el evio de éste tema que me dice
// que no puedo manar links

T:=TMemoryStream.Create;

try
IdHTTP1.Request.Username := 'admin';
IdHTTP1.Request.Password := 'admin';
idHTTP1.Get(sWebPage, t);
t.savetofile('c:\sitiolocal\variables.xml');
IdHTTP1.Disconnect;
except on e:exception do
showmessage('problemas de conexión');
end;

end;

Y funciona bien, pero cuando repito ésta actualización con un timer, digamos cada 5 segunos, en algún momento se cuelga. No se si será porque conicide con la lectura que hago desde el js.

Podrían decirme si hay alguna manera de optimizar ésta rutina ??

Muchas gracias de antemano


pero como todo programa que se deja de usar por bastante tiempo

movorack
15-05-2010, 01:17:38
y si pones a la pagina misma a que lea el servicio web directamente?

inecoiec
15-05-2010, 01:22:08
y si pones a la pagina misma a que lea el servicio web directamente?

El tema es que la lectura la estoy haciendo en javascript y no permite acceder a archivos fuera del dominio
Por eso pensé en ejecutar un programa aparte que me grabe los archivos en el directorio donde está la página que muestra los datos.

Quizás se pueda hacer en php pero jamás hice nada con eso

Casimiro Notevi
15-05-2010, 01:51:27
Yo descargo una imagen de una página web cada 5 minutos, lo hago mediante wget y un script que se ejecuta mediante crontab (linux). Seguro que en windows existe algo parecido.

mamcx
15-05-2010, 02:17:47
except on e:exception do
showmessage('problemas de conexión');
end;


Este es tu primer GRAN error. NUNCA silencies las excepciones a menos que como ahora, quieras quedar en el limbo adivinando que pudo haber pasado.

No hay razón para que el JS bloquee la escritura de los archivos, PERO, es posible que alcance a leer un pedazo corrompido de los datos. Es mejor que grabes en un archivo temp (ej: c:\sitiolocal\variables.xm_) y luego lo muevas al original.

Serie bueno que activaras el loggin en indy pa que puedas ver bien que es lo que esta pasando.

movorack
15-05-2010, 03:03:39
Pues yo me iria nuevamente con el tema de que la web consuma el servicio...

Una posibilidad es PHP con NuSOAP (http://sourceforge.net/projects/nusoap/)...

Googleando (http://www.google.com.co/search?q=php+nusoap+tutorial) encuentras varios tutoriales para crear servicios y consumirlos con esta libreria... si lo quieres en español pues este (http://www.nociondigital.com/webmasters/php-tutorial-servicios-web-con-php-nusoap-detalle-168.html) te puede servir.

inecoiec
17-05-2010, 00:53:16
Este es tu primer GRAN error. NUNCA silencies las excepciones a menos que como ahora, quieras quedar en el limbo adivinando que pudo haber pasado.

No hay razón para que el JS bloquee la escritura de los archivos, PERO, es posible que alcance a leer un pedazo corrompido de los datos. Es mejor que grabes en un archivo temp (ej: c:\sitiolocal\variables.xm_) y luego lo muevas al original.

Serie bueno que activaras el loggin en indy pa que puedas ver bien que es lo que esta pasando.

En realidad como estoy en el debugger, aunque salga por una excepción, recibo un mensaje aunque de hecho es muy difícil de interpretar.

Esa es una opción en la que no había pensado (la de generar un TEMP). No se igual que pasa si el JS lee al mismo tiempo que actualizo el html

Lo de hacer algo del lado del servidor, no me es posible, porque estoy trabajando sobre un controlador que tiene un servicio web corriendo y no en una compu, aunque igual me puede servir para otra aplicación.

Gracias a todos... después les cuento cómo lo resolví