【Drafts 脚本】草稿发送到Tana Inbox

【Drafts 脚本】草稿发送到Tana Inbox

功能简介

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("没有内容可发送");
}

设置方法参考

图片[1]-【Drafts 脚本】草稿发送到Tana Inbox-麦先生说

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容