3

我正在尝试编写一个 Google 脚本来实现此伪代码中包含的想法:

access a specific Google tasklist

for each task in that tasklist {
    if the task is completed {
        perform an operation
    }
}

我遇到了一个问题——当我的脚本访问特定的任务列表时,我只能获取未完成任务的信息,而完成的任务似乎已经消失了。

起初,这个想法似乎很容易。我从谷歌的任务服务网页复制了代码,该网页应该“列出给定任务列表中的任务”(https://developers.google.com/apps-script/advanced/tasks)并在 for 循环中添加了一个 if 语句:

function listTasks(taskListId) {
  var tasks = Tasks.Tasks.list(taskListId);
  if (tasks.items) {
    for (var i = 0; i < tasks.items.length; i++) {
      var task = tasks.items[i];

      Logger.log('Task with title "%s" and ID "%s" was found.',
                 task.title, task.id);

      if (task.status == "completed") {
          //perform operation
      }
    }
  } else {
    Logger.log('No tasks found.');
  }
}

但是,当我检查日志时,我注意到列出了所有未完成的任务,但没有列出我已完成的任务。我尝试在仅包含已完成任务的任务列表上运行脚本,日志输出为“未找到任务”。

有谁知道如何在给定的任务列表中找到已完成的任务?似乎这应该是可能的,基于 Zapier 为已完成的任务执行操作的事实,如另一篇文章中所述:当 Google 任务标记为“已完成”时如何触发 Google 脚本

4

3 回答 3

2

您需要告诉Task API您希望 List Tasks 也返回已完成的任务。

我使用了 PHP,您必须告诉 Google 服务您想要“隐藏”任务。似乎已完成 == 隐藏。如果要删除,也可以发送该参数。

$optParams = array(
    'showHidden' => true,
    'showDeleted' => true,
);

$GTresults = $service->tasks->listTasks($tasklist, $optParams);

在这里编辑:添加了一个基于完成的循环示例:

$retrievedTask = $service->tasks->get($tasklist, $taskID);

if($retrievedTask->getStatus() == "completed") {
    echo "GT uncompleted", "\n";
}
于 2018-11-26T23:49:45.927 回答
1

只需将可选参数发送到函数中:

var optionalArgs = {
    maxResults: 100,
    showHidden: true,
    showDeleted: true
  };
var tasks = Tasks.Tasks.list(taskListId, optionalArgs);
于 2019-02-09T19:12:14.163 回答
0

我有同样的问题。我发现如果我通过旧的谷歌任务 UI ( https://mail.google.com/tasks/canvas ) 完成任务,我可以通过 API 完成任务。

如果我通过新的 gmail UI 完成任务,我怎么会得不到这些。正如您在评论中指出的那样,此问题可能是由新的 gmail UI 引起的。

于 2018-11-28T06:29:35.917 回答