Send Code to evernote by my specify notebook
- #coding:utf-8
- import sys
- sys.path.append("lib")
- import thrift.protocol.TBinaryProtocol as TBinaryProtocol
- import thrift.transport.THttpClient as THttpClient
- import evernote.edam.userstore.UserStore as UserStore
- import evernote.edam.notestore.NoteStore as NoteStore
- import evernote.edam.type.ttypes as Types
- import evernote.edam.error.ttypes as Errors
- from html import XHTML
- import sublime,sublime_plugin
- consumer_key = 'jamiesun-2467'
- consumer_secret ='7794453e92251986'
- evernoteHost = "www.evernote.com"
- userStoreUri = "https://" + evernoteHost + "/edam/user"
- settings = sublime.load_settings("SublimeEvernote.sublime-settings")
- class SendToEvernoteCommand(sublime_plugin.TextCommand):
- def __init__(self,view):
- self.view = view
- self.window = sublime.active_window()
- def connect(self,callback,**kwargs):
- sublime.status_message("authenticate..., please wait...")
- def _connect(username,password):
- try:
- userStoreHttpClient = THttpClient.THttpClient(userStoreUri)
- userStoreProtocol = TBinaryProtocol.TBinaryProtocol(userStoreHttpClient)
- userStore = UserStore.Client(userStoreProtocol)
- authresult = userStore.authenticate(username,password,consumer_key,consumer_secret)
- if authresult:
- token = authresult.authenticationToken
- noteStoreUrl = authresult.noteStoreUrl
- if not settings.get("password") and sublime.ok_cancel_dialog("Remember password?"):
- settings.set("password",password)
- settings.set("username",username)
- settings.set("authToken",token)
- settings.set("noteStoreUrl",noteStoreUrl)
- sublime.save_settings('SublimeEvernote.sublime-settings')
- sublime.status_message("authenticate ok")
- callback(**kwargs)
- else:
- raise Exception("authenticate failure")
- except Exception,e:
- sublime.error_message("error:%s"%e)
- def on_username(username):
- def on_passwd(password):
- if username and password:
- _connect(username,password)
- self.window.show_input_panel("password (required)::","",on_passwd,None,None)
- iusername = settings.get("username")
- ipassword = settings.get("password")
- if not iusername or not ipassword:
- self.window.show_input_panel("username (required)::","",on_username,None,None)
- else:
- _connect(iusername,ipassword)
- def send_note(self,**kwargs):
- authToken = settings.get("authToken")
- noteStoreUrl = settings.get('noteStoreUrl')
- noteStoreHttpClient = THttpClient.THttpClient(noteStoreUrl)
- noteStoreProtocol = TBinaryProtocol.TBinaryProtocol(noteStoreHttpClient)
- noteStore = NoteStore.Client(noteStoreProtocol)
- region = sublime.Region(0L, self.view.size())
- content = self.view.substr(region)
- def sendnote(title,tags):
- xh = XHTML()
- note = Types.Note()
- note.title = title.encode('utf-8')
- note.content = '<?xml version="1.0" encoding="UTF-8"?>'
- note.content += '<!DOCTYPE en-note SYSTEM "http://xml.evernote.com/pub/enml2.dtd">'
- note.content += '<en-note><pre>%s'%xh.p(content.encode('utf-8'))
- note.content += '</pre></en-note>'
- note.tagNames = tags and tags.split(",") or []
- #set note's parent notebook guid
- note.notebookGuid = "eeb43022-0fd4-4c29-894b-03e3d5fa2f45"
- try:
- sublime.status_message("please wait...")
- cnote = noteStore.createNote(authToken, note)
- sublime.status_message("send success guid:%s"%cnote.guid)
- sublime.message_dialog("success")
- except Errors.EDAMUserException,e:
- args = dict(title=title,tags=tags)
- if e.errorCode == 9:
- self.connect(self.send_note,**args)
- else:
- if sublime.ok_cancel_dialog('error %s! retry?'%e):
- self.connect(self.send_note,**args)
- except Exception,e:
- sublime.error_message('error %s'%e)
- def on_title(title):
- def on_tags(tags):
- sendnote(title,tags)
- self.window.show_input_panel("Tags (Optional)::","",on_tags,None,None)
- if not kwargs.get("title"):
- self.window.show_input_panel("Title (required)::","",on_title,None,None)
- else:
- sendnote(kwargs.get("title"),kwargs.get("tags"))
- def run(self, edit):
- if not settings.get("authToken"):
- self.connect(self.send_note)
- else:
- self.send_note()
Send Code to evernote by my specify notebook的更多相关文章
- VS Code Python 全新发布!Jupyter Notebook 原生支持终于来了!
VS Code Python 全新发布!Jupyter Notebook 原生支持终于来了! 北京时间 2019 年 10 月 9 日,微软发布了全新的 VS Code Python 插件,带来了众多 ...
- VS Code 之 Jupyter NoteBook 初试
一.前言 在今年九月的 PyCon China 大会上,官宣了一项 VS Code Python 的全新功能:Visual Studio Code Python 插件将提供 Jupyter Noteb ...
- 使用jupyterthemes插件定制jupyter notebook界面
jupyter notebook界面是可以定制的,定制位置在:C:\anaconda\Lib\site-packages\notebook\static\custom. 启动jupyter noteb ...
- 官宣!VS Code Python 全新功能在 PyCon China 全球首发!
北京时间 2019 年 9 月 21 日,PyCon China 2019 在上海举行. 在下午的演讲中,来自微软开发工具事业部的资深研发工程师 在演讲中,我们看到了 Azure Notebook 与 ...
- Code Book All In One
Code Book All In One Jupyter Notebook Jupyter Lab https://jupyter.org/ Storybook https://storybook.j ...
- jQuery源码 Ajax模块分析
写在前面: 先讲讲ajax中的相关函数,然后结合函数功能来具体分析源代码. 相关函数: >>ajax全局事件处理程序 .ajaxStart(handler) 注册一个ajaxStart事件 ...
- 利用nodejs实现登录并转码视频(原创)
nodejs的出现让前端人员可以使用js打造后台,也许哪天就真的摆脱了对java或者php的依赖了. 今天跟大家分享一个利用nodejs接受前端post请求,并实现视频转码的这样一个例子.视频转码用到 ...
- nodejs学习笔记二——链接mongodb
a.安装mongoose库用来链接mongodb数据库 安装mongodb数据库参考mongodb安装 前言(怨言) 本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录: ...
- loopback 05
数据并发处理 数据库事务 事务隔离 ACID性质 原子性(Atomicity): 要么全部被执行,要么都不执行; 一致性(Consistency): 满足完整性约束; 隔离性(Isolation): ...
随机推荐
- can not find java.util.map java.lang.Double问题
mybatis @Param注解和ParamType属性不能共存
- Django APP之contenttypes简单应用
Conttenttypes介绍 当你看到contenttype你是不是想到了请求头的contenttype? 但是 此contenttypes不是请求头Content-Type而是Django自带的a ...
- matlab + c/c++ opencv 混合编程
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 辛苦原创所得,转载请注明出处 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ...
- composer 更新国内镜像地址
composer config -g repo.packagist composer https://packagist.phpcomposer.com
- 使用MapReduce将HDFS数据导入Mysql
使用MapReduce将Mysql数据导入HDFS代码链接 将HDFS数据导入Mysql,代码示例 package com.zhen.mysqlToHDFS; import java.io.DataI ...
- SpringMVC注解示例
1.web.xml <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-cla ...
- 自定义响应结构 AjaxResult()
package com.dsj.gdbd.utils.ajax; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxm ...
- css中单位px和em,rem的区别
PX:PX实际上就是像素,用PX设置字体大小时,比较稳定和精确.但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,如果改变了浏览器的缩放,这时会使用我们的Web页面布局被打破.这样 ...
- 我理解的关于Vue.nextTick()的正确使用
什么是Vue.nextTick() 官方文档解释如下: 在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法,获取更新后的 DOM. 我理解的官方文档的这句话的侧重点在最后那半 ...
- js 定义hash类
// JavaScript Documentfunction HashTable(){ this._hash={}; this._count=0; /** *添 ...