PDA

Ver la versión completa : ¿se puede?



xXBeRSeKeRXx
25/06/2009, 12:01
Hola, necesito automatizar un proceso que hasta el momento se venia haciendo en parte manual.
Es para un sistema bancario que utiliza cotizaciones traidas desde xe.com, el problema es que esa web tiene 2 opciones para descargar diariamente el archivo actualizado:

1- via mail
2- via url

Hasta el momento se hacia via url, el administrador ingresaba a dicha url, hacia clic en el boton de descargar, lo guardaba en una carpeta determinada y luego un script lo parseaba. Es por esto que digo que se venia haciendo en parte manual, seria algo similar a la primer opcion de hacerlo via email, es decir, luego de recibir el archivo en el email, se guarda en el directorio especificado.

El problema surge al tener que simular el clic en el boton de descarga que aparece en la url que nos proporcionan, primero porque para hacer cualquier prueba debo ejecutar un script desde un servidor determinado, ya que validan url, usuarios (hay que registrarse para usar su servicio), ips registradas, etc... en definitiva, no puedo hacer muchas pruebas, sino que el trabajo lo estoy haciendo "a ciegas".

Se me ocurrio una forma de generar la url donde esta el archivo a descargar, pero aun no se como automatizar el clic en el popup que se abre para confirmar la descarga.

Las preguntas concretas serian:

1- ¿puedo obtener el codigo HTML para almacenarlo en una variable de PHP partiendo de una URL?
2- ¿hay forma de simular el clic en un popup?

Desde ya muchas gracias

vofijatee
25/06/2009, 12:32
Desde PHP no te sabría decir, pero desde una aplicación de escritorio podrias hacer todo lo que decis sin ningún tipo de problema. (y en menos de 1hs).

Te doy un ejemplo, hace 1 mes desarrolle una aplicación que corre como un servicio en Windows, y una vez por día hace un upload por HTTP (osea abro un web browser, lleno los campos y le doy click al botón enviar) desde el programa.

AHora estoy medio tapado de trabajo, pero tipo 6 llego a casa y si queres te doy una mano con el código, ya te digo, no lleva más de 1hs hacer una aplicación así.

El tema es como hacerlo desde PHP...

salu2

xXBeRSeKeRXx
25/06/2009, 12:42
Desde PHP no te sabría decir, pero desde una aplicación de escritorio podrias hacer todo lo que decis sin ningún tipo de problema. (y en menos de 1hs).

Te doy un ejemplo, hace 1 mes desarrolle una aplicación que corre como un servicio en Windows, y una vez por día hace un upload por HTTP (osea abro un web browser, lleno los campos y le doy click al botón enviar) desde el programa.

AHora estoy medio tapado de trabajo, pero tipo 6 llego a casa y si queres te doy una mano con el código, ya te digo, no lleva más de 1hs hacer una aplicación así.

El tema es como hacerlo desde PHP...

salu2

La idea es que sea automatico, es decir, ni siquiera tener que abrir un navegador para ejecutar nada. SIno que todo correria via CRON a una determinada hora del dia, es por eso que el proceso debe ser automatico en su totalidad.

Ahora estoy haciendo pruebas sencillas con archivos propios a ver que tal funciona, obtengo el codigo HTML de una pagina "X" y mediante javascript capturo todos los links, mediante validaciones me quedo con el link que corresponde a la ubicacion del archivo que quiero descargar (lo podria hacer mediante el id del tag pero en caso de que no lo tenga el script no funcionaria) y luego redirecciono a la url que tenga dicho tag. Ahi se me abre otra pagina donde debo confirmar la descarga y luego aceptar el popup...

Ahora que pienso una poco mas tambien debo seleccionar la ubicacion donde almacenar el archivo :s... Creo que es imposible con PHP...

Enkapzulada
25/06/2009, 12:53
ahora cuando venga mi chow fan en el almuerzo lo leo bien, capaz se me esta ocurriendo algo pero no terminé de leer :$

:D

vofijatee
25/06/2009, 12:58
La idea es que sea automatico, es decir, ni siquiera tener que abrir un navegador para ejecutar nada. SIno que todo correria via CRON a una determinada hora del dia, es por eso que el proceso debe ser automatico en su totalidad.

Ahora estoy haciendo pruebas sencillas con archivos propios a ver que tal funciona, obtengo el codigo HTML de una pagina "X" y mediante javascript capturo todos los links, mediante validaciones me quedo con el link que corresponde a la ubicacion del archivo que quiero descargar (lo podria hacer mediante el id del tag pero en caso de que no lo tenga el script no funcionaria) y luego redirecciono a la url que tenga dicho tag. Ahi se me abre otra pagina donde debo confirmar la descarga y luego aceptar el popup...

Ahora que pienso una poco mas tambien debo seleccionar la ubicacion donde almacenar el archivo :s... Creo que es imposible con PHP...

