私は VB.Net を使用しています。指示に従って、Google からメッセージ (gmail api v1) とタスク (tasks api v1) のリストを取得しました。
https://developers.google.com/gmail/api/v1/reference/users/messages/list https://developers.google.com/google-apps/tasks/v1/reference/tasks/list
しかし、エラー 403 (権限がありません) が表示されますが、datagridview には空のセルを含む次のヘッダーが表示されます。
Gmail:
HistoryId - Id - LabelIds - ペイロード - Raw - SizeEstimate - Snippet - ThreadId - Etag
タスク:
Etag - アイテム - 種類 - NextPageToken
Google 開発者コンソールを確認したところ、すべて問題なく、API が有効になっています。
xxxxxxxxx@developer.gserviceaccount.com も使用しています (念のため)。
また、ドライブとカレンダーの API の指示に従ってください。これらは正常に動作しますが、タスクと Gmail ではその問題が発生します。
資格情報 (クライアント ID とクライアント シークレット) を使用して入力します。
Google api Explorer を試してみましたが、すべて正常に動作します。
このエラーを修正するにはどうすればよいですか?
タスクと Gmail のコードは次のとおりです。
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Tasks.v1
Imports Google.Apis.Tasks.v1.Data.Tasks
Imports Google.Apis.Tasks.v1.Data
Imports System.Collections.Generic
Imports Google.Apis.Util.Store
Imports System.Threading
Imports System
Public Class Form1
Dim Secrets = New ClientSecrets()
Dim scope = New List(Of String)
Dim initializer = New BaseClientService.Initializer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Secrets.ClientId = "MY CLIENT ID"
Secrets.ClientSecret = "MY CLIENT SECRET"
End Sub
Private Sub Button3_Click(sender As Object, e As EventArgs) Handles Button3.Click
scope.Add(TasksService.Scope.Tasks)
Try
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "My Gmail account or developer account &.GOOGLE.COM", CancellationToken.None).Result()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APP NAME"
Dim service = New TasksService(initializer)
Me.DataGridView1.DataSource = retrieveAllTasks(service)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
Public Shared Function retrieveAllTasks(service As TasksService) As List(Of Tasks)
Dim result As New List(Of Tasks)()
Dim request As TasksResource.ListRequest = service.Tasks.List("@default")
Do
Try
Dim Gtasks As Tasks = request.Execute()
result.AddRange(Gtasks.Items)
request.PageToken = Gtasks.NextPageToken
Catch ex As Exception
MsgBox(ex.ToString)
request.PageToken = Nothing
End Try
Loop While Not [String].IsNullOrEmpty(request.PageToken)
Return result
End Function
End Class
Imports Google.Apis.Auth.OAuth2
Imports Google.Apis.Services
Imports Google.Apis.Tasks.v1
Imports Google.Apis.Tasks.v1.Data.Tasks
Imports Google.Apis.Tasks.v1.Data
Imports System.Collections.Generic
Imports Google.Apis.Util.Store
Imports System.Threading
Imports System
Imports Google.Apis.Gmail.v1
Imports Google.Apis.Gmail.v1.Data
Public Class Form1
Dim Secrets = New ClientSecrets()
Dim scope = New List(Of String)
Dim initializer = New BaseClientService.Initializer
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
Secrets.ClientId = "CLIENT ID"
Secrets.ClientSecret = "CLIENT SECRET"
End Sub
Public Shared Function ListMessages(service As GmailService) As List(Of Message)
Dim result As New List(Of Message)()
Dim request As UsersResource.MessagesResource.ListRequest = service.Users.Messages.List("TARGET EMAIL")
Do
Try
Dim response As ListMessagesResponse = request.Execute()
result.AddRange(response.Messages)
request.PageToken = response.NextPageToken
Catch ex As Exception
MsgBox(ex.ToString)
End Try
Loop While Not [String].IsNullOrEmpty(request.PageToken)
Return result
End Function
Private Sub Button10_Click(sender As Object, e As EventArgs) Handles Button10.Click
Try
scope.Add(GmailService.Scope.MailGoogleCom)
Dim credential = GoogleWebAuthorizationBroker.AuthorizeAsync(Secrets, scope, "XXXXXXXX@developer.gserviceaccount.google.com", CancellationToken.None).Result()
initializer.HttpClientInitializer = credential
initializer.ApplicationName = "APP NAME"
Dim service = New GmailService(initializer)
Me.DataGridView1.DataSource = ListMessages(service)
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class