vim插件开发之osc动弹插件

简介: vim插件开发之osc动弹插件

前言

之前写了一个简单的vim插件开发之helloworld插件,本文我们将介绍一个简单的实用示例:在vim下发osc的动弹。

如果你平时在viim下写代码,当你写的很累的时候,是不是很想休息一会,上osc发一条动弹,调节一下。但是来回切换浏览器和vim,是不是觉得很麻烦?如果能在vim中直接来条命令OscTweet [动弹内容]就能完成上述的工作,是不是觉得很cool。边写代码边发动弹,或者遇到啥问题及时拷贝一下相关代码并发到osc的动弹上面去。


很高兴的通知您,现在您可以做到了。


开发

插件github地址为:git@github.com:gschen/vim-plugin-oschina.git

http://git.oschina.net/gschen-register/vim-plugin-oschina

之所以采用vim+python的方式进行开发,主要是python语法比较简洁,且类库比较多有些类库使用起来比较方便。还有一个重要的原因就是很多比较著名的插件都是使用python来开发的。


思路:vim中调用python模拟登录并发动弹;


下面的代码应该说明一些了,呵呵。


关于下述代码有几点需要说明的地方:


相关的http请求使用的是requests类库,这个大家可能比较陌生,但确实是个非常好的库,可能大家对urllib, urllib2等之类的比较熟悉,但urllib的库太ugly,使用起来非常的不方便,非常非常的不爽,不知道当初的api是怎么设计的;

html解析这块使用的是BeautifulSoup,做过java html解析的一定对Joup比较了解,这个你就当是python中的啥soup吧,不过这个库是真心好用啊;

hashlib库主要是用来加密解密的,因为osc的密码使用了sha1加密方式;

在做http请求的时候,要加上header:user-agent,另外tweet的时候需要加上referer。

注:由于使用了requests, BeautifulSoup库,如果你系统未安装,可通过如下命令安装:


easy_install requests, BeautifulSoup

"---------------------------------------
" vim plugin for oschina's tweet
" Maintainer: justin <gschen.cn@gmail.com>
" Last Updated: 04 June 2013
" Changes:
" TODO:
" v 0.1:
"   * first edition, just for fun
"---------------------------------------
" check the vim supports python
if !has('python')
    echo 'Error: Required vim compile with +python'
    finish
endif
" define your own command
command! -nargs=1 OscTweet exec('py Oschina().tweet(<f-args>)')
python << EOF
import requests 
import hashlib
from BeautifulSoup import BeautifulSoup
username = "YOUR USERNAME"
password = "YOUR PASSWORD"
class Oschina:
    def __init__(self):
        self.login()
    def login(self):
        payload = {'email':username,'pwd':hashlib.sha1(password).hexdigest(),'save_login':'1'}
        headers={'User-Agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 '}
        url = 'http://www.oschina.net/action/user/hash_login'
        s = requests.Session()
        r = s.post(url, data=payload, headers=headers)
        #print r.text
        print "login success!"
        self.session = s
    def tweet(self,msg):
        soup = self.getHomePage()
        userId, userCode = self.getUserIdAndCode(soup)
        url = 'http://my.oschina.net/action/tweet/pub'
        payload = {'user':userId, 'user_code':userCode, 'attachment':'0', 'msg':msg}
        headers={'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 ','referer':'https://www.oschina.net/home/login?goto_page=http%3A%2F%2Fwww.oschina.net%2F'}
        r=self.session.post(url,data=payload,headers = headers)
        print r.text
        print "tweet success."
    def getHomePage(self):
        headers={'user-agent':'Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.64 ','referer':'https://www.oschina.net/home/login?goto_page=http%3A%2F%2Fwww.oschina.net%2F'}
        resp = self.session.get("http://my.oschina.net/gschen",headers=headers)
        soup = BeautifulSoup(resp.text)
        return soup
    def getUserIdAndCode(self,soup):
        userCode= soup('input', {'name':'user_code'})[0]['value']
        userId= soup('input', {'name':'user'})[0]['value']
        return userId, userCode
EOF

注:上述代码有一些不足的地方,那就是每次动弹都需要重新登陆,这样就很影响速度和远程服务器,效率不高,后续会有一个改进的版本,将会使用vim buffer来解决该问题,只要第一次登陆,后续的动弹就无需再登陆了。

插件使用方法

YOUR USERNAME 为你的osc用户名

YOUR PASSWORD 为你的osc密码

  • 保存文件并移动到~/.vim/plugin/下;
  • 用vim打开任意的文件,输入命令

:OscTweet 动弹内容

总结

本文主要介绍了在vim中发osc动弹的小插件,时间仓促,有很多异常未处理,但是在网络正常情况下,在vim中发osc动弹是没有任何问题的。

累了,饿了,不管啥,都发个吧!

先上个图吧

image.png

引用

[1] http://www.crummy.com/software/BeautifulSoup/


[2] http://docs.python-requests.org/en/latest/index.html


[3] http://docs.python.org/2/library/hashlib.html


目录
相关文章
|
6月前
|
XML IDE 开发工具
别看你风吹头顶凉但你绝对没有过这样方便的插件Intellij IDEA 自带的 Vim
别看你风吹头顶凉但你绝对没有过这样方便的插件Intellij IDEA 自带的 Vim
119 0
|
API 开发工具 开发者
vim插件开发之python-helloworld插件
vim插件开发之python-helloworld插件
123 0
|
Unix Linux 开发工具
vim插件开发之helloworld插件
vim插件开发之helloworld插件
142 0
|
XML IDE 数据可视化
Vim的三款实用插件
Vim 是 Linux 下的常用文本编辑器,但也经常被称为是一个上古神器,因为它对于初学者而言相当不友好,也不好入门。
334 0
|
Linux 开发工具 Python
vim关于python的自动补全插件
一、克隆代码mkdir -p ~/.vim/toolscd ~/.vim/toolsgit clone https://github.com/rkulla/pydiction.git二、配置Pydiction - UNIX/LINUX/OSX: Put python_pydiction.
1595 0
|
开发工具
强大的vim插件
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。常被称为编辑器之神,也是本人平时最喜欢使用的一款开发者编辑器,插件升级如下:     在终端输入: wget -qO- https://raw.
1093 0
|
JavaScript 搜索推荐 Linux
【vim && neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、一键格式化、显示目录)(二)
本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux,很多操作可以通过鼠标完成,或许更加直观。 推荐使用neovim(结合鼠标操作更加丝滑)。
【vim && neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、一键格式化、显示目录)(二)
|
JavaScript Java Linux
【vim && neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、一键格式化、显示目录)(三)
本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux,很多操作可以通过鼠标完成,或许更加直观。 推荐使用neovim(结合鼠标操作更加丝滑)。
|
数据可视化 搜索推荐 Unix
【vim && neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、一键格式化、显示目录)(一)
本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux,很多操作可以通过鼠标完成,或许更加直观。 推荐使用neovim(结合鼠标操作更加丝滑)。
|
开发工具 Python Ubuntu