Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - Eleкtro

#1751
...¿Y esto es a lo que algunos llaman Justicia, casi 3 años de carcel por espiar a tu pareja?. Yo a quien metería a la carcel sería a ella por joder la vida de una persona, que además se supone se quieren o se querían, pues esto es señal de todo lo opuesto al Amor.

Al igual que cuando una pareja deposita confianza en el otro es algo de agradecer, también hay que tener corazón para saber perdonar la deconfianza y hablar las cosas, o en su defecto cortar la relación para siempre, pero no me jodas... ¿denunciar a tu pareja?, ni que la hubiese maltratado...

Eso si, seguro que la muchacha está bien entregada para ofrecerle toda su información personal a Google y Facebook sin oponer ninguna queja y sin denuncias de por medio...

En fin, me indigno.
#1752
Hola TickTack.

Bueno, hay dos maneras.

La primera y más sencilla sería suficiente con adaptar la url:

Código (csharp) [Seleccionar]
Uri uri = new Uri("https://drive.google.com/uc?export=download&id=0B04WDU5Df8zYN2NxMlRlMlhYbm8");

using (WebClient wc = new WebClient()) {
   string content = wc.DownloadString(uri);
}


Si eso para ti te es suficiente, entonces no hay necesidad de que sigas leyendo aquí abajo.






La segunda manera, suponiendo que el documento esté almacenado en tu cuenta personal de Google Drive, es decir, si eres el propietario y/o es de otro usuario pero lo tienes compartido DENTRO de tu cuenta y quieres administrar el archivo de forma avanzada y obtener control total sobre tus acciones, entonces la solución más sofisticada sería utilizar la API de Google Drive para .NET.

Paquete NuGet:

Documentación y samples:




Aquí te dejo un cliente que escribí de la API Google Drive v3 para administrar archivos (listar, descargar, subir, reemplazar, eliminar) en nuestra propia cuenta.

El código es un extracto reducido de mi framework comercial ElektroKit, el cual se puede usar tanto desde C# como VB.NET. Tan solo he dejado los miembros necesarios para la autentificación, enumeración de archivos y directorios, y descarga de archivos.

Si alguien desea obtener más información con respecto a ElektroKit Framework, les invito a mirar mi firma de usuario aquí abajo del todo de mi post.

Espero que esto le sirva de ayuda a alguien, aparte de los samples oficiales de Google.

PD: Me sabe mal recortar tanto el código, pero además el foro tiene un límite de caracteres muy corto y no cabe ni un cacho.

Código (vbnet) [Seleccionar]
' ***********************************************************************
' Author   : Elektro
' Modified : 22-July-2017
' ***********************************************************************

#Region " Drive Scopes "
Namespace ElektroKit.ThirdParty.Google.Drive.Enums
   ''' <summary>
   ''' Specifies the OAuthv2 scopes for use with the Google Drive API.
   ''' </summary>
   <Flags>
   Public Enum DriveScopes As Integer

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive"/> scope.
       ''' <para></para>
       ''' View and manage the files in your Google Drive.
       ''' </summary>
       Full = 2

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.appfolder"/> scope.
       ''' <para></para>
       ''' View and manage its own configuration data in your Google Drive.
       ''' </summary>
       ApplicationData = 4

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.file"/> scope.
       ''' <para></para>
       ''' View and manage Google Drive files and folders that you have opened or created with this application.
       ''' </summary>
       Files = 8

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.metadata"/> scope.
       ''' <para></para>
       ''' View and manage metadata of files in your Google Drive.
       ''' </summary>
       Metadata = 16

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.scripts"/> scope.
       ''' <para></para>
       ''' Modify your Google Apps Script scripts' behavior.
       ''' </summary>
       Scripts = 32

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.readonly"/> scope.
       ''' <para></para>
       ''' View the files in your Google Drive.
       ''' </summary>
       [ReadOnly] = 64

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.metadata.readonly"/> scope.
       ''' <para></para>
       ''' View metadata for files in your Google Drive.
       ''' </summary>
       MetadataReadonly = 128

       ''' <summary>
       ''' Reffers to the <see href="https://www.googleapis.com/auth/drive.photos.readonly"/> scope.
       ''' <para></para>
       ''' View the photos, videos and albums in your Google Photos.
       ''' </summary>
       PhotosReadonly = 256

   End Enum
End Namespace
#End Region


+

Código (vbnet) [Seleccionar]
[code=vbnet]' ***********************************************************************
' Author   : Elektro
' Modified : 22-July-2017
' ***********************************************************************

#Region " Imports "

Imports System.IO
Imports System.Threading
Imports System.Threading.Tasks

Imports ElektroKit.ThirdParty.Google.Drive.Enums

' #If NET45 OrElse NET46 Then

Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Download
Imports Google.Apis.Drive.v3
Imports Google.Apis.Drive.v3.Data
Imports Google.Apis.Services
Imports Google.Apis.Upload
Imports Google.Apis.Util.Store

' #End If

#End Region

#Region " Drive Client "

Namespace ElektroKit.ThirdParty.Google.Drive.Types

' #If NET45 OrElse NET46 Then

    ''' <summary>
    ''' A client for Google Drive service.
    ''' </summary>
    Public NotInheritable Class DriveClient : Implements IDisposable

