Vimから自分のはてブのブックマークを覗くプラグインを書いた

タイトル通り。またしてもVimネタ。色々アイデアが出て作り貯めていたので。予め言い訳しておくと完成度はアレだと思われ

scriptencoding utf-8

let s:hatena_id = exists('g:hatena_user') ? g:hatena_user : 'your-hatena-id' 

function! HatebuView(...)
  let tag = a:0 > 0 ? a:1 : '' " a:0は引数の数
  let res = webapi#http#get('http://b.hatena.ne.jp/'.s:hatena_id.'/atomfeed?tag='.webapi#http#escape(tag))
  let dom = webapi#xml#parse(res.content)

  if match(dom.find('title').value(), tag.' (0)') != -1
    echohl ErrorMsg
    echo 'タグ['.tag.']が付いているブックマークはありません'
    echohl None
    return 
  endif

  let tmp_file_name = '[Hatebu View]' 
  let line_list = (tag == '') ? ['ブックマーク一覧', ''] :  ['['.tag.']タグの付いたブックマーク一覧',  '']

  for item in dom.findAll('entry')
    let title = item.find('title').value() 
    let uri =  item.find('link').attr['href'] 
    call extend(line_list, [title, uri, ''])
  endfor

  call writefile(line_list, tmp_file_name)
  execute 'vnew '. tmp_file_name
  setlocal noswapfile nobuflisted buftype=nowrite
  call system('rm -rf "'.tmp_file_name.'"')
endfunction

command! -nargs=? HatebuView call HatebuView(<q-args>)

はてなのユーザIDは、hatena.vimを使っていてg:hatena_userを.vimrcなんかで設定してる人はそれを使う。そうじゃない人は

let g:hatena_user='はてなのユーザID'

を.vimrcに追加するか、上のVimscriptの3行目のyour-hatena-idを自分のIDに書き換えるかしてください。
使用に関して、前のGoogleCalc.vim(http://d.hatena.ne.jp/tasuten/20101209/1291831256)と同じくwebapi-vim(https://github.com/mattn/webapi-vim)を使ってる故未インストールの方はwebapi-vimも要インストール。

で、使い方は

:HatebuView {tag}

{tag}が指定された場合はそのタグがついたブックマークの、指定されていなければ全てのブックマークの直近20件の一覧をこんな風に画面を分割して表示する

左側のファイル名がアレだが大丈夫だ、問題ない。
ちなみにここでopen-browser.vim(http://d.hatena.ne.jp/tyru/20100619/git_push_vim_plugins_to_github)やutl.vim(http://www.vim.org/scripts/script.php?script_id=293)のようにURLな文字列をブラウザでほげほげできるようなプラグインがあれば、URLにカーソルを合わせてふがふがすればブラウザでそのページに飛べるわけだ。

注意点として、:HatebuView {tag}しても時々暫くたっても反応が無い時があるけど、そういう時はCtrl-cでコマンドを中断してあげるのがいいかも。多分はてなAPIかサーバーが×××な状態になっているんじゃないだろうか。責任転嫁ジャナイヨー俺ノ所為ジャナイヨー

以下参考にしたページ
Big Sky :: favstar.vim書いた。
はてなブックマークフィード仕様とは - はてなキーワード

当ブログに於いて、私tasutenによって創作されたことが自明である著作物に対しては、別途明示のある場合を除き全てCC0が適用されます。