나는 Visual Studio (VB)에서 향후 5 분 내에 발생하는 모든 이벤트에 대해 사용자 Google 캘린더를 폴링하는 Windows 서비스 응용 프로그램을 작성 중입니다.Windows 서비스에서 Google 캘린더 API에 액세스하기
이상하게도 서비스에 자격 증명을 생성하고 싶지만 Windows 서비스가 누군가를 인증하기 위해 브라우저 페이지를 팝업 할 수 있다고 생각하지 않습니다. 현재 브라우저를 팝업 할 수있는 콘솔 앱에서 특정 위치에 자격 증명을 생성하고 서비스에서 해당 위치의 자격 증명을 찾도록하고 있습니다. 콘솔 앱을 모두 없애고 싶습니다.하지만 필요한 경우 서비스를 설치하는 배치 파일에서 실행합니다.
내가 겪고있는 가장 큰 문제는 자격 증명 파일 (보조 관심사)을 생성하는 것이고 더 중요한 것은 시간이 지나면 (기본 우려 사항) 만료되지 않도록 새로 고치는 것입니다. 여기
Dim Scopes As String() = {CalendarService.Scope.CalendarReadonly}
Dim ApplicationName As String = "Google Calendar API .NET Quickstart"
Private Sub writeUpdateTimerEvent(source As Object, e As ElapsedEventArgs)
Dim credential As UserCredential
Try
Using stream = New FileStream("FILE PATH TO client_secret.json", FileMode.Open, FileAccess.Read)
Dim credPath As String = "FILE PATH TO WHERE MY CONSOLE APP IS STORING THE CREDENTIALS FILE"
credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json")
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, New FileDataStore(credPath, True)).Result
If credential Is Nothing Then
credential.RefreshTokenAsync(CancellationToken.None)
End If
End Using
' Create Google Calendar API service.
Dim service = New CalendarService(New BaseClientService.Initializer() With {
.HttpClientInitializer = credential,
.ApplicationName = ApplicationName
})
' Define parameters of request.
Dim request As EventsResource.ListRequest = service.Events.List("primary")
request.TimeMin = DateTime.Now
request.TimeMax = DateTime.Now.AddMinutes(5)
request.ShowDeleted = False
request.SingleEvents = True
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime
' List events.
Dim eventsString As String = ""
Dim events As Events = request.Execute()
If events.Items IsNot Nothing AndAlso events.Items.Count > 0 Then
'This is where I do my operations on events occuring in the next 5 minutes
EventLog1.WriteEntry("Event occuring within 5 minutes")
Else
EventLog1.WriteEntry("No event occuring within 5 minutes")
End If
Catch ex As Exception
EventLog1.WriteEntry("error grabbing events." & Environment.NewLine & ex.message)
End Try
End Sub
거의 같은 내 콘솔 응용 프로그램 코드 (입니다 : 여기
내 Windows 서비스 코드 (내 콘솔 응용 프로그램을 실행하고 내 캘린더에 대한 액세스를 허용 한 후이이 시간 동안 완벽하게 잘 작동)입니다 위와 같이) :
Module Module1
Dim Scopes As String() = {CalendarService.Scope.CalendarReadonly}
Dim ApplicationName As String = "Google Calendar API .NET Quickstart"
Sub Main()
Dim credential As UserCredential
Using stream = New FileStream("client_secret.json", FileMode.Open, FileAccess.Read)
Dim credPath As String = "SAME FILE PATH AS IN MY SERVICE"
credPath = Path.Combine(credPath, ".credentials/calendar-dotnet-quickstart.json")
credential = GoogleWebAuthorizationBroker.AuthorizeAsync(GoogleClientSecrets.Load(stream).Secrets, Scopes, "user", CancellationToken.None, New FileDataStore(credPath, True)).Result
Console.WriteLine(Convert.ToString("Credential file saved to: ") & credPath)
End Using
' Create Google Calendar API service.
Dim service = New CalendarService(New BaseClientService.Initializer() With {
.HttpClientInitializer = credential,
.ApplicationName = ApplicationName
})
' Define parameters of request.
Dim request As EventsResource.ListRequest = service.Events.List("primary")
request.TimeMin = DateTime.Now
request.ShowDeleted = False
request.SingleEvents = True
request.MaxResults = 10
request.OrderBy = EventsResource.ListRequest.OrderByEnum.StartTime
' List events.
Dim events As Events = request.Execute()
Console.WriteLine("Upcoming events:")
If events.Items IsNot Nothing AndAlso events.Items.Count > 0 Then
For Each eventItem As Object In events.Items
Dim [when] As String = eventItem.Start.DateTime.ToString()
If [String].IsNullOrEmpty([when]) Then
[when] = eventItem.Start.[Date]
End If
Console.WriteLine("{0} ({1})", eventItem.Summary, [when])
Next
Console.WriteLine("You may now close this window.")
System.Environment.Exit(0)
Else
Console.WriteLine("No upcoming events found.")
End If
Console.Read()
End Sub
End Module
이 도움이되는지 확실하지 않지만 [.NET 빠른 시작]을 체크 한 (https://developers.google.com/google-apps/calendar/quickstart/dotnet)? – noogui
. NET 퀵 스타트 다음에 나에게이 점을주었습니다. 코드는 기본적으로 CSharp에서 VB로 변환 된 가이드에서 직접 나온 것입니다. – JonW
서비스 계정을 사용해야한다고 생각합니다. https://developers.google.com/identity/protocols/OAuth2#serviceaccount –