Hatena::ブログ(Diary)

mizchi log

@mizchiの雑記帳

2010-11-25

unite-script使って unite-script-favstar(python) してみた


favstar中毒の皆様ごきげんよう!
vim界隈で流行のuniteと、id:hakobe932 さんのunite-script使ってみてfavstar見れるようにしてみた。

f:id:mizchi:20101125233410p:image:w400

unite.vim の source をお好きなスクリプト言語で書ける unite-script - はこべにっき#
スクレイピングに pyquery 使ってるので依存にlxmlとか入っててアレなんですが、よくわからない人は $ sudo easy_install pyqueryとかしたらいいと思います。モダンな環境なら多分easy_install入ってる。*1

:Unite script:python:/path/to/unite-favstar.py


unite-favstar.py

#!/usr/local/bin/python
# -*- encoding:utf8 -*-

username= "mizchi"

from pyquery import PyQuery as pq
import urllib2
import sys
import re
reload(sys)
sys.setdefaultencoding('utf-8')

url = "http://favstar.fm/users/%s/recent" % username
d= pq( unicode(urllib2.urlopen(url).read(), "utf8"))

tweets = d(".tweetContainer")
for i in range(tweets.length):
    tw = tweets.eq(i)
    print tw(".favouritesCount")[0].text+"fav",
    if tw(".favouritesCount").length > 1:
        print tw(".favouritesCount")[1].text+"rt",
    print tw(".theTweet")[0].text ,
    users = tw("a.avatar")
    print " by", " ".join([ re.findall('(?<=alt=").*?(?=")', users.eq(i).html())[0] for i in range(users.length)]),
    twurl =  re.findall('(?<=href=")http://twitter.com/.*?(?=")', tw.html())[0]
    print "\t", "call system('open %s')" %twurl

unite-scriptすばらしい
それにしてもきったねースクレイピング

*1ubuntuはapt-get install python-lxmlだとか面倒かった記憶

2010-10-02

Pythonでvimの関数をつくる


一昨日からvim縛りしている。そこそこ使えるようになってきた。
MacVimはデフォルトでPythonで関数を作れるらしいので、やってみた。

UnixTimeをエコーして挿入する

function! Unixtime()
python <<EOM
import time, vim
def make_text():
    return str(int(time.time()))  
buff = vim.current.buffer
line, col = vim.current.window.cursor
insertion_text = make_text()

vim.command('echo '+ insertion_text )
current_line = buff[line-1] 
buff[line - 1 ] = current_line[0:col] + insertion_text + current_line[col:]
vim.current.window.cursor = line  ,  col + len(insertion_text)
EOM
endfunction


:call UnixTime()
で呼び出し
import vim でvimのオブジェクトをとってきたらは、あとはPythonの世界なので好き勝手やれる

2010-09-30

Vimいじってみた


三日ぶりにEmacsいじってると重くて仕方なかった。
環境をつくり直すよりかはどうせvimキーバインドに慣れてることだしVimで環境を作ってみるのも悪くないかなーと思った次第
というか Unite を使ってみたかったのもある

プラギン

  • unite
  • vimshell
  • neocomplecache
  • vimfiler
  • vimproc
  • hatena-edit

Shougoさんすごい。

.vimrc

set runtimepath+=/Users/mizchi/.vim
set clipboard=unnamed "share clipboard with other applications
set number
set hidden                     
set formatoptions=lmoq 
set vb t_vb= 
set ignorecase
set smartcase
set tabstop=4 
set expandtab
set wildmenu
map ,s :mapc<CR>:nmapc<CR>:imapc<CR>:so .vimrc<CR>
imap <C-g> <esc>
vmap <C-g> <esc>

nnoremap <silent> <C-r>  :<C-u>Unite file_mru<CR>
nnoremap <silent> <C-n>  :<C-u>Unite buffer <CR>
nnoremap <silent> ,d :<C-u>Unite file<CR>

autocmd FileType unite call s:unite_my_settings()
function! s:unite_my_settings()
  " Overwrite settings.
  imap <buffer> jj <Plug>(unite_insert_leave)
  imap <buffer> <ESC> <ESC><ESC>
  nnoremap <buffer> t G
  startinsert
endfunction


let g:vimfiler_as_default_explorer = 1
" Disable AutoComplPop.
let g:acp_enableAtStartup = 0
" Use neocomplcache.
let g:neocomplcache_enable_at_startup = 1
" Use smartcase.
let g:neocomplcache_enable_smart_case = 1
" Use camel case completion.
let g:neocomplcache_enable_camel_case_completion = 1
" Use underbar completion.
let g:neocomplcache_enable_underbar_completion = 1
" Set minimum syntax keyword length.
let g:neocomplcache_min_syntax_length = 3
let g:neocomplcache_lock_buffer_name_pattern = '\*ku\*'

" Define dictionary.
let g:neocomplcache_dictionary_filetype_lists = {
    \ 'default' : '',
    \ 'vimshell' : $HOME.'/.vimshell_hist',
    \ 'scheme' : $HOME.'/.gosh_completions'
        \ }

" Define keyword.
if !exists('g:neocomplcache_keyword_patterns')
    let g:neocomplcache_keyword_patterns = {}
endif
let g:neocomplcache_keyword_patterns['default'] = '\h\w*'

" Plugin key-mappings.
imap <C-k>     <Plug>(neocomplcache_snippets_expand)
smap <C-k>     <Plug>(neocomplcache_snippets_expand)
inoremap <expr><C-g>     neocomplcache#undo_completion()
inoremap <expr><C-l>     neocomplcache#complete_common_string()

" SuperTab like snippets behavior.
"imap <expr><TAB> neocomplcache#sources#snippets_complete#expandable() ? "\<Plug>(neocomplcache_snippets_expand)" : pumvisible() ? "\<C-n>" : "\<TAB>"

" Recommended key-mappings.
" <CR>: close popup and save indent.
inoremap <expr><CR>  neocomplcache#smart_close_popup() . (&indentexpr != '' ? "\<C-f>\<CR>X\<BS>":"\<CR>")
" <TAB>: completion.
inoremap <expr><TAB>  pumvisible() ? "\<C-n>" : "\<TAB>"
" <C-h>, <BS>: close popup and delete backword char.
inoremap <expr><C-h> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><BS> neocomplcache#smart_close_popup()."\<C-h>"
inoremap <expr><C-y>  neocomplcache#close_popup()
inoremap <expr><C-e>  neocomplcache#cancel_popup()

" AutoComplPop like behavior.
"let g:neocomplcache_enable_auto_select = 1

" Enable omni completion.
autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS
autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags
autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS
autocmd FileType python setlocal omnifunc=pythoncomplete#Complete
autocmd FileType xml setlocal omnifunc=xmlcomplete#CompleteTags

" Enable heavy omni completion.
if !exists('g:neocomplcache_omni_patterns')
	let g:neocomplcache_omni_patterns = {}
endif
let g:neocomplcache_omni_patterns.ruby = '[^. *\t]\.\w*\|\h\w*::'
"autocmd FileType ruby setlocal omnifunc=rubycomplete#Complete

" === vimshell ===
let g:vimshell_smart_case = 1
let g:vimshell_ignore_case = 1
let g:vimshell_prompt = '$: '
let $PATH .= ':/opt/local/bin:/usr/local/bin:/opt/local/sbin:~/bin'
" current directory を変更
au   BufEnter *   execute ":lcd " . expand("%:p:h") 

set runtimepath+=$HOME/.vim/hatena
let g:hatena_user='mizchi'