您当前的位置: 首页 >  vim

暂无认证

  • 0浏览

    0关注

    92582博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

vim插件开发之osc动弹插件

发布时间:2013-06-04 12:38:00 ,浏览量:0

前言

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

如果你平时在vim下写代码,当你写的很累的时候,是不是很想休息一会,上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模拟登录并发动弹;

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

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

  1. 相关的http请求使用的是requests类库,这个大家可能比较陌生,但确实是个非常好的库,可能大家对urllib, urllib2等之类的比较熟悉,但urllib的库太ugly,使用起来非常的不方便,非常非常的不爽,不知道当初的api是怎么设计的;
  2. html解析这块使用的是BeautifulSoup,做过java html解析的一定对Joup比较了解,这个你就当是python中的啥soup吧,不过这个库是真心好用啊;
  3. hashlib库主要是用来加密解密的,因为osc的密码使用了sha1加密方式;
  4. 在做http请求的时候,要加上header:user-agent,另外tweet的时候需要加上referer。

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

easy_install requests, BeautifulSoup

"---------------------------------------
" vim plugin for oschina's tweet
" Maintainer: justin 
" 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()')

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来解决该问题,只要第一次登陆,后续的动弹就无需再登陆了。

插件使用方法
  • 下载插件https://github.com/gschen/vim-plugin-oschina
  • 替换osc.tweet.vim中的

YOUR USERNAME 为你的osc用户名

YOUR PASSWORD 为你的osc密码

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

:OscTweet 动弹内容

总结

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

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

先上个图吧

引用

[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

关注
打赏
1653961664
查看更多评论
立即登录/注册

微信扫码登录

0.3482s