#Region " Private Fields "

dim demoMessage as string = "Buy ElektroKit Framework to have access to the full version."

        ''' <summary>
        ''' The Google Drive service client.
        ''' </summary>
        Private client As DriveService

        ''' <summary>
        ''' OAuthv2 credential for accessing protected resources using an access token,
        ''' as well as optionally refreshing the access token when it expires using a refresh token.
        ''' </summary>
        Private credential As UserCredential

        ''' <summary>
        ''' A message for an exception that will be thrown when the user has not authorized the app.
        ''' </summary>
        Private ReadOnly authExceptionMessage As String =
            "The user has not yet authorized the usage of this application.
             Call 'DriveClient.Authorize()' or 'DriveClient.AuthorizeAsync()' methods."

        ''' <summary>
        ''' The Google Drive OAuthv2 scope urls.
        ''' </summary>
        Private scopeDict As New Dictionary(Of DriveScopes, String)(StringComparison.Ordinal) From
        {
            {DriveScopes.Full, DriveService.Scope.Drive},
            {DriveScopes.ApplicationData, DriveService.Scope.DriveAppdata},
            {DriveScopes.Files, DriveService.Scope.DriveFile},
            {DriveScopes.Metadata, DriveService.Scope.DriveMetadata},
            {DriveScopes.MetadataReadonly, DriveService.Scope.DriveMetadataReadonly},
            {DriveScopes.PhotosReadonly, DriveService.Scope.DrivePhotosReadonly},
            {DriveScopes.ReadOnly, DriveService.Scope.DriveReadonly},
            {DriveScopes.Scripts, DriveService.Scope.DriveScripts}
        }

#End Region

#Region " Properties "

        ''' <summary>
        ''' Gets the client credentials.
        ''' </summary>
        ''' <value>
        ''' The client credentials.
        ''' </value>
        Public ReadOnly Property Secrets As ClientSecrets

        ''' <summary>
        ''' Gets the mail address to authorize Drive service. (e.g: "yourmail@gmail.com")
        ''' </summary>
        ''' <value>
        ''' The mail address to authorize Drive service. (e.g: "yourmail@gmail.com")
        ''' </value>
        Public ReadOnly Property MailAddress As String

        ''' <summary>
        ''' Gets the current Drive OAuthv2 scopes.
        ''' </summary>
        ''' <value>
        ''' The current Drive OAuthv2 scopes.
        ''' </value>
        Public ReadOnly Property Scope As DriveScopes

        ''' <summary>
        ''' Gets a value that determines whether Google Drive API authorization was done.
        ''' </summary>
        ''' <value>
        ''' A value that determines whether Google Drive API authorization was done.
        ''' </value>
        Public ReadOnly Property IsAuthorized As Boolean
            Get
                Return Me.isAuthorizedB
            End Get
        End Property
        ''' <summary>
        ''' ( Backing field )
        ''' A value that determines whether Google Drive API authorization was done.
        ''' </summary>
        Private isAuthorizedB As Boolean = False

#End Region

#Region " Constructors "

        Private Sub New()
        End Sub

        ''' <summary>
        ''' Initializes a new instance of the <see cref="DriveClient"/> class.
        ''' </summary>
        ''' <param name="apiFile">
        ''' The <c>client_secrets.json</c> file generated by Drive API console that contains the OAuthv2 login data
        ''' such as the client id, client secret, and redirection URI.
        ''' </param>
        ''' <param name="mailAddress">
        ''' The mail address to authorize Drive service. (e.g: "yourmail@gmail.com")
        ''' </param>
        ''' <param name="scopes">
        ''' The Drive OAuthv2 scope.
        ''' </param>
        Public Sub New(apiFile As String, mailAddress As String, scopes As DriveScopes)
            Me.MailAddress = mailAddress
            Me.Scope = scopes

            Using stream As FileStream = New FileInfo(apiFile).OpenRead()
                Me.Secrets = GoogleClientSecrets.Load(stream).Secrets
            End Using
        End Sub

#End Region

#Region " Public Methods "

