Built on top of google.golang.org/api/tasks/v1 adding extra functionality making it easier to get started with the Google Tasks API in Golang.
- Enable Google Tasks API from API Console
- Create a new OAuth Client ID credential and download it as JSON
- Configure your OAuth consent screen
- Understand the concepts developers.google.com/tasks/concepts
- Get tasq
go get -u github.com/jtsalva/tasq
- Import tasq
import "github.com/jtsalva/tasq"
tasq.Init(&tasq.QConfig{
// Either QTasksReadWriteScope or QTasksReadOnlyScope
Scope: tasq.QTasksReadWriteScope,
Credentials: "/path/to/credentials.json",
})
// Direct users here to grant access to your
// application from their Google accounts
authURL := tasq.Auth.GetAuthCodeURL()
// Once the user grants access and is
// redirected to your specified URL, grab
// the code from the query string
authCode := "4/XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX-XXXXXXXXXXXXXXX"
// The auth code can only be used once
// to generate a token, the token is
// reusable, store it somewhere safe
token, err := tasq.Auth.GetToken(authCode)
// Create new service using token
svc, err := tasq.NewService(token)
// List all Tasklists
tasklists, err := svc.Tasklists.List().Do()
// List Tasks from Tasklist
tasks, err := svc.Tasks.List(tasklistId).Do()
// tasklists is of type QTaskLists
tasklists, err := svc.Tasklists.List().Do()
// tasklists.Items is of type []*QTaskList
for _, tasklist := range tasklists.Items {
fmt.Println(tasklist.Id, tasklist.Name)
}
// tasks is of type QTasks
tasks, err := svc.Tasks.List().Do()
// tasks.Items is of type []*QTask
for _, task := range tasks.Items {
fmt.Println(task.Id, task.Title, task.Notes)
// List sub-tasks of task
// task.Children is of type []*QTask
for _, child := range task.Children {
fmt.Println("\t", child.Id, child.Title, child.Notes)
}
}
Fllter by either
QCompletedFilter
- show only completed tasksQNeedsActionFilter
- show only tasks needing actionQOverdueFilter
- show only tasks needing action where the datetime now is more than the due datetime
filteredTasks, err := svc.Tasks.List().Filter(tasq.QOverdueFilter).Do()
Additionally, you can sort your items either by
QPositionSort
- sort in the way the user positioned the tasksQLatestFirstSort
- newly updated tasks firstQOldestFirstSort
- oldest updated tasks first
sortedTasks, err := svc.Tasks.List().Sort(tasq.QPositionSort).Do()
You can combine filter and sort
filterdAndSortedTasks, err := svc.Tasks.List().Filter(filter).Sort(sort).Do()
You can directly manipulate and perform actions on a QTaskList
and QTask
.
// tasklist is of type QTaskList
tasklist, err := svc.Tasklists.Get(tasklistid).Do()
// task is of type QTask
task, err := svc.Tasks.Get(tasklistid, taskid).Do()
- Deleting
- Inserting
- Updating
- Refreshing
- Move to Parent
- Move to Previous
- Move to Beginning
- Get Time of Last Update
// Delete a list, including the tasks and subtasks within it
err := tasklist.Delete()
// Delete a single task
err := task.Delete()
Insert a task into another list
insertedTask, err := task.Insert(anotherTasklistid)
tasklist.Title = "change tasklist title"
updatedTasklist, err := tasklist.Update()
task.Title = "change task title"
updatedTask, err := task.Update()
If there have been remote changes, update the data currently stored in memory
err := tasklist.Refresh()
err := task.Refresh()
Make task a subtask to the given parent task id
movedTask, err := task.MoveToParent(parentTaskid)
Move task after given previous task id
movedTask, err := task.MoveToPrevious(previousTaskid)
Moves task to beginning of list
movedTask, err := task.MoveToBeginning()
Returns time of last update as type time.Time
tasklistUpdatedTime, err := tasklist.Time()
taskUpdatedTime, err := task.Time()