DeepinV20系统文件管理器右键发送至为知笔记
1. 创作背景
昨天在深度系统上做了一个打开文件管理器选择文件右键发送文本至博客园的插件。
这个插件对于我自己来说是及其方便的东西,平时的学习积累,工作经验或者生活感悟,随手记下之后,就能够轻松发送出去,不需要登录和编辑。
其实以前使用win10的时候,通常的方式就是在为知笔记下面创建好markdown文本之后,通过为知笔记的分享功能发布博客。为知笔记其实也是调用博客园的API,对吧。
然后昨晚发布到deepin论坛的时候,感觉有时候自己应该还可以保存一些不想发布的内容到为知笔记。于是就有了今天的这篇博客
注:这篇博客是通过deepin终端写的,在deepin下面,你可以选择终端,编辑器,typroa,vscode来创建markdown文档
2. 学习为知笔记的API
为知笔记很厚道地提供了API给用户使用。具体的地址在这里,
在API快速上手这里,官方更加厚道地提供了很多示例。看到这些代码,我第一眼是懵逼的,不知道这是什么语言,惭愧。最后确定是js之后,我这个纯js小白,毫不犹豫地在deepin上安装nodejs环境,并开始撸起来
2.1 deepin部署nodejs与npm
直接命令行执行sudo apt-get install nodejs npm即可,先不要管版本是否是最新的事情。
2.2 编辑代码
下面就是正儿八经的编程过程了,好歹也有其他语言的编程基础,所以在研究为知笔记官方提供的API代码时,还是稍微能看得懂的。
意思就是:你首先得用你的账号和密码,发送http请求到既定的URL,然后或获取到你的访问令牌,用这个令牌你随便玩。
OK,开始吧。
具体摸索的过程,对于js小白来有些困难的,详细过程我就不表了,都在代码里了,show code!
//注意:如果下面三个包没有的话,deepin命令行执行npm install xxx即可。有包管理器就是方便。
var fs = require("fs")
var program = require("commander")
var linerByLine = require("n-readlines")
const axios = require('axios');
const AS_URL = 'https://as.wiz.cn';
//这里主要是通过命令行指定文件,因为要集成到deepin的文件管理器右键。它的右键实际就是用文件名做参数,调用你的命令。
program
.option('-f, --file <type>','add filename')
.parse(process.argv)
async function execRequest(method, url, body, token) {
const options = {
url,
method,
data: body,
};
if (token) {
options.headers = {
'X-Wiz-Token': token,
};
}
const res = await axios(options);
const data = res.data;
if (data.returnCode !== 200) {
console.error(`request error: ${data.returnMessage}`);
const err = new Error(data.returnMessage);
err.code = data.returnCode;
err.externCode = data.externCode;
throw err;
}
return data.result;
}
async function login(userId, password) {
return await execRequest('post', `${AS_URL}/as/user/login`, {userId, password});
}
async function createNote(kbServer, kbGuid, title, folder, html, extOptions, token) {
const url = `${kbServer}/ks/note/create/${kbGuid}`;
let note = {
kbGuid,
title,
category: folder,
html,
};
if (extOptions) {
note = Object.assign(note, extOptions);
}
return await execRequest('post', url, note, token);
}
async function test02(mdfile,noteHtml) {
const userId = '这里是你的为知笔记账号';
const password = '这里是的你为知笔记密码';
try {
const loginResult = await login(userId, password);
const {kbServer, kbGuid, token} = loginResult;
//js的字符串分割,避免绝对路径的干扰
const title = mdfile.split('/').pop()
const newNote1 = await createNote(kbServer, kbGuid, title, '/我的笔记/', noteHtml, null, token);
} catch (err) {
if (err.externCode === 'WizErrorInvalidPassword') {
console.error('Invalid password');
} else {
console.error(err.message);
}
}
}
//这里其实很重要,我摸索了快一天 。
//如果以js读取文件转化为字符串的话,markdown问被分享到为知笔记的时候,不会被正确渲染为markdown
//然后我想到了typora里面有个</br>的标记,索性就按行读取,每行后面添加换行符,果然凑效。
if (program.file){
const liner = new linerByLine(program.file);
let line;
let str = '';
while (line = liner.next()){
str += line + '</br>';
}
test02(program.file,str);
}
上面的代码,保存为wiz.js,放置到/home/liwl/.myscripts/下即可
注:代码有些丑陋,先work后fly吧
2.3 创建右键拓展
不废话,直接su到root之后,直奔主题:cd /usr/share/deepin/dde-file-manager/oem-menuextensions
然后创建desktop文件:touch deepin-wiz.desktop,内容如下:
Desktop Entry]
Type=Application
Exec=nodejs /home/liwl/.myscripts/wiz.js -f %U
Name=发送到为知笔记
至此,基本完成了大部分工作了。然后有自己做的“发送至博客园”和"发送至为知笔记",发送这篇文章即可。
后期看看有空做做“右键发送邮件”,“右键翻译”等。
DeepinV20系统文件管理器右键发送至为知笔记的更多相关文章
- 安卓 通过intent调用系统文件管理器打开指定路径目录
安卓 通过intent调用系统文件管理器打开指定路径目录 转 https://blog.csdn.net/qq_34161388/article/details/78586247 当我们知道 ...
- 调用系统文件管理器选择图片,调用系统裁剪AIP对图片处理,显示裁剪之后的图片
package com.pingyijinren.test; import android.annotation.TargetApi; import android.app.Notification; ...
- 为Linux的文件管理器创建“在此打开终端”菜单
有些Linux的GUI文件管理器没有右键菜单"在此打开终端",或者有却不能自行指定某种终端. 因为文件夹也有其MIME类型(inode/directory),通过文件关联的方式,把 ...
- 自定义 Win10 系统鼠标右键发送到的选项
系统默认的右键「发送到」菜单只有几个特定的项目,如果要想发送到其他目标,可通过在资源管理器地址栏中访问 C:\Users\用户名\AppData\Roaming\Microsoft\Windows\S ...
- win系统 添加、修改右键“发送到”
发现大家在往U盘,移动硬盘传东西的时候,总是喜欢在本地把文件复制(缺德的还会用剪切)然后在打开U盘选择粘贴,其实完全没必要使用那么多步骤,不知道大家注意没有,只要在你本地的文件上右键--发送到--你的 ...
- 看不懂深度Linux系统的文件管理器图标
为了保持对Linux的熟悉度,MacBookPro一般放在公司,家里(每次用这个词是我觉得最纠结的时候,我现在有家吗?)用的是普通笔记本装了深度Linux. 之所以安装深度,主要的原因应该是支持国产吧 ...
- deepin右键发送博客
1. 概述 deepin系统上没有像样的笔记软件.为知笔记未提供deb打包的软件,很遗憾.商店提供的软件,界面停留在上个世纪了. 这个时候如果想通过笔记来分享到博客是一件非常困难的事情. 本篇博客就是 ...
- MFC项目实战(1)文件管理器--界面设计篇
1.创建项目 文件管理器是一个基于对话框的应用程序.首先新建一个“MFC应用程序”类型的项目,然后输入新建项目的名称“FileMng”,并指定该项目保存的位置,单击“确定”按钮,如图所示. 在弹出的“ ...
- 免费的在线Web文件管理器:Net2FTP,Pydio,eXtplorer,KodExplorer–功能强大
https://www.freehao123.com/web-ftp/ 经常有朋友在使用一些没有带文件管理器的空间时,苦于没有办法来解压上传的文件压缩包,而如果不先上传压缩包,直接上传文件夹的话耗费的 ...
随机推荐
- 【前端词典】这些功能其实不需要 JS,CSS 就能搞定
前言 今天我们大家介绍一些你可能乍一眼以为一定需要 JavaScript 才能完成的功能,其实 CSS 就能完成,甚至更加简单. 内容已经发布在 gitHub 了,欢迎围观 Star,更多文章都在 g ...
- vue - Babel之babel-polyfill、babel-runtime、transform-runtime
引言 babel默认只转换新的 JavaScript 语法,比如箭头函数.扩展运算(spread). 不转换新的 API,例如Iterator.Generator.Set.Maps.Proxy.Ref ...
- Selenium系列(十二) - 自动化必备知识之CSS选择器的详细使用
如果你还想从头学起Selenium,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1680176.html 其次,如果你不懂前端基础知识, ...
- 搬运工 Logstash
1,Logstash 简介 Logstash是一个开源数据收集引擎,具有实时管道功能.Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地. 通俗的说,就是搬运工 ...
- Java构造器(构造方法/constructor)
我们先来看一下什么是构造器: 1.构造器也叫构造方法或构造函数,分为有参构造器和无参构造器: 2.构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用: 3.构造器最大的作用就是在创 ...
- mybatis 入门基础
一.Mybatis介绍 MyBatis是一款一流的支持自定义SQL.存储过程和高级映射的持久化框架.MyBatis几乎消除了所有的JDBC代码,也基本不需要手工去设置参数和获取检索结果.MyBatis ...
- 爬虫scrapy框架的使用
第一步 下载scrapy模块: pip install scrapy 第二步 创建项目 在终端/cmd进入创建项目的目录:scrapy startproject douban(项目名) 导入pycha ...
- 1272: 【基础】求P进制数的最大公因子与最小公倍数
1272: [基础]求P进制数的最大公因子与最小公倍数 时间限制: 1 Sec 内存限制: 16 MB 提交: 684 解决: 415 [提交] [状态] [讨论版] [命题人:外部导入] 题目描述 ...
- IOS部分APP使用burpsuite抓不到包原因
曾经在ios12的时候,iphone通过安装burpsuite的ca证书并开启授权,还可以抓到包,升级到ios13后部分app又回到以前连上代理就断网的情况. 分析:ios(13)+burpsuite ...
- 使用Shiro+JWT完成的微信小程序的登录(含讲解)
使用Shiro+JWT完成的微信小程序的登录 源码地址https://github.com/Jirath-Liu/shiro-jwt-wx 微信小程序用户登陆,完整流程可参考下面官方地址,本例中是按此 ...