Action
send to GitHub Obsidian
将当前 draft 发送到 GitHub Obsidian 仓库
文件名格式为:第一行内容.md
第一次使用需输入 token 和 repo 地址
repo 地址格式为:owner/repo
Steps
-
script
// See online documentation for examples // https://docs.getdrafts.com/docs/actions/scripting // 创建一个新的凭据 // Github 是这个凭据的标识符,在以后的脚本中通过标识符来使用 let credential = Credential.create("Github", "输入 Github Token 和 Repo"); // 为 Github 凭据添加一个 token 字段 // token 是脚本中用于检索的名字 // Token 是提示用户输入凭据时显示的标签 credential.addTextField("token", "Token"); // 为 Github 凭据添加一个 repo 字段 credential.addTextField("repo", "Repo"); // 显示一个对话框,要求用户输入前面定义的字段 credential.authorize(); // 从当前 Drafts 文档中获取全部文本内容 // draft 是一个全局变量,代表当前的文档 // content 是 draft 的一个属性,代表文档的全部文本内容 let content = draft.content; // 查找 content 中第一个换行符("\n")的位置 // .indexOf() 用于查找字符串中的文本,参数是要查找的文本。 let firstNewline = content.indexOf("\n"); // 提取 content 中从开头到第一个换行符之前的文本。 // .substring() 用于提取字符串中的一部分,参数是起始位置和结束位置。 let titleLine = content.substring(0, firstNewline); // 将 titleLine 作为文件名,并添加.md作为文件后缀。 // 也就是,将标题行作为文件名 // `${titleLine}.md` 是一种字符串模板语法,可以将变量的值插入到字符串中。 let filename = `${titleLine}.md`; // 提取 content 中从第一个换行符后面的文本。 // .substring() 如果省略结束位置,则提取到字符串的末尾。 content = content.substring(firstNewline + 1); // 构建请求头 // 从凭证中获取名为"token"的字段的值 token = credential.getValue("token"); let headers = { // 用于验证和授权的token Authorization: `Bearer ${token}`, }; // 构建请求 URL // 从凭证中获取名为"repo"的字段的值 repo = credential.getValue("repo"); // 使用 encodeURI 对文件名进行编码,以便在URL中使用 let path = encodeURI(filename); // 使用前文提到的模板字符串构建完整 URL // repo、path 的值会被插入到字符串中 let url = `https://api.github.com/repos/${repo}/contents/${path}`; // 要发送给GitHub API的数据 let data = { // 描述这次提交的信息 message: `Added ${filename} via Drafts app`, // 要上传的文件的内容,这个内容被转换为Base64编码 content: Base64.encode(content), }; // 使用 Drafts 的HTTP.create()方法创建并发起请求 let http = HTTP.create(); let response = http.request({ // 要请求的 API 的URL url: url, // HTTP请求的方法,"PUT"方法是为了添加文件 method: "PUT", // 前面定义的请求头 headers: headers, // 前面定义的要发送的数据 data: data, }); // 如果响应码是 201 if (response.statusCode == 201) { // 将当前 draft 的 isArchived 属性设置为true draft.isArchived = true; // 调用当前 draft 的 update 方法以保存更改 draft.update(); // 创建新的空白 draft editor.new(); // 显示一个信息提示,内容为 success ... app.displayInfoMessage("Success to GitHub and archived."); } else { // 否则,显示一个错误提示,内容为 Failed ... app.displayErrorMessage("Failed to GitHub"); }
Options
-
After Success Default Notification Info Log Level Info
Items available in the Drafts Directory are uploaded by community members. Use appropriate caution reviewing downloaded items before use.