Megan Taylor

web developer, hack-n-slasher, freelancer, news & data junkie, bibliophile, Flyers fan, sci-fi geek and kitteh servant

Home

I am a UI Developer at Spies & Assassins / kbs+. Previously, I was the front-end web developer for Jewish National Fund, where one of my projects won an award. In my free time, I teach code to high school students with ScriptEd and freelance through Sore Thumb Marketing. Some of my projects are on GitHub, because I learn more when others can critique my code. I blog about what I’m learning and random tidbits that catch my fancy.

Recent Work

Find-a-Farmers-Market-Near-You-in-New-York-City

NYC Farmers Market Locator

Screenshot_103113_070420_PM

Quiz Web App

Screenshot_103113_070556_PM

Shopping List Web App

Screenshot_103113_070312_PM-2

Hot or Cold? Guess the Number

Recent Posts

post

Todoist tasks to Dashclock widget Tasker task

Wow that title is hella awkward. This is a writeup of how I got my tasks in Todoist to show up in a Dashclock widget using Tasker.

Pre-reqs:

  • Be using Todoist :)
  • Have an Android phone
  • Install and have some basic knowledge of Tasker
  • Install and have some basic knowledge of Dashclock

So, there is pretty good documentation for most of this around the Internets, I’m going to try to be as detailed as possible, but this is not going to be a fool-proof step-through. More of a guideline. Kinda like the painted lines on the floor in hospitals? Anyway…

ACTIONS 1, 2 and 3

After all my poking and prodding and rewriting, my task in Tasker starts by clearing some variables that will be created later in the task. So the first action should be Variable Clear, and set the name to %Tasks (or whatever, this is going to be an array that holds the final format of all the tasks you pull from Todoist). Then make another Variable Clear action and set the name to %Item (this is going to be an individual task that will end up in the array mentioned above). Then make a third Variable Clear and set the name to %Numtask (this is going to increment with the number of tasks).

ACTION 4

For your fourth action, create an Array Clear and set the name to %TLIST. OK, we’re done with clears.

ACTION 5

The fifth task is going to actually pull you tasks from the Todoist API. I used the /API/query request.

Please review the API documents and get your query URL figured out before continuing. Mine looks like this: https://api.todoist.com/API/query?queries=["overdue", "yesterday", "today", "tomorrow"]&token=tokentokentoken. It gives me all the tasks that have not been completed that are overdue, due yesterday (for some reason on my account, overdue does not include yesterday. i have been in contact with todoist support and they haven’t figured out why, but using the yesterday query takes care of that for this use case), due today, or due tomorrow.

NOTE: The Dashclock widget will only show the first 5 tasks from the combined list of tasks. If you want to show more, you can create a separate widget for each query.

So create a HTTP Get action and set it up like this:
Server:Port

https://api.todoist.com

Path
API/query
(or whichever request you choose to use)
Attributes
queries=["overdue", "yesterday", "today", "tomorrow"]&token=tokentokentoken

I didn’t change anything else for this action.

Have I lost you yet? Great! Onward!

ACTION 6

Now I’m going to give you some JavaScript. This was the hardest part for me to figure out, because Tasker doesn’t really support true arrays. So I’m giving you the JavaScript that will parse the query response (assuming you used the same one I did, if not, you will have to edit this). You need to get this into a file on your phone somewhere.

jsonData = JSON.parse(global("HTTPD"));

var y = 0;

if (jsonData[0].data[0] !== 'undefined') {
for (i = 0; i < jsonData[0].data.length; i++) {
setGlobal('TLIST'+y, jsonData[0].data[i].content);
y++;
}
}

if (jsonData[1].data[0] !== 'undefined') {
for (i = 0; i < jsonData[1].data.length; i++) {
setGlobal('TLIST'+y, jsonData[1].data[i].content);
y++;
}
}

if (jsonData[2].data[0] !== 'undefined') {
for (i = 0; i < jsonData[2].data.length; i++) {
setGlobal('TLIST'+y, jsonData[2].data[i].content);
y++;
}
}

if (jsonData[3].data[0] !== 'undefined') {
for (i = 0; i < jsonData[3].data.length; i++) {
setGlobal('TLIST'+y, jsonData[3].data[i].content);
y++;
}
}

Create a JavaScript action (this will be number 6) and set the path to wherever you have stored this file on your phone.

ACTION 7

Create a seventh action, Variable Set. Name should be %Numtask and To should be %TLIST(#<)+1. I don't know why, but it works for me.

ACTION 8

Number eight! Create a For action. Set Variable to %Item and Items to %TLIST(0:).

ACTION 9

Your ninth action is part of a for loop that was initiated by number eight. Create a Variable Set action. Name is set to %Item. Leave To blank.

ACTION 10

For the tenth step create another Variable Set action. Name should be set to %Tasks and To should be set to %Item.

End the for loop with your next action. (Seriously, this is action number eleven, create an End For action).

ACTION 11

FINALLY. Create the Dashclock action.Set the title to %Numtask Tasks in order to display a title above your list in the widget that will say "N Tasks". Or leave it blank. Whatever. Set the body to %Tasks.

Now you have to add this task to a profile. I hope it works for you. Feel free to ask questions, suggest better flow/code or whatever.