1

私は本当に混乱しています。Google タスク API をテストしています。自分のタスクにアクセスできますが、タスクを挿入するのが面倒なときにエラーが発生します。ドキュメントでは、このコードが利用可能ですが、利用可能な Fetch 関数がないため機能しません。

Task task = new Task { Title = "New Task"};
task.Notes = "Please complete me";
task.Due = "2010-10-15T12:00:00.000Z";

Task result = service.Tasks.Insert(task, "@default").Fetch();
Console.WriteLine(result.Title);

コードを次のように変更しました。

Google.Apis.Tasks.v1.Data.Task task = new Google.Apis.Tasks.v1.Data.Task { Title = "five" };
task.Notes = "Please complete me";
task.Due = DateTime.Now;

Google.Apis.Tasks.v1.Data.Task result = service.Tasks.Insert(task,taskList.Id.ToString()).Execute();
Console.WriteLine(result.Title);

しかし、エラーと実行行に直面しています:

タイプ 'Google.GoogleApiException' の未処理の例外が Google.Apis.dll で発生しました

追加情報: Google.Api.Requests.RequestError

不十分な権限 [403]

4

2 に答える 2

1

Google ドキュメントから次のコード行をコピーできます。

    // If modifying these scopes, delete your previously saved credentials
    // at ~/.credentials/tasks-dotnet-quickstart.json
    static string[] Scopes = { TasksService.Scope.Tasks };
    static string ApplicationName = "YOUR APPLICATION NAME";

プログラムとGoogle コンソールで同じアプリ名を使用していることを確認してください 。そして最も重要なことは、コードのコメントにあるように、.credentialsディレクトリを削除することです。

次のコードは私にとってはうまくいきます:

    static void Main(string[] args)
    {
        UserCredential credential;
        // Copy & Paste from Google Docs
        using (var stream =
            new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
        {
            string credPath = System.Environment.GetFolderPath(
                System.Environment.SpecialFolder.Personal);
            credPath = Path.Combine(credPath, ".credentials/tasks-dotnet-quickstart.json");

            credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                GoogleClientSecrets.Load(stream).Secrets,
                Scopes,
                "user",
                CancellationToken.None,
                new FileDataStore(credPath, true)).Result;
            Console.WriteLine("Credential file saved to: " + credPath);
        }

        // Create Google Tasks API service.
        var service = new TasksService(new BaseClientService.Initializer()
        {
            HttpClientInitializer = credential,
            ApplicationName = ApplicationName,
        });

        // Define parameters of request.
        TasklistsResource.ListRequest listRequest = service.Tasklists.List();
        // Fetch all task lists
        IList<TaskList> taskList = listRequest.Execute().Items;

        Task task = new Task { Title = "New Task" };
        task.Notes = "Please complete me";
        task.Due = DateTime.Parse("2010-10-15T12:00:00.000Z");
        task.Title = "Test";

        // careful no verification that taskList[0] exists
        var response = service.Tasks.Insert(task, taskLists[0].Id).Execute();
        Console.WriteLine(response.Title);

        Console.ReadKey();
    }

そして、あなたは正しいFetch()メソッドはありませんが、ご覧のとおり、あなたがしたようにExecute()に変更し、動作します;)

于 2016-05-14T18:24:10.683 に答える