#Region " Authorization "

        ''' <summary>
        ''' Authorizes this instance to use Google Drive API services.
        ''' </summary>
        ''' <example>
        ''' <code>
        ''' Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        ''' Dim credential As UserCredential = client.Authorize()
        ''' </code>
        ''' </example>
        <DebuggerStepThrough>
        Public Function Authorize() As UserCredential
            Dim t As Task(Of UserCredential) = Task.Run(AddressOf Me.AuthorizeAsync)
            t.Wait(Timeout.Infinite)
            Return t.Result
        End Function

        ''' <summary>
        ''' Authorizes this instance to use Google Drive API services.
        ''' </summary>
        ''' <example>
        ''' <code>
        ''' Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        ''' Dim credential As UserCredential = Await client.AuthorizeAsync()
        ''' </code>
        ''' </example>
        Public Async Function AuthorizeAsync() As Task(Of UserCredential)

            Dim scopeUrls As String() = Me.GetScopeUrls(Me.Scope)

            Me.credential =
                 Await GoogleWebAuthorizationBroker.AuthorizeAsync(Me.Secrets,
                                                                   scopeUrls.ToArray(),
                                                                   Me.MailAddress,
                                                                   CancellationToken.None,
                                                                   New FileDataStore("Test_Name", fullPath:=False))

            Me.client = New DriveService(New BaseClientService.Initializer() With {
                                         .HttpClientInitializer = Me.credential,
                                         .ApplicationName = "Test_Name"
            })

            Me.isAuthorizedB = True
            Return Me.credential

        End Function

#End Region

