如何使用 todoist api v7 创建 todoist 任务?
How to create todoist task using todoist api v7?
我正在尝试在 todoist 中创建任务,但似乎做不到
根据这个todoist documentation,下面应该可以创建一个 todoist 任务
$ curl https://todoist.com/api/v7/sync \
-d token=0123456789abcdef0123456789abcdef01234567 \
-d sync_token="VRyFHr0Qo3Hr--pzINyT6nax4vW7X2YG5RQlw3lB-6eYOPbSZVJepa62EVhO" \
-d resource_types='["projects", "items"]' \
-d commands='[
{ "type": "item_add",
"temp_id": "fdef5d16-a40a-475e-bd4a-0ccbd6fd8c3f",
"uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752",
"args": { "project_id": "24a193a7-46f7-4314-b984-27b707bd2331", "content": "Task1" } },
{ "type": "item_add",
"temp_id": "6f5e0b50-af7a-4133-bfc0-e8c041b819d2",
"uuid": "d16ad84a-e10b-4894-af7d-93ba6adf7a1e",
"args": { "project_id": 176637191, "content": "Task2" } },
]'
我尝试了以下方法,但运气不佳
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159935681,"content":"Test Task"}}]
$.ajax({
type: "GET",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
我还尝试了以下方法:
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159935681,"content":"Test Task"}}]
$.ajax({
type: "POST",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
这会导致以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://en.todoist.com/api/v7/sync/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我也试过删除项目 ID
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"content":"Test Task"}}]
$.ajax({
type: "GET",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["items"]',
'commands':commands
}
})
我也试过添加 temp_id 参数:
commands = [{"type": "item_add","temp_id": "fdef5d16-a40a-475e-bd4a-0ccbd6fd8c3f", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159896038,"content":"Test Task"}}]
$.ajax({
type: "POST",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
我什至按照 v8 api here
的 todoist 说明尝试了 todoist api v8 版本
$.ajax({type: "POST",
url: 'https://beta.todoist.com/API/v8/tasks',
dataType: 'json',
async: false,
data: {'token':todoist_api_token,'content': 'Appointment with Maria'}
});
这个returns"Bad Request"
我确实发现以下内容适用于 v6:
$.ajax({type: "POST",
url: 'https://todoist.com/API/v6/add_item',
dataType: 'json',
async: false,
data: {'token':todoist_api_token,'content': 'Appointment with Maria'}
});
sync_token
在第一个示例中,我看到设置了同步令牌。它应该是 var sync_token = '*'
并且在 ajax 请求之后你应该用 sync_token = response.sync_token;
保存令牌我看到你在后面的例子中意识到了这一点。
命令
其余的看起来不错,但我看不到您的命令,我想问题出在这里。命令对象必须用 JSON.stringify(commands)
.
字符串化
工作示例
我在下面创建了一个工作示例。您必须在示例任务中用您的令牌和项目 ID 替换 todoist_api_token = ""
。
// Global variables
var todoist_api_token = ""; // Put your token here
var sync_token = "*";
// To get a project id: clicke on a project and look at the url.
// In the example "#project%2F2179064046" you have to remove "#project%2F".
// and the project id is 2179064046
// Run example task after document load
window.onload = function() {
console.log("Add example task to todoist");
var example_tasks = [
{"content": "Task1", "project_id": 2179064046},
{"content": "Task2", "project_id": 2179064046}
];
todoist_add_tasks_ajax(example_tasks);
}
// Functions
todoist_add_tasks_ajax = function(tasks) {
var commands = todoist_tasks_to_commands(tasks);
var data = {
"token" : todoist_api_token,
'sync_token' : sync_token,
'resource_types' : '["projects", "items"]',
'commands' : commands
};
jQuery.ajax({
url: "https://todoist.com/api/v7/sync",
data: data,
type: "POST",
dataType: "json",
success: function(response) {
console.log(response);
sync_token = response.sync_token;
},
error: function(response) {
console.log(response);
},
});
}
todoist_tasks_to_commands = function(tasks) {
var commands = [];
tasks.forEach(function(args) {
var temp_commands = {
"type": "item_add",
"temp_id": create_guid(),
"uuid": create_guid(),
"args": args
};
commands.push(temp_commands)
});
commands = JSON.stringify(commands);
return commands;
}
function create_guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
/*
// Install jQuery
javascript: (function(e, s) {
e.src = s;
e.onload = function() {
jQuery.noConflict();
console.log("jQuery installed");
};
document.head.appendChild(e);
})( document.createElement('script'), 'http://code.jquery.com/jquery-latest.min.js')
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
我正在尝试在 todoist 中创建任务,但似乎做不到
根据这个todoist documentation,下面应该可以创建一个 todoist 任务
$ curl https://todoist.com/api/v7/sync \
-d token=0123456789abcdef0123456789abcdef01234567 \
-d sync_token="VRyFHr0Qo3Hr--pzINyT6nax4vW7X2YG5RQlw3lB-6eYOPbSZVJepa62EVhO" \
-d resource_types='["projects", "items"]' \
-d commands='[
{ "type": "item_add",
"temp_id": "fdef5d16-a40a-475e-bd4a-0ccbd6fd8c3f",
"uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752",
"args": { "project_id": "24a193a7-46f7-4314-b984-27b707bd2331", "content": "Task1" } },
{ "type": "item_add",
"temp_id": "6f5e0b50-af7a-4133-bfc0-e8c041b819d2",
"uuid": "d16ad84a-e10b-4894-af7d-93ba6adf7a1e",
"args": { "project_id": 176637191, "content": "Task2" } },
]'
我尝试了以下方法,但运气不佳
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159935681,"content":"Test Task"}}]
$.ajax({
type: "GET",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
我还尝试了以下方法:
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159935681,"content":"Test Task"}}]
$.ajax({
type: "POST",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
这会导致以下错误:
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://en.todoist.com/api/v7/sync/. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).
我也试过删除项目 ID
commands = [{"type": "item_add", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"content":"Test Task"}}]
$.ajax({
type: "GET",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["items"]',
'commands':commands
}
})
我也试过添加 temp_id 参数:
commands = [{"type": "item_add","temp_id": "fdef5d16-a40a-475e-bd4a-0ccbd6fd8c3f", "uuid": "a3aa2f44-23b4-4986-b513-ef7663bbb752", "args": {"project_id": 2159896038,"content":"Test Task"}}]
$.ajax({
type: "POST",
url: 'https://en.todoist.com/api/v7/sync/',
dataType: 'json',
async: false,
data: {
'token': todoist_api_token,
'sync_token':'*',
'resource_types':'["projects", "items"]',
'commands':commands
}
})
我什至按照 v8 api here
的 todoist 说明尝试了 todoist api v8 版本$.ajax({type: "POST",
url: 'https://beta.todoist.com/API/v8/tasks',
dataType: 'json',
async: false,
data: {'token':todoist_api_token,'content': 'Appointment with Maria'}
});
这个returns"Bad Request"
我确实发现以下内容适用于 v6:
$.ajax({type: "POST",
url: 'https://todoist.com/API/v6/add_item',
dataType: 'json',
async: false,
data: {'token':todoist_api_token,'content': 'Appointment with Maria'}
});
sync_token
在第一个示例中,我看到设置了同步令牌。它应该是 var sync_token = '*'
并且在 ajax 请求之后你应该用 sync_token = response.sync_token;
保存令牌我看到你在后面的例子中意识到了这一点。
命令
其余的看起来不错,但我看不到您的命令,我想问题出在这里。命令对象必须用 JSON.stringify(commands)
.
工作示例
我在下面创建了一个工作示例。您必须在示例任务中用您的令牌和项目 ID 替换 todoist_api_token = ""
。
// Global variables
var todoist_api_token = ""; // Put your token here
var sync_token = "*";
// To get a project id: clicke on a project and look at the url.
// In the example "#project%2F2179064046" you have to remove "#project%2F".
// and the project id is 2179064046
// Run example task after document load
window.onload = function() {
console.log("Add example task to todoist");
var example_tasks = [
{"content": "Task1", "project_id": 2179064046},
{"content": "Task2", "project_id": 2179064046}
];
todoist_add_tasks_ajax(example_tasks);
}
// Functions
todoist_add_tasks_ajax = function(tasks) {
var commands = todoist_tasks_to_commands(tasks);
var data = {
"token" : todoist_api_token,
'sync_token' : sync_token,
'resource_types' : '["projects", "items"]',
'commands' : commands
};
jQuery.ajax({
url: "https://todoist.com/api/v7/sync",
data: data,
type: "POST",
dataType: "json",
success: function(response) {
console.log(response);
sync_token = response.sync_token;
},
error: function(response) {
console.log(response);
},
});
}
todoist_tasks_to_commands = function(tasks) {
var commands = [];
tasks.forEach(function(args) {
var temp_commands = {
"type": "item_add",
"temp_id": create_guid(),
"uuid": create_guid(),
"args": args
};
commands.push(temp_commands)
});
commands = JSON.stringify(commands);
return commands;
}
function create_guid() {
function s4() {
return Math.floor((1 + Math.random()) * 0x10000)
.toString(16)
.substring(1);
}
return s4() + s4() + '-' + s4() + '-' + s4() + '-' +
s4() + '-' + s4() + s4() + s4();
}
/*
// Install jQuery
javascript: (function(e, s) {
e.src = s;
e.onload = function() {
jQuery.noConflict();
console.log("jQuery installed");
};
document.head.appendChild(e);
})( document.createElement('script'), 'http://code.jquery.com/jquery-latest.min.js')
*/
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">