功能简介
DraftsToTana 是一个 Drafts 命令脚本,可以将 Drafts 中的内容快速发送到 Tana 知识管理工具中。支持单行文本和多行文本的发送,适合快速捕获想法和笔记。
脚本代码
// DraftsToTana.js
// 从Drafts发送内容到Tana的命令脚本
/**
* 本脚本用于将Drafts中的内容发送到Tana
* 使用Tana的Input API (addToNodeV2)
* API参考:<https://tana.inc/docs/input-api>
* 作者:麦先生 GeekMai
*/
// 创建凭证对象来存储Tana API Token
const credential = Credential.create(
"tana_api",
"Tana API\\n请在Tana的设置 > API Tokens中获取API Token"
);
// 添加密码字段用于存储API Token
credential.addPasswordField("token", "API Token");
// 尝试授权
if (!credential.authorize()) {
alert("未提供或找不到API Token");
context.fail(
"Tana API Token未输入或找不到。如果没有提示输入,请清除API Token并重试。"
);
}
// 配置选项
const config = {
// Tana API端点
apiEndpoint: "<https://europe-west1-tagr-prod.cloudfunctions.net/addToNodeV2>",
// 默认目标节点ID(INBOX表示发送到收件箱)
defaultTargetNodeId: "INBOX",
// 可选:自定义目标节点ID,如果需要发送到特定节点
customTargetNodeId: "",
};
// 获取当前draft的内容
const content = draft.content;
const title = draft.title || content.split("\\n")[0].substring(0, 50);
// 创建API请求并发送
function sendToTana() {
// 构建要发送到Tana的数据
const targetNodeId = config.customTargetNodeId || config.defaultTargetNodeId;
// 处理内容,确保不包含换行符
// Tana API要求name字段不能包含换行符
const lines = content.split("\\n");
let payload;
if (lines.length <= 1) {
// 单行文本 - 直接作为一个节点
payload = {
targetNodeId: targetNodeId,
nodes: [
{
name: content,
},
],
};
} else {
// 多行文本 - 第一行作为节点名称,其余作为子节点
const nodeName = lines[0];
// 创建子节点数组,每行作为一个单独的子节点
const childNodes = [];
for (let i = 1; i < lines.length; i++) {
const line = lines[i].trim();
if (line) {
childNodes.push({
name: line,
});
}
}
payload = {
targetNodeId: targetNodeId,
nodes: [
{
name: nodeName,
children: childNodes,
},
],
};
}
console.log("发送到Tana的数据:", JSON.stringify(payload));
// 创建HTTP请求
const http = HTTP.create();
const response = http.request({
url: config.apiEndpoint,
method: "POST",
headers: {
Authorization: `Bearer ${credential.getValue("token")}`,
"Content-Type": "application/json",
},
data: payload,
});
// 处理响应
if (response.success) {
// 解析返回的JSON
const responseData = response.responseData;
console.log("Tana API响应:", JSON.stringify(responseData));
// 成功发送到Tana
// alert("已成功发送到Tana");
// 如果需要,可以在这里添加成功后的操作
// 例如:标记draft为已处理、存档等
return true;
} else {
// 发送失败
console.log("Tana API错误:", response.statusCode, response.error);
console.log("响应内容:", response.responseText);
alert("发送到Tana失败:" + (response.error || response.statusCode));
return false;
}
}
// 检查是否有内容,然后直接发送
if (content) {
sendToTana();
} else {
alert("没有内容可发送");
}
设置方法参考
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容