#Region " Get Files "

        ''' <summary>
        ''' Gets all the files stored in the current user account.
        ''' </summary>
        ''' <example>
        ''' <code>
        '''     Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        '''     Dim credential As UserCredential = client.Authorize()
        '''     Dim files As List(Of Data.File) = client.GetFiles()
        '''     Dim fileCount As Integer
        '''
        '''     For Each file As Data.File In files
        '''         Dim sb As New Global.System.Text.StringBuilder()
        '''         With sb
        '''             .AppendLine(String.Format("Id: {0}", file.Id))
        '''             .AppendLine(String.Format("Name: {0}", file.Name))
        '''             .AppendLine(String.Format("Url: {0}", If(file.WebContentLink, file.WebViewLink)))
        '''         End With
        '''         Console.WriteLine(sb.ToString())
        '''     Next file
        ''' </code>
        ''' </example>
        <DebuggerStepThrough>
        Public Function GetFiles() As List(Of Data.File)

            If Not (Me.isAuthorizedB) Then
                Throw New InvalidOperationException(Me.authExceptionMessage)

            Else
                Dim t As Task(Of List(Of Data.File)) = Task.Run(AddressOf Me.GetFilesAsync)
                t.Wait(Timeout.Infinite)
                Return t.Result

            End If

        End Function

        Public Function GetFiles(predicate As Func(Of Data.File, Boolean)) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        ''' <summary>
        ''' Asynchronously gets all the files stored in the current user account.
        ''' </summary>
        ''' <example>
        ''' <code>
        '''     Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        '''     Dim credential As UserCredential = Await client.AuthorizeAsync()
        '''     Dim files As List(Of Data.File) = Await client.GetFilesAsync()
        '''     Dim fileCount As Integer
        '''
        '''     For Each file As Data.File In files
        '''         Dim sb As New Global.System.Text.StringBuilder()
        '''         With sb
        '''             .AppendLine(String.Format("Id: {0}", file.Id))
        '''             .AppendLine(String.Format("Name: {0}", file.Name))
        '''             .AppendLine(String.Format("Url: {0}", If(file.WebContentLink, file.WebViewLink)))
        '''         End With
        '''         Console.WriteLine(sb.ToString())
        '''     Next file
        ''' </code>
        ''' </example>
        <DebuggerStepThrough>
        Public Async Function GetFilesAsync() As Task(Of List(Of Data.File))

            If Not (Me.isAuthorizedB) Then
                Throw New InvalidOperationException(Me.authExceptionMessage)

            Else
                Dim request As FilesResource.ListRequest = Me.client.Files.List()
                With request
                    .PageSize = 100
                    .IncludeTeamDriveItems = False
                    .SupportsTeamDrives = False
                    .Fields = "nextPageToken, files"
                    .Q = "not mimeType contains 'folder'"
                End With

                Dim response As FileList = Await request.ExecuteAsync()

                Dim files As New List(Of Data.File)
                Do While True

                    For Each file As Data.File In response.Files
                        Dim getRequest As FilesResource.GetRequest = Me.client.Files.Get(file.Id)
                        With getRequest
                            .SupportsTeamDrives = False
                            .Fields = "*"
                        End With

                        Dim getResponse As Data.File = Await getRequest.ExecuteAsync()
                        getRequest.AcknowledgeAbuse = True
                        files.Add(getResponse)
                    Next file

                    If Not String.IsNullOrEmpty(response.NextPageToken) Then
                        request.PageToken = response.NextPageToken
                        response = Await request.ExecuteAsync()
                    Else
                        Exit Do
                    End If

                Loop

                Return files

            End If

        End Function

        Public Async Function GetFilesAsync(predicate As Func(Of Data.File, Boolean)) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        ''' <summary>
        ''' Gets a file stored in the current user account that matches the specified file id.
        ''' </summary>
        ''' <example>
        ''' <code>
        '''     Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        '''     Dim credential As UserCredential = client.Authorize()
        '''     Dim file As Data.File) = client.GetFileById(" File Id. ")
        '''
        '''     Dim sb As New Global.System.Text.StringBuilder()
        '''     With sb
        '''          .AppendLine(String.Format("Id: {0}", file.Id))
        '''          .AppendLine(String.Format("Name: {0}", file.Name))
        '''          .AppendLine(String.Format("Url: {0}", If(file.WebContentLink, file.WebViewLink)))
        '''     End With
        '''     Console.WriteLine(sb.ToString())
        ''' </code>
        ''' </example>
        <DebuggerStepThrough>
        Public Function GetFileById(id As String) As Data.File
            If Not (Me.isAuthorizedB) Then
                Throw New InvalidOperationException(Me.authExceptionMessage)

            Else
                Dim t As Task(Of Data.File) = Task.Run(Function() Me.GetFileByIdAsync(id))
                t.Wait(Timeout.Infinite)
                Return t.Result

            End If
        End Function

        Public Async Function GetFileByIdAsync(id As String) As Task(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetFilesByName(displayName As String) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetFilesByNameAsync(displayName As String) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFiles() As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFiles(predicate As Func(Of Data.File, Boolean)) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFilesAsync() As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFilesAsync(predicate As Func(Of Data.File, Boolean)) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFilesByName(displayName As String) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFilesByNameAsync(displayName As String) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFileById(id As String) As Data.File
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFileByIdAsync(id As String) As Task(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Get Folders "

        Public Function GetFolders() As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetFolders(predicate As Func(Of Data.File, Boolean)) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetFoldersAsync() As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetFoldersAsync(predicate As Func(Of Data.File, Boolean)) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetFolderById(id As String) As Data.File
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetFolderByIdAsync(id As String) As Task(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetFoldersByName(displayName As String) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetFoldersByNameAsync(displayName As String) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFolders() As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFolders(predicate As Func(Of Data.File, Boolean)) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFoldersAsync() As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFoldersAsync(predicate As Func(Of Data.File, Boolean)) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function GetOwnedFoldersByName(displayName As String) As List(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFoldersByNameAsync(displayName As String) As Task(Of List(Of Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function
        Public Function GetOwnedFolderById(id As String) As Data.File
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function GetOwnedFolderByIdAsync(id As String) As Task(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Download File "

        Public Sub DownloadFile(srcFile As Data.File,dstFilePath As String)
             'Buy ElektroKit Framework to have access to this member.
        End Sub

        ''' <summary>
        ''' Downloads the specified file.
        ''' </summary>
        ''' <example>
        ''' <code>
        ''' Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        ''' Dim credential As UserCredential = client.Authorize()
        ''' Dim url As String = "https://drive.google.com/uc?export=download&amp;id=1B04WDF5Df8zYN2NXMlRlMlhYbm8"
        '''         
        ''' client.DownloadFile(url, dstFile)
        ''' </code>
        ''' </example>
        ''' <param name="url">
        ''' A Google Drive url that points to the file to download.
        ''' </param>
        '''
        ''' <param name="dstFilePath">
        ''' The destination file path where to save the downloaded file.
        ''' </param>
        <DebuggerStepThrough>
        Public Sub DownloadFile(url As String,
                                dstFilePath As String)

            If Not (Me.isAuthorizedB) Then
                Throw New InvalidOperationException(Me.authExceptionMessage)

            Else
                Dim t As Task(Of IDownloadProgress) =
                    Task.Run(Function() Me.DownloadFileAsync(url, dstFilePath, Nothing, Nothing))
                t.Wait(Timeout.Infinite)

                If (t.Result.Status = DownloadStatus.Failed) Then
                    Throw t.Result.Exception
                End If

            End If

        End Sub

        Public Sub DownloadFile(uri As Uri,dstFilePath As String)
             'Buy ElektroKit Framework to have access to this member.
        End Sub

        Public Async Function DownloadFileAsync(srcFile As Data.File,dstFilePath As String) As Task(Of IDownloadProgress)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        ''' <summary>
        ''' Asynchronously downloads the specified file.
        ''' </summary>
        ''' <example>
        ''' <code>
        ''' Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        ''' Dim credential As UserCredential = Await client.AuthorizeAsync()
        ''' Dim url As String = "https://drive.google.com/uc?export=download&amp;id=1B04WDF5Df8zYN2NXMlRlMlhYbm8"
        '''         
        ''' Dim progress As IDownloadProgress = Await client.DownloadFileAsync(url, dstFile)
        ''' Dim status As DownloadStatus = progress.Status
        ''' Console.WriteLine(status)
        ''' </code>
        ''' </example>
        ''' <param name="url">
        ''' A Google Drive url that points to the file to download.
        ''' </param>
        '''
        ''' <param name="dstFilePath">
        ''' The destination file path where to save the downloaded file.
        ''' </param>
        Public Async Function DownloadFileAsync(url As String,
                                                dstFilePath As String) As Task(Of IDownloadProgress)

            Return Await Me.DownloadFileAsync(url, dstFilePath, Nothing, Nothing)

        End Function

        Public Async Function DownloadFileAsync(uri As Uri,dstFilePath As String) As Task(Of IDownloadProgress)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function DownloadFileAsync(srcFile As Data.File,dstFilePath As String,progressHandler As Action(Of IDownloadProgress),cancellationToken As CancellationToken) As Task(Of IDownloadProgress)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        ''' <summary>
        ''' Asynchronously downloads the specified file.
        ''' </summary>
        ''' <example>
        ''' <code>
        ''' Dim client As New DriveClient("C:\GoogleSecrets.json", "yourmail@gmail.com", DriveScopes.Full)
        ''' Dim credential As UserCredential = Await client.AuthorizeAsync()
        ''' Dim url As String = "https://drive.google.com/uc?export=download&amp;id=1B04WDF5Df8zYN2NXMlRlMlhYbm8"
        '''         
        ''' Dim progress As IDownloadProgress =
        '''     Await client.DownloadFileAsync(url, dstFile, AddressOf Me.Download_ProgressChanged, Nothing)
        '''
        ''' Public Sub Download_ProgressChanged(e As IDownloadProgress)
        '''
        '''     Select Case e.Status
        '''
        '''         Case DownloadStatus.Downloading
        '''             Console.WriteLine("Bytes downloaded: {0}", e.BytesDownloaded)
        '''
        '''         Case DownloadStatus.Completed
        '''             Console.WriteLine("Download completed.")
        '''
        '''         Case DownloadStatus.Failed
        '''             Console.WriteLine("Download failed. Reason: {0}", e.Exception.Message)
        '''
        '''     End Select
        '''
        ''' End Sub
        ''' </code>
        ''' </example>
        ''' <param name="url">
        ''' A Google Drive url that points to the file to download.
        ''' </param>
        '''
        ''' <param name="dstFilePath">
        ''' The destination file path where to save the downloaded file.
        ''' </param>
        '''
        ''' <param name="progressHandler">
        ''' A event handler that will receive progress changes of the download operation.
        ''' </param>
        '''
        ''' <param name="cancellationToken">
        ''' A cancellation token to cancel the download operation.
        ''' </param>
        Public Async Function DownloadFileAsync(url As String,
                                                dstFilePath As String,
                                                progressHandler As Action(Of IDownloadProgress),
                                                cancellationToken As CancellationToken) As Task(Of IDownloadProgress)

            If Not (Me.isAuthorizedB) Then
                Throw New InvalidOperationException(Me.authExceptionMessage)

            Else
                Dim downloader As New MediaDownloader(Me.client)
                ' downloader.ChunkSize = 262144

                Dim progress As IDownloadProgress
                Using fs As New FileStream(dstFilePath, FileMode.Create, FileAccess.Write, FileShare.Read)
                    AddHandler downloader.ProgressChanged, progressHandler
                    progress = Await downloader.DownloadAsync(url, fs)
                    RemoveHandler downloader.ProgressChanged, progressHandler
                End Using

                Return progress

            End If

        End Function

        Public Async Function DownloadFileAsync(uri As Uri,dstFilePath As String,progressHandler As Action(Of IDownloadProgress),cancellationToken As CancellationToken) As Task(Of IDownloadProgress)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Upload File "

        Public Function UploadFile(srcFile As FileInfo,ParamArray parentFolderIds As String()) As KeyValuePair(Of ResumableUpload, Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function UploadFile(srcFile As FileInfo,dstFile As Data.File,ParamArray parentFolderIds As String()) As KeyValuePair(Of ResumableUpload, Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function UploadFileAsync(srcFile As FileInfo,progressHandler As Action(Of IUploadProgress),cancellationToken As CancellationToken,ParamArray parentFolderIds As String()) As Task(Of KeyValuePair(Of ResumableUpload, Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function UploadFileAsync(srcFile As FileInfo,dstFile As Data.File,progressHandler As Action(Of IUploadProgress),cancellationToken As CancellationToken,ParamArray parentFolderIds As String()) As Task(Of KeyValuePair(Of ResumableUpload, Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Update (replace) File "

        Public Function UpdateFile(srcFile As FileInfo,dstFile As Data.File) As KeyValuePair(Of ResumableUpload, Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function UpdateFile(srcFile As FileInfo,dstFileId As String) As KeyValuePair(Of ResumableUpload, Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function UpdateFileAsync(srcFile As FileInfo,dstFile As Data.File,progressHandler As Action(Of IUploadProgress),cancellationToken As CancellationToken) As Task(Of KeyValuePair(Of ResumableUpload, Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function UpdateFileAsync(srcFile As FileInfo,dstFileId As String,progressHandler As Action(Of IUploadProgress),cancellationToken As CancellationToken) As Task(Of KeyValuePair(Of ResumableUpload, Data.File))
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Create Folder "

        Public Function CreateFolder(dstName As String, ParamArray parentFolderIds As String()) As Data.File
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function CreateFolderAsync(dstName As String, ParamArray parentFolderIds As String()) As Task(Of Data.File)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Delete File "

        Public Function DeleteFile(file As Data.File) As String
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function DeleteFile(fileId As String) As String
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function DeleteFileAsync(file As Data.File) As Task(Of String)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function DeleteFileAsync(fileId As String) As Task(Of String)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#Region " Delete Folder "

        Public Function DeleteFolder(folder As Data.File) As String
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Function DeleteFolder(folderId As String) As String
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function DeleteFolderAsync(folder As Data.File) As Task(Of String)
             'Buy ElektroKit Framework to have access to this member.
        End Function

        Public Async Function DeleteFolderAsync(folderId As String) As Task(Of String)
             'Buy ElektroKit Framework to have access to this member.
        End Function

#End Region

#End Region

#Region " Private Methods "
        Private Function GetScopeUrls(scopes As DriveScopes) As String()
            Return (From scope As KeyValuePair(Of DriveScopes, String) In Me.scopeDict
                    Where Me.Scope.HasFlag(scope.Key)
                    Select scope.Value).ToArray()
        End Function
#End Region

#Region " IDisposable Implementation "
        Private isDisposed As Boolean = False

        Public Sub Dispose() Implements IDisposable.Dispose
            Me.Dispose(isDisposing:=True)
            GC.SuppressFinalize(obj:=Me)
        End Sub

        Private Sub Dispose(isDisposing As Boolean)
            If (Not Me.isDisposed) AndAlso (isDisposing) Then
                If (Me.client IsNot Nothing) Then
                    Me.client.Dispose()
                    Me.client = Nothing
                End If
            End If
            Me.isDisposed = True
        End Sub
#End Region

    End Class

' #End If

End Namespace

#End Region
[/code]
#1753
.NET (C#, VB.NET, ASP) / Re: ayuda en VB.NET
19 Septiembre 2017, 23:59 PM
Cita de: **Aincrad** en 19 Septiembre 2017, 23:31 PM
Código (vbnet) [Seleccionar]
Dim filePaths As ReadOnlyCollection(Of String) = 'me marca el signo = como error dice Expression expected
   My.Computer.FileSystem.GetFiles(dirPath, SearchOption.SearchAllSubDirectories, fileExts)

Cita de: **Aincrad** en 19 Septiembre 2017, 23:31 PM
Código (vbnet) [Seleccionar]
MessageBox.Show(Me, String.Format("Se encontraron archivos con extensión: {{{0}}}", String.Join(", ", fileExts)), Me.Text,
                           MessageBoxButtons.OK, MessageBoxIcon.Information) 'ME SUBRAYA      , MessageBoxButtons.OK      y dice Expression is not a method.


Estás usando una versión antigua de Visual Studio / VB.NET. Añade un linebreak: " _" o junta las lineas.

Sugerencia adicional: actualiza tu entorno a VS2017 ( o en su defecto VS2013, como mínimo ) para programar con mucha mayor comodidad.




Cita de: **Aincrad** en 19 Septiembre 2017, 23:31 PM
Código (vbnet) [Seleccionar]

My.Computer.FileSystem.GetFiles(dirPath, SearchOption.SearchAllSubDirectories, fileExts) 'ME SUBRAYA SearchOption y me dice 'SearchOption' is ambiguous, imported from the namespaces or types 'System.IO, Microsoft.VisualBasic.FileIO'.

Es normal, el compilador encuentra una ambiguedad (dos o más coincidencias de un miembro con el mismo nombre en diferentes namespaces) entre la enumeración Microsoft.VisualBasic.FileIO.SearchOption y System.IO.SearchOption. Para resolverlo puedes especificar la importación del namespace adecuado en la cabecera del archivo ...tal y como yo hice en el código que te mostré:

Cita de: Elektro
Código (vbnet) [Seleccionar]
Imports Microsoft.VisualBasic.FileIO

Saludos.
#1754
.NET (C#, VB.NET, ASP) / Re: [SOURCE] Color.Net v2.2
19 Septiembre 2017, 23:51 PM
Cita de: OscarCadenas_91 en 19 Septiembre 2017, 18:27 PM
Se que el tema es  un poco antiguo pero alguien que tenga el compilado de esta herramienta lo agradecería mucho.

Lo siento pero la descarga gratuita fue eliminada intencionadamente hace un tiempo atrás. Ahora las nuevas versiones del programa se vende (muy barato, $12) en el mercado de CodeCanyon, lo puedes encontrar haciendo click aquí abajo en mi firma de usuario donde pone "ElektroKit Framework".

Cierro el tema para evitar fomentar este tipo de publicidad, tan solo me he limitado a explicar los motivos de por qué ya no se encuentra disponible la descarga.
#1755
.NET (C#, VB.NET, ASP) / Re: ayuda en VB.NET
19 Septiembre 2017, 23:03 PM
En el otro post te expliqué varias cosas pero no veo que hayas intentado seguir los conejos...

Para hacer lo que quieres simplemente guarda en una variable la colección devuelta por la función My.Computer.FileSystem.GetFiles() y evalua el número de elementos de ésta. Ejemplo:

Código (vbnet) [Seleccionar]
Imports Microsoft.VisualBasic.FileIO
Imports System.Collections.ObjectModel

Public Class Form1

   Private Sub Test()

       Dim dirPath As String = Environment.GetFolderPath(Environment.SpecialFolder.Startup)
       Dim fileExts As String() = {"*.vbs", "*.cmd", "*.js", "*.wsf", "*.ink", "*.bat"}

       Dim filePaths As ReadOnlyCollection(Of String) =
           My.Computer.FileSystem.GetFiles(dirPath, SearchOption.SearchAllSubDirectories, fileExts)

       If (filePaths.Count <> 0) Then
           With Me.ListBox1
               .BeginUpdate()
               .Items.AddRange(filePaths.ToArray())
               .EndUpdate()
           End With
            MessageBox.Show(Me, String.Format("Se encontraron archivos con extensión: {{{0}}}", String.Join(", ", fileExts)), Me.Text,
                            MessageBoxButtons.OK, MessageBoxIcon.Information)

       Else
           My.Forms.Form9.Show()

       End If

   End Sub

End Class


PD: LAS PREGUNTAS SOBRE VB.NET VAN EN EL SUBFORO DE PROGRAMACIÓN .NET, NO DE VB6. Ya te advirtió un Coadmin, respeta las normas por favor.

Saludos
#1756
.NET (C#, VB.NET, ASP) / Re: extraer palabra de string
19 Septiembre 2017, 14:51 PM
Estoy cansado de repetir siempre lo mismo. Trata de elaborar una pregunta correctamente proporcionando los detalles más importantes por delante. Has preguntado como insertar caracteres en una fecha, no se sabía si te referías a un string tal que: "01-01-2001" o por lo contrario a formatear un objeto de tipo DateTime mediante los formatos de fecha disponibles ( https://docs.microsoft.com/en-us/dotnet/standard/base-types/custom-date-and-time-format-strings ), y ahora resulta que tu pregunta en realidad tiene que ver con las APIs de interoperabilidad de Excel y la propiedad NumberFormat...

Aquí tienes la documentación oficial:




Cita de: PETTETE en 19 Septiembre 2017, 12:27 PM
pero al introducir variable sexo, la fecha aparece asi: nacido a 1995-06-09
xlhoja.cells(fila, 2).value = sexo_text & fecha_nacimiento
xlhoja.cells(fila, 2).NumberFormat = " \a d \d\e MMMM \d\e yyyy"

¿algún consejo?

Bueno, yo no utilizo la API oficial de Microsoft Office, pero a simple vista no puedes esperar que la cadena de texto "nacida" o "nacido" se pueda evaluar y formatear como un formato de fecha. Prueba a escapar el string de la siguiente manera: "\n\a\c\i\d\a \e\l d \d\e MMMM \d\e yyyy", lo que en teoría debería traducirse a: "nacida el DÍA de MES de AÑO"

Tampoco sé si la propiedad NumberFormat de ese objeto COM de Excel soporta los formatos de fecha built-in de .NET Framework, habría que investigarlo, y como ya digo yo no uso la API oficial de Microsoft. Si eso no te funciona, pues puedes probar a introducir la fecha YA FORMATEADA (en mi otro post aquí arriba publiqué un ejemplo de como localizar a Español y formatear un objeto de tipo DateTime), en lugar de usar la propiedad NumberFormat para dejar que la formatee Excel.

PD:
Y aquí:
Citar
Código (vbnet) [Seleccionar]
xlhoja.cells(fila, 2).value = fecha_nacimiento
xlhoja.cells(fila, 2).value = sexo_text & fecha_nacimiento
No has mostrado la declaración de fecha_nacimiento para que podamos saber si se trata de un objeto de tipo DateTime, o por lo contrario de tipo String. No somos adivinos.

Saludos.
#1757
Cita de: Thiamatt en 19 Septiembre 2017, 05:28 AMquiero ponerle un límite de caracteres (8 Caracteres máximo). Todo esto usando el comando input.

Código (python) [Seleccionar]
name = str(input("Write your name: "))[:8]
print name


Cita de: Thiamatt en 19 Septiembre 2017, 05:28 AMMi otra pregunta es... ¿Cómo cambiarle el título al Output? No se si me explico bien... Pero, cuando ejecuto el código, quiero que tenga un título en la parte superior como la mayoría de los programas.

No... no te has explicado bien, lo que se da a entender por "output" es un buffer de caracteres (Standard Output por su nombre en Inglés o StdOut por su acrónimo), no es una cosa a la que se le pueda atribuir tener "título". Más bien parecería que estés refiriéndote a la barra de título de una ventana de diálogo, así que suponiendo que te estés refiriendo al título de la instancia actual de la CMD entonces simplemente hazlo de la misma manera que lo harías en Batch, con el comando Title:

Código (python) [Seleccionar]
import os
os.system('Title my title')

...el título de la instancia actual de la CMD, insisto.

Cita de: Thiamatt en 19 Septiembre 2017, 05:28 AM
PD -->[/b] Miren la edición de mi tema prro XD (costó demasiado!)

Un poco más y superas el límite de caracteres permitidos en un post. :rolleyes:

PD: Muy chulo, pero cuesta mucho citar un texto así...

Saludos.
#1758
Foro Libre / Re: Nueva Temporada Dr Who
18 Septiembre 2017, 18:42 PM
Cita de: engel lex en 18 Septiembre 2017, 18:25 PMespecialmente en nuetra generación dr Who ha tenido poca acogida

Eso tal vez podría ser debido a que la serie nunca la han sexualizado lo suficiente como para captar mayor audiencia adolescente y que así los jóvenes se interesasen más (bueno, y los adultos tmb xD).

Lo cierto es que en ese sentido lo han hecho MAL. La serie no deja de ser entretenida e interesante por supuesto, pero para enriquecerse más y poder tener más presupuesto para poder hacer una mejor serie (ya que los efectos 3D nunca me han parecido buenos en esta serie) en mi opinión les faltó por añadir una chispa de erotismo, y en ese sentido podrían haberle sacado mucho partido teniendo a estas tres delicias de actrices:



...pero no, ellos van y lo hacen con la tipa de los rizos esta:


PD: Estoy opinando sobre la serie nueva, que he visto todas las temporadas. La de los 60s nunca la he visto.

Saludos.
#1759
Foro Libre / Re: Nueva Temporada Dr Who
18 Septiembre 2017, 18:21 PM
Cita de: Orubatosu en 18 Septiembre 2017, 18:11 PM
Luego te vienen con "juegos de tronos" contándote que si esto que si lo otro, como si hubieran inventado las series de TV

Es una gran serie, la mejor serie de fantasía medieval de todos los tiempos. Es normal que los fans la pongan por todo lo alto...

Aparte de dragones, "zombies", sangre y fuego, diversidad de paisajes, espadas, látigos y sexo, también tiene un argumento con una trama e interpretaciones espectaculares y desenlaces fatales e inesperados. GOT Lo tiene todo y lo que es seguro es que nunca deja indiferente a ningún espectador...


#1760
.NET (C#, VB.NET, ASP) / Re: extraer palabra de string
18 Septiembre 2017, 17:51 PM
Cita de: PETTETE en 18 Septiembre 2017, 16:25 PMcomo puedo insertar caracteres

Estás preguntando cosas muy básicas que solo necesitarían por tu parte dos segundos de búsqueda en Google...





De todas formas si tu intención es trabajar con fechas, pues mi recomendación es que utilices el tipo DateTime para representar fechas...

Código (vbnet) [Seleccionar]
Dim ci As New CultureInfo("es-ES")
ci.DateTimeFormat.MonthGenitiveNames =
   (From name As String In ci.DateTimeFormat.MonthGenitiveNames
    Select ci.TextInfo.ToTitleCase(name)
   ).ToArray() ' Convierto la primera letra de los nombres de los meses a mayúscula.

Dim dt As DateTime = Date.Parse("10/02/2010", ci)
Dim str As String = dt.ToString("dd \d\e MMMMM \d\e yyyy", ci) ' 10 de Febrero de 2010

Debug.WriteLine(str)


Saludos.