none
Creare Calendario con Google Calendar API RRS feed

  • Domanda

  • Salve, sto cercando di creare un'app che mi aiuti a programmarmi le mie giornate lavorative. Sto provando, quindi, ad utilizzare l'API della google per accedere alle risorse di Calendar.

    Riesco a visualizzare e modificare gli eventi, ma non riesco proprio a creare un calendario secondario.

    Il codice che ho scritto è il seguente

     
    'la funzione che mi permette di accedere al servizio tramite le mie credenziali
    Dim ApplicationName As String = "Google Calendar API .NET Quickstart"
        Public Function inizializzaCalendario(ByVal calendarScopes As String,
                                         ByRef bxMessaggio As TextBoxBase) As CalendarService
    
            Dim Scopes As String() = {calendarScopes}
            Dim credential As UserCredential
            Dim initializer As New BaseClientService.Initializer()
    
            Using Stream As FileStream =
                        New FileStream("client_secret.json",
                                       FileMode.Open, FileAccess.Read)
    
                Dim credPath As String = System.Environment.GetFolderPath(
                            System.Environment.SpecialFolder.Personal)
                credPath = Path.Combine(credPath,
                                            ".credentials/calendar-dotnet-quickstart.json")
                If File.Exists(credPath) Then
                    File.Delete(credPath)
                End If
    
                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                            GoogleClientSecrets.Load(Stream).Secrets,
                            Scopes,
                            "user",
                            CancellationToken.None,
                            New FileDataStore(credPath, True)).Result
                If bxMessaggio IsNot Nothing Then
                    bxMessaggio.AppendText(String.Format(
                                           "File delle Credentiali salvato in: {1}{0}{1}" &
                                           "Credenziali - ID: {2}{1}",
                                           credPath, vbCr, credential.UserId))
    
                End If
    
                ' Create Google Calendar API service.
                initializer.HttpClientInitializer = credential
                initializer.ApplicationName = ApplicationName
                Dim servizio As New CalendarService(initializer)
                Return servizio
            End Using
        End Function
    
     ' segue il metodo per creare un calendario default
    Public Sub creaCalendario()
            Dim servizio As CalendarService =
                inizializzaCalendario(CalendarService.Scope.Calendar, Nothing)
            ' Define parameters of request.
    
            Dim calendario As New Calendar
            With calendario
                .Summary = "ZZZZZZZZ"
                .Description = "cose cose cose"
                .TimeZone = "Europe/Rome"
    
            End With
            Dim request As CalendarsResource.InsertRequest =
                        servizio.Calendars.Insert(calendario)
            request.Execute()
        End Sub


    l'errore che ottengo eseguendo la sub è il seguente: 

    Google.GoogleApiException: 'Google.Apis.Requests.RequestError
    Insufficient Permission [403]
    Errors [Message[Insufficient Permission] Location[ - ] Reason[insufficientPermissions] Domain[global]]

    Penso che abbia a che fare con lo "scope" per richiedere il servizio, ma è già impostato su calendar e non su calendarReadOnly

    Qualcuno di voi ha pratica con quest'API? 

    domenica 17 settembre 2017 18:18

Risposte

  • Ok, come non detto

    ho risolto.

    Per chi dovesse avere in futuro il mio stesso problema, ecco la soluzione:

    quando viene creato per la prima volta il file contenente le credenziali e le specifiche del servizio richiesto, questo viene salvato col nome "Google.Apis.Auth.OAuth2.Responses.TokenResponse-user" nella cartella .credentials creata in Documenti.

    Questo file deve essere cancellato e creato nuovamente per ogni servizio richiesto. Se viene creato con uno scope calendarReadOnly, al successivo utilizzo, se viene richiesta un'azione di modifica, essa non verrà eseguita per insufficienza di permessi.

    Penso che le soluzioni possibili siano due:

    1. con un paio di righe trovare e cancellare il file prima di ogni accesso al servizio

    2. a monte di tutto, accedere sin da subito con uno scope caldendar (se il programma serve per un uso personale, almeno)

    ciao a tutti 

    • Contrassegnato come risposta Soka Sok domenica 17 settembre 2017 18:30
    domenica 17 settembre 2017 18:30

Tutte le risposte

  • Ok, come non detto

    ho risolto.

    Per chi dovesse avere in futuro il mio stesso problema, ecco la soluzione:

    quando viene creato per la prima volta il file contenente le credenziali e le specifiche del servizio richiesto, questo viene salvato col nome "Google.Apis.Auth.OAuth2.Responses.TokenResponse-user" nella cartella .credentials creata in Documenti.

    Questo file deve essere cancellato e creato nuovamente per ogni servizio richiesto. Se viene creato con uno scope calendarReadOnly, al successivo utilizzo, se viene richiesta un'azione di modifica, essa non verrà eseguita per insufficienza di permessi.

    Penso che le soluzioni possibili siano due:

    1. con un paio di righe trovare e cancellare il file prima di ogni accesso al servizio

    2. a monte di tutto, accedere sin da subito con uno scope caldendar (se il programma serve per un uso personale, almeno)

    ciao a tutti 

    • Contrassegnato come risposta Soka Sok domenica 17 settembre 2017 18:30
    domenica 17 settembre 2017 18:30
  • Buongiorno,

    Sto cercando un modo per gestire un calendario google attraverso il visual basic, sono un programmatore per hobby e sto sviluppando un software per uso privato, hai degli esempi da mostrarmi 

    Grazie Antonio

    venerdì 20 marzo 2020 11:44