In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.
Descargar del Drive
Descargar del Drive
Hay alguna manera de poder descargar un archivo del Drive desde Xailer, pero en modo "silencioso", sin actuación por parte del usuario de la aplicación. ???
Si hago...
Local cUrl := "https://drive.google.com/file/d/miarchivocompartido/"
ShellExecute( 0, "open", cURL, 0, 0, SW_SHOWNORMAL )
Me abre el explorador con el archivo correctamente que he solicitado... pero, claro, el usuario tiene que interactuar y clicar en descargar el archivo, y/o seleccionar la carpeta para guardar y finalmente cerrar la ventana.
Seria posible hacerlo sin interacción del usuario???
Gracias
Si hago...
Local cUrl := "https://drive.google.com/file/d/miarchivocompartido/"
ShellExecute( 0, "open", cURL, 0, 0, SW_SHOWNORMAL )
Me abre el explorador con el archivo correctamente que he solicitado... pero, claro, el usuario tiene que interactuar y clicar en descargar el archivo, y/o seleccionar la carpeta para guardar y finalmente cerrar la ventana.
Seria posible hacerlo sin interacción del usuario???
Gracias
Un Saludo,
Xevi.
Xevi.
- ignacio
- Site Admin
- Mensajes: 9252
- Registrado: Lun Abr 06, 2015 8:00 pm
- Ubicación: Madrid, Spain
- Contactar:
Re: Descargar del Drive
Buenos días,
Nunca he intentado hacerlo, pero estoy convencido que la única forma de hacerlo de forma silenciosa es con un Token para OAuth 2.0 https://developers.google.com/identity/protocols/OAuth2.
Tenemos algo hecho al respecto para GMail (\samples\Gmail), pero lógicamente habría que adaptarlo para GDrive. De momento no tenemos intención de meternos con ello. Lo siento. Es posible que haya algún ActiveX con dicha funcionalidad ya en el mercado.
Un saludo
Nunca he intentado hacerlo, pero estoy convencido que la única forma de hacerlo de forma silenciosa es con un Token para OAuth 2.0 https://developers.google.com/identity/protocols/OAuth2.
Tenemos algo hecho al respecto para GMail (\samples\Gmail), pero lógicamente habría que adaptarlo para GDrive. De momento no tenemos intención de meternos con ello. Lo siento. Es posible que haya algún ActiveX con dicha funcionalidad ya en el mercado.
Un saludo
Re: Descargar del Drive
Solucionado.!!!
Solicité consejo a Cristobal Navarro, que dió la conferencia sobre las APIs de Google, y me proporcionó una funcioncilla para descargar ficheros sin necesidad de utilizar las APIs
Solicité consejo a Cristobal Navarro, que dió la conferencia sobre las APIs de Google, y me proporcionó una funcioncilla para descargar ficheros sin necesidad de utilizar las APIs
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Xevi,
si el fichero que quieres descargar es público y conoces su URL puedes usar la clase TAsyncFileDownload para descargarlo en segundo plano. Supongo que lo que te ha dicho Cristobal es algo similar, porque si el fichero no es público creo que no hay ninguna forma de descargarlo sin usar la API de google, tal y como te dijo Ignacio. Si conoces alguna forma de hacerlo, sería bueno que la explicaras para que todos la conozcamos.
si el fichero que quieres descargar es público y conoces su URL puedes usar la clase TAsyncFileDownload para descargarlo en segundo plano. Supongo que lo que te ha dicho Cristobal es algo similar, porque si el fichero no es público creo que no hay ninguna forma de descargarlo sin usar la API de google, tal y como te dijo Ignacio. Si conoces alguna forma de hacerlo, sería bueno que la explicaras para que todos la conozcamos.
Re: Descargar del Drive
El fichero es público... bien si, lo tengo compartido y lo descargo accediendo a un link https de Drive, que me lo facilita al compartir el fichero.
De hecho, igual no me expliqué bien o no se me preguntó bien como tenia el fichero en Drive.
Lo pruebo con TAsyncFileDownload como bien me has indicado.
Gracias.
De hecho, igual no me expliqué bien o no se me preguntó bien como tenia el fichero en Drive.
Lo pruebo con TAsyncFileDownload como bien me has indicado.
Gracias.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Jose,
No consigo hechar a andar TAsyncFileDownload
con un ShellExecute, si, pero no en silencioso...
Que hago mal en TAsyncFileDownload ???
Gracias.
No consigo hechar a andar TAsyncFileDownload
Código: Seleccionar todo
METHOD Button1Click( oSender ) CLASS TFrmConfiguracio
WITH OBJECT ::oAsynFileDownload1
:cLocalFile := "Prueba.zip"
:cRemoteFile := "https://drive.google.com/file/d/151DYvK_Nvi1jdv9j6SnTXHE4OsASVRv6"
:lConnected := .T.
LogDebug( :Run() )
LogDebug( :lSuccess )
LogDebug( :cError )
END WITH
RETURN Nil
con un ShellExecute, si, pero no en silencioso...
Código: Seleccionar todo
METHOD HyperLinkDriveClick( oSender, nFlags, nPosX, nPosY ) CLASS TFrmConfiguracio
ShellExecute( 0, "open", "https://drive.google.com/file/d/151DYvK_Nvi1jdv9j6SnTXHE4OsASVRv6/view?usp=sharing", 0, 0, SW_SHOWNORMAL )
RETURN Nil
Gracias.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Xevi,
recuerda que TAsynFileDownload() descarga de forma asíncrona en segundo plano. Por lo tanto, después de ejecutar :Run(), el control vuelve a tu programa sin haber descargado todavía nada de nada. Lo que tienes que hacer es asignar el evento OnDisconnect, y en el código de ese evento hacer las comprobaciones correspondientes (si ha habido error o si el fichero se ha descargado correctamente). Si quieres, también puedes usar los eventos OnTotalLengthInfo y OnTotalDnLoadInfo si quieres mostrar una progressbar o indicar el porcentage que lleva descargado.
recuerda que TAsynFileDownload() descarga de forma asíncrona en segundo plano. Por lo tanto, después de ejecutar :Run(), el control vuelve a tu programa sin haber descargado todavía nada de nada. Lo que tienes que hacer es asignar el evento OnDisconnect, y en el código de ese evento hacer las comprobaciones correspondientes (si ha habido error o si el fichero se ha descargado correctamente). Si quieres, también puedes usar los eventos OnTotalLengthInfo y OnTotalDnLoadInfo si quieres mostrar una progressbar o indicar el porcentage que lleva descargado.
Re: Descargar del Drive
Jose,
Puesto así...
lSucces me retorna .T.
cError me retorna vacio
Pero no descarga nada.
Crea el fichero Prueba.zip, pero bytes 0
El método Run() se encarga de hacer la descarga, no???
Los métodos OnTotalLengthInfo y OnTotalDnLoadInfo son por si quiero información MIENTRAS descarga, no???
Pues no descarga.
Puesto así...
Código: Seleccionar todo
METHOD Button1Click( oSender ) CLASS TFrmConfiguracio
WITH OBJECT ::oAsynFileDownload1
:cLocalFile := "Prueba.zip"
:cRemoteFile := "https://drive.google.com/file/d/151DYvK_Nvi1jdv9j6SnTXHE4OsASVRv6"
:lConnected := .T.
:OnDisconnect := {|o| LogDebug( "lSuccess", o:lSuccess ), LogDebug( "cError", o:cError ) }
LogDebug( :Run() )
END WITH
RETURN Nil
cError me retorna vacio
Pero no descarga nada.
Crea el fichero Prueba.zip, pero bytes 0
El método Run() se encarga de hacer la descarga, no???
Los métodos OnTotalLengthInfo y OnTotalDnLoadInfo son por si quiero información MIENTRAS descarga, no???
Pues no descarga.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Xevi,
esa URL no devuelve el archivo, sino una página web con un botón para descargarlo. Puedes verlo si copias la URL directamente al navegador. Lo que necesitas es la URL final de descarga, la que de verdad devuelve el archivo.
Has comentado que Cristobal te había dicho un truco para descargarlo... prueba con la URL que te haya dicho él.
esa URL no devuelve el archivo, sino una página web con un botón para descargarlo. Puedes verlo si copias la URL directamente al navegador. Lo que necesitas es la URL final de descarga, la que de verdad devuelve el archivo.
Has comentado que Cristobal te había dicho un truco para descargarlo... prueba con la URL que te haya dicho él.
Re: Descargar del Drive
Jose,
no, con la direccion que me funciona que me ha pasado Cristóbal no funciona con TAsyncFileDowload
Sin embargo, con el "truco" que me ha pasado SI me está funcionando.
No posteo la direccion que me ha pasado / truco por deseo expreso de él.
Aunque el tema lo tenga resuelto por la parte que te he comentado, sólo es por utilizar la clase de Xailer ya que si está implementada, que mejor que usarla.
Pero el resultado final no es el deseado.
No se, algun fichero colgado en una web para poder probar la descarga con TAsyncFileDownload ???
O algun Sample???
Gracias por tu tiempo.
no, con la direccion que me funciona que me ha pasado Cristóbal no funciona con TAsyncFileDowload
Sin embargo, con el "truco" que me ha pasado SI me está funcionando.
No posteo la direccion que me ha pasado / truco por deseo expreso de él.
Aunque el tema lo tenga resuelto por la parte que te he comentado, sólo es por utilizar la clase de Xailer ya que si está implementada, que mejor que usarla.
Pero el resultado final no es el deseado.
No se, algun fichero colgado en una web para poder probar la descarga con TAsyncFileDownload ???
O algun Sample???
Gracias por tu tiempo.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Xevi,
Por lo que he visto, el "truco" consiste en cambiar una parte de la URL. Afortunadamente, en Internet es casi imposible guardar un secreto
No te estaba funcionando porque al descargar el archivo, google no proporciona el tamaño del mismo antes de comenzar la descarga. O lo que es lo mismo, la clase recibía que el tamaño del archivo es de 0 bytes, y por eso no llegaba a descargarlo.
Adjunto un ejemplo funcionando correctamente con tu archivo. Dento del proyecto está el .o del módulo correspondiente corregido.
Por lo que he visto, el "truco" consiste en cambiar una parte de la URL. Afortunadamente, en Internet es casi imposible guardar un secreto
No te estaba funcionando porque al descargar el archivo, google no proporciona el tamaño del mismo antes de comenzar la descarga. O lo que es lo mismo, la clase recibía que el tamaño del archivo es de 0 bytes, y por eso no llegaba a descargarlo.
Adjunto un ejemplo funcionando correctamente con tu archivo. Dento del proyecto está el .o del módulo correspondiente corregido.
- Adjuntos
-
- FileDownload.zip
- (4.47 KiB) Descargado 149 veces
Re: Descargar del Drive
Jose,
Perfecto, como siempre!!!
También es verdad... hoy en dia, no hay secretos con internet!!!
Googleando un poco, un pocquiiiito solamente...
https://sites.google.com/site/sitescapt ... s-directos
Así pues habia un error y no todo era error mio!!!, jejeje.
Mucho mejor así, de esta manera, se controla la descarga e incorporo un ProgessBar.
Incorporo, pues, la descarga de archivos utilizando TAsyncFileDownload.
Gracias.
Perfecto, como siempre!!!
También es verdad... hoy en dia, no hay secretos con internet!!!
Googleando un poco, un pocquiiiito solamente...
https://sites.google.com/site/sitescapt ... s-directos
Así pues habia un error y no todo era error mio!!!, jejeje.
Mucho mejor así, de esta manera, se controla la descarga e incorporo un ProgessBar.
Incorporo, pues, la descarga de archivos utilizando TAsyncFileDownload.
Gracias.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Una cosilla más...
Para que la descarga no sea en otro hilo, o sea que la aplicación no continue hasta que se haya descargado el archivo.
Existe una clase TFileDownload o alguna propiedad a la clase TAsyncFileDownload para que ésta no descargue en multihilo???
O lo tengo que controlar con los eventos/propiedades existentes en la clase???
Gracias.
Para que la descarga no sea en otro hilo, o sea que la aplicación no continue hasta que se haya descargado el archivo.
Existe una clase TFileDownload o alguna propiedad a la clase TAsyncFileDownload para que ésta no descargue en multihilo???
O lo tengo que controlar con los eventos/propiedades existentes en la clase???
Gracias.
Un Saludo,
Xevi.
Xevi.
Re: Descargar del Drive
Xevi,
siempre puedes crear un formulario modal, de forma que el usuario no pueda hacer nada hasta que termine la descarga. Por otro lado, también puedes usar la clase TInternet, que no es asíncrona.
siempre puedes crear un formulario modal, de forma que el usuario no pueda hacer nada hasta que termine la descarga. Por otro lado, también puedes usar la clase TInternet, que no es asíncrona.
Re: Descargar del Drive
Xevi,
lo que yo hago es descargar la actualización siempre en segundo plano, y sólo aviso al usuario cuando ya está lista la descarga. Así le evito tener que estar esperando. Personalmente me parece más elegante.
lo que yo hago es descargar la actualización siempre en segundo plano, y sólo aviso al usuario cuando ya está lista la descarga. Así le evito tener que estar esperando. Personalmente me parece más elegante.
Re: Descargar del Drive
Gracias, Jose.
Como me interesa no cambiar en esta parte de mi aplicación, ya que la descarga del FTP la tengo hasta hoy así,... "bloqueo" la aplicación con una variable a .T. o a .F. en los eventos OnConnect/OnDisconnect
Y luego...
Ta funcionando perfectamente y correctamente!!!
Gracias.
Como me interesa no cambiar en esta parte de mi aplicación, ya que la descarga del FTP la tengo hasta hoy así,... "bloqueo" la aplicación con una variable a .T. o a .F. en los eventos OnConnect/OnDisconnect
Y luego...
Código: Seleccionar todo
...
Static lDownLoadDrive := .F.
...
WITH OBJECT ::oAsynFileDownload1
:cRemoteFile := cUrl
:cLocalFile := cMiFileLocal
:OnConnect := {|| lDownloadDrive := .T. }
:OnDisconnect := {|| lDownloadDrive := .F. }
:Run()
END WITH
while lDownloadDrive
ProcessMessages()
EndDo
Gracias.
Un Saludo,
Xevi.
Xevi.