Lo que yo te digo es automático, un proceso que a x hora se ejecuta y hace todo lo que tiene que hacer, el navegador se abre solo y se cierra solo (o podes ocultarlo para que no se muestre "visible")


Eso que decis no se puede hacer con PHP por razones de seguridad de HTML. (Va, si es siempre fijo puede que si)
slaudos.

Enkapzulada
25/06/2009, 13:46
int file_put_contents ( string $filename , mixed $data [, int $flags= 0 [, resource $context ]] )
This function is identical to calling fopen(), fwrite() and fclose() successively to write data to a file.

If filename does not exist, the file is created. Otherwise, the existing file is overwritten, unless the FILE_APPEND flags is set.


Creo, solo creo que con algo asi podes hacerlo,

file_put_contents('archivin.png', file_get_contents('http://www.enkapzulada.com/archivin.png'));

Te tenes que crear un schedule que te reproduzca esto automático.


Es una punta, fijate usos del file_put_contents para copiar files de urls.

Enkapzulada
25/06/2009, 13:48
wrong btn! :D

Enkapzulada
25/06/2009, 13:53
take a look



PHP5 -

file_put_contents('filename.jpg', * file_get_contents('http://www.webs ite.com/X.jpg'));

PHP4 -

$image = file_get_contents('http://www.webs* ite.com/X.jpg');
$f = fopen('filename.jpg', 'w');
fwrite($f, $image);
fclose($f);





<?
// DOWNLOAD REMOTE FILE
// this is a-lot more complicated than it looks
// $url is the url of the file, must have fopen wrappers enabled
// $dir is the directory to save the file to relative to the current working directory
// file is saved with the same file name from its source
function getfile($url, $dir){
file_put_contents($dir.substr($url,strrpos($url,'/'),strlen($url)), file_get_contents($url));
}
?>

vofijatee
25/06/2009, 13:54
Eso deber{ia funcar... el tema es si se genera el link de descarga automáticamente y la única forma de bajarlo es mediante el PopUp :confused06:

Enkapzulada
25/06/2009, 14:04
Pero esto no te crea un popup te hace copy de la url y la guardas en un directorio seteado.

vofijatee
25/06/2009, 14:06
A ver, usando el fuente que puso enkap arriba podrías hacer algo asi:



$web = file_get_contents("http://www.xe.com/popup/");

// buscas todos los links
preg_match_all('/<a([^>]+)\>(.*?)\<\/a\>/i', $web, $links);

// ya deberías tener todos los links en el array LINKS


// bajas todos
foreach ($links as $archivos)
{
getfile($archivos,"directorio");
}

function getfile($url, $dir)
{
file_put_contents($dir.substr($url,strrpos($url,'/'),strlen($url)), file_get_contents($url));
}



No tengo web server para probarlo ahora, asique puede fallar :x

salu2

xXBeRSeKeRXx
25/06/2009, 14:23
Ya la habia encarado como lo ultimo que pusiste vofijate, pero no lo probe porque llego la comida :p... ahora retomo...

Lyzet
25/06/2009, 15:07
me encantaria saber de que estan hablando, la verdad que releo y releo pero las palabras empezaron a perder el sentido.
no viene al caso pero me gustaria estudiar algo con respecto a la pc. alguno tiene una idea?


saludos a todos, especial a mi amego berse!!!



pd:sorry por irme de tema

xXBeRSeKeRXx
25/06/2009, 15:26
me encantaria saber de que estan hablando, la verdad que releo y releo pero las palabras empezaron a perder el sentido.
no viene al caso pero me gustaria estudiar algo con respecto a la pc. alguno tiene una idea?


saludos a todos, especial a mi amego berse!!!



pd:sorry por irme de tema

Que haces aca!!???... :p

Lo que pasa es que estoy trabado con una cosa en el laburo y decidi sacarle el jugo al foro ^^... la verdad que los chicos una masa por los consejos...

Cuando decis "algo con respecto a la pc" podes ir desde tecnico en reparacion / soporte hasta una ingenieria en sistemas / informatica... tambien podrias dedicarte a data entry, en fin, cualquier trabajo en el que estes en contacto con una PC, hasta podrias ser tester de juegos ^^...

Creo que deberias pensar que te gusta y encaminarte un poco mas ^^...

Retomando mi tema, tuve que suspender el trabajo este porque salio otro de mayor prioridad, asi que voy a tener un tiempito mas para investigar...

Lyzet
25/06/2009, 15:51
tester de juego me encantaria ^^
tengo alma de eso, siempre me la paso criticando la jugabilidad de los juegos.
dsp charlo con vos^^

Enkapzulada
25/06/2009, 16:33
ser pc o no ser pc :P


Bueno mejor que tengas mas time! cualquier cosa chiflá!

<3