Skip to content

Instantly share code, notes, and snippets.

@leonardonsantos
Created November 26, 2018 14:14
Show Gist options
  • Save leonardonsantos/8d2edc844615731424f7f08f92e1dce4 to your computer and use it in GitHub Desktop.
Save leonardonsantos/8d2edc844615731424f7f08f92e1dce4 to your computer and use it in GitHub Desktop.
Google Spreadsheets (sheets) script to get data from Asana API
// returns tagId
function asanaTagByName(tagName, token) {
var url = "https://app.asana.com/api/1.0/workspaces/2653227806782/typeahead?type=tag&query=" + encodeURIComponent(tagName);
var options = {
"muteHttpExceptions": true,
"method": "get",
"headers": {
"Authorization": "Bearer " + token
}
};
var response = UrlFetchApp.fetch(url, options);
var dataAll = JSON.parse(response.getContentText());
var dataSet = dataAll;
return dataSet.data[0].id;
}
function asanaTasksByTagId(tag, token, projectId) {
var url = "https://app.asana.com/api/1.0/tags/" + tag + "/tasks?opt_expand=tags,custom_fields,completed,completed_at,assignee,memberships";
var options = {
"muteHttpExceptions": true,
"method": "get",
"headers": {
"Authorization": "Bearer " + token
}
};
var response = UrlFetchApp.fetch(url, options);
var dataAll = JSON.parse(response.getContentText());
var dataSet = dataAll;
var rows = [],
data;
//header
rows.push(["ID","NAME","COMPLETED", "Planejamento", "Tipo:", "Esforço", "Sprint", "TAG TYPE", "Assignee", "Completed At", "Section"]);
for (i = 0; i < dataSet.data.length; i++) {
data = dataSet.data[i];
var planejamento = undefined;
var tipo = undefined;
var esforco = undefined;
var sprint = undefined;
// TODO: dynamically deal with custom fields
for (j = 0; j < data.custom_fields.length; j++) {
var cf = data.custom_fields[j];
if (cf.name === "Planejamento" && undefined != cf.enum_value) {
planejamento = cf.enum_value.name
}
if (cf.name === "Tipo:" && undefined != cf.enum_value) {
tipo = cf.enum_value.name
}
if (cf.name === "Esforço") {
esforco = cf.number_value
}
if (cf.name === "Sprint" && undefined != cf.enum_value) {
sprint = cf.enum_value.name
}
}
var tagType = undefined;
for (j = 0; j < data.tags.length; j++) {
var name = data.tags[j].name;
if (name === "CRM:Other" || name === "CRM:Front" || name === "CRM:Spark" || name === "CRM:API") {
tagType = name;
}
}
var assignee = undefined;
if (undefined != data.assignee) {
assignee = data.assignee.name
}
var section = undefined;
if (undefined === projectId && data.memberships.length > 0) {
if (undefined != data.memberships[0].section) {
section = data.memberships[0].section.name;
}
} else {
for (j = 0; j < data.memberships.length; j++) {
var m = data.memberships[j];
if (undefined != m.project && m.project.id == projectId && undefined != m.section) {
section = m.section.name;
}
}
}
rows.push([data.id, data.name,data.completed, planejamento, tipo, esforco, sprint, tagType, assignee, data.completed_at, section]);
}
return rows;
}
function asanaTasksByTagName(tagName, token, projectId) {
var tagId = asanaTagByName(tagName, token);
return asanaTasksByTagId(tagId, token, projectId);
}
@leonardonsantos
Copy link
Author

You should use in sheet just like this:

=asanaTasksByTagName("Tag Name"; "TokenAsanaAPI****"; "Specific ProjectId to get Sections")

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment