Binding mod_curl [Descarga de ficheros de Internet]

Started by josebita, November 25, 2011, 12:32:52 AM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

josebita

Bueno, el primero de los cambios que comentabas, Splinter, ya lo he implementado.

Luego me pondré con la parte de la mensajería.

KeoH

A mi ya me está sonando esto a chino mandarín profundo de las montañas de Zhouweixiang

SplinterGU

Keoh, ya lo entenderas... y veras que simple es...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

pinger

Solo puedo decir ... Karma up para Josebita y el maestro rata :)

josebita

#34
Quote from: SplinterGU on November 25, 2011, 06:41:34 PM
bien... al menos una simple post/get, en la que tienes que tener funciones para setear campos del request (curl_formadd), no olvides liberar los forms cuando ya no los uses (curl_formfree).

con eso podes armar una linda implementacion...

hay ejemplos muy simples en el site de curl.
Anoche sólo hice el primero de los cambios y luego estuve mirando un rato el tema BGR<->RGB en 32 bits y alguna cosillas más.

Intentaré implementar el tema de los formularios lo antes posible. Te referías a algo tipo esto, ¿verdad?.

[Edito] Splinter, una cosa: ¿Es posible hacer una función dentro de una librería que acepte cualquier tipo de parámetro?. ¿Un puntero o puedo definir de alguna forma los tipos de parámetros de entrada a la función en el function_exports para que acepten cualquier tipo de dato?
He visto que los tipos de entrada de algunas funciones son algo tipo "IV++". ¿Qué significan esos "+"?.

SplinterGU

#35
V++ son variables... no argumentos variables, sino variables, tipo write_var... con eso puedes aceptar cualquier tipo de dato, pero no cualquier cantidad de argumentos.

ese ejemplo es correcto...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

A eso me refería, sí, a un tipo de argumento variable. Me vendría bien eso para pasar las opciones a curl.

SplinterGU

si, eso mismo... fijate la implementacion de write_var o save...
Download Lastest BennuGD Release: http://www.bennugd.org/node/2

josebita

Bueno, he estado trabajando un poco y ahora es un binding "de verdad" dado que mapea casi directamente muchas funciones de curl_easy y debería permitir hacer casi cualquier cosa de las que permite la librería.
El código de descarga de ficheros quedaría ahora:
    // Start libcurl, set options, perform transfer
    curl = curl_init();
    if(curl == -1)
        say("Curl initialization failed, quitting");
        quit = 1;
        return;
    end;
   
    curl_setopt(curl, 43,    1);                            //CURLOPT_NOPROGRESS
    curl_setopt(curl, 10001, "BennuGD forums.html");        //CURLOPT_WRITEDATA
    curl_setopt(curl, 10002, "http://forum.bennugd.org");   //CURLOPT_URL
   
    curl_perform(curl, &status);
   
    // Wait for the transfer to finish
    while(status != 0)
        FRAME;
    end;
   
    curl_cleanup(curl);
   
    say("Download done!");
Ignorando el hecho de que aún hay que meter los códigos de las opciones numericamente, yo diría que se parece bastante a lo que planteas, Splinter. Y además no es nada difícil implementar una función que, dados origen y destino, descargue directamente el fichero.

Además, el nuevo código permite hasta 16 -número arbitrario que se puede cambiar durante la compilación- descargas simultáneas y las funciones que he implementado hasta ahora son:
    { "CURL_INIT"           , ""      , TYPE_INT , bgd_curl_easy_init      },
    { "CURL_CLEANUP"        , "I"     , TYPE_INT , bgd_curl_easy_cleanup   },
    { "CURL_FORMADD"        , "IISIS" , TYPE_INT , bgd_curl_formadd        },
    { "CURL_FORMFREE"       , "I"     , TYPE_INT , bgd_curl_formfree       },
    { "CURL_SETOPT"         , "III"   , TYPE_INT , bgd_curl_easy_setopt    },
    { "CURL_SETOPT"         , "IIS"   , TYPE_INT , bgd_curl_easy_setopt2   },
    { "CURL_PERFORM"        , "IP"    , TYPE_INT , bgd_curl_easy_perform   },
Así que ya se pueden enviar peticiones POST tanto a través de la función CURL_FORMADD como a pelo mediante CURL_SETOPT(curl, CURLOPT_POSTFIELDS, "cadena").

La descarga, eso sí, de momento se hace a stdout salvo que se especifique un fichero de salida, en cuyo caso se escribirá a ese fichero. A ver si mañana le añado una opción a curl_setopt para que la salida vaya a una string. Entiendo que mezclar eso con curl_formadd sería lo ideal para la comunicación cliente-servidor que planteas, ¿verdad Splinter?.

SplinterGU

Download Lastest BennuGD Release: http://www.bennugd.org/node/2

Erkosone

WoW joseba que velocidad.


Ayer por la noche estuvimos hablando pinger y yo sobre un tema que muy probablemente le va a interesar a toda la comunidad bennu que publica juegos en app store, haber si soy capaz de explicarme "correctamente".
Si suelto alguna burrada disculpad, pues voy a intentar explicar algo que desconozco como funciona a bajo nivel, pero que a simple vista me ha dado la sensación de que puede funcionar.


Existe una lib especifica para Obj-C que se hace llamar "APpirater", esta lib hace lo siguiente:


- Pasados 30 días, o 15 ejecuciones de la aplicación, lo que hace es mostrarte una ventanita en pantalla donde te pregunta que valoración le das a la aplicación, puedes escojer desde 1 estrella hasta 5 estrellas, también te da la opción de escribir un breve mensaje diciendo lo que te ha gustado de la aplicacion o lo que no te ha gustado, y finalmente cuando aceptas..


Esta lib POSTEA en APP STORE tu comentario automaticamente.




El tema es interesante porque si de alguna manera con mod_curl se puede llegar a postear un review en app store..  el valor de usar curl es exponencial.
Si desde nuestro propio juego podemos hacer un process que puestre algo parecido, y enviar un review a APP Store en la page de la aplicación.. bueno, si esto se puede hacer no tengo palabras.. sería algo grande.
El tema.. y aquí ya interviene el buen hacer y la dedicación de los que sabéis interpretar decentemente el código de esta lib, para averiguar cual es el método para enviar este mensajito a la page del producto en la tienda.


Perdon por el toston.. me ha parecido interesante y quería haceros saber de esta lib, si se pudiera hacer algo parecido con curl supongo que todo el que publique juegos en la tienda de apple estará encantado.




Si algún entendido quiere hechar un vistazo a la lib: http://arashpayan.com/blog/2009/09/07/presenting-appirater/

josebita

Imagino que se podría hacer como comentas directamente. De todas formas, en su momento estuve mirando esto:
http://bjango.com/articles/ituneslinks/
Y parece que se pueden crear enlaces directamente a la sección de reviews de la app store en el dispositivo. La nueva versión del código incluye la opción de abrir enlaces así que se podrá enlazar directamente a la App Store, como comentas, desde el código Bennu.

Es algo que creo que no había comentado pero que implementé hace tiempo. Me falta comprobar que todo funciona como debe.


josebita

Hoy no he hecho nada de esto pero dadme un par de días y completo un poco el binding con el par de funciones que le faltan y meto lo de descarga a string.

Pues eso, que en un par de días recompilo para iOS y libero una template actualizada.

Erkosone

Genial, ya tengo ganas de probarlo.
Gracias por el curro que te estás pegando.