basyura's blog

あしたになったらほんきだす。

webapi-vim で twitter の OAuth からステータスの取得まで

用意するもの

アクセストークンの取得

  let request_token_url = 'https://twitter.com/oauth/request_token'
  let access_token_url  = 'https://twitter.com/oauth/access_token'
  let authorize_url     = 'https://twitter.com/oauth/authorize'

  let consumer_key    = 'your consumer key'
  let consumer_secret = 'your consumer secret'

  " リクエストトークンを取得する
  let ctx = oauth#request_token(
        \ request_token_url, 
        \ {'consumer_key' : consumer_key , 'consumer_secret' : consumer_secret})

  " ctx にトークンが格納される
  echo ctx.consumer_key
  echo ctx.consumer_secret
  echo ctx.request_token
  echo ctx.request_token_secret
  
  " ブラウザで認証 url を開く
  execute "OpenBrowser " . authorize_url . "?oauth_token=" . ctx.request_token
  
  " 画面に表示されている pin を入力
  let pin = input("pin : ")

  " アクセストークンを取得する
  let ctx = oauth#access_token(access_token_url, ctx , {'oauth_verifier' : pin})

  " ctx にトークンが格納される
  echo ctx.access_token
  echo ctx.access_token_secret

ステータスの取得

  let api_url = 'https://api.twitter.com/1'
  " リクエストパラメータにトークンを設定
  let ctx = {
        \ 'consumer_key' : consumer_key , 'consumer_secret' : consumer_secret ,
        \ 'access_token' : access_token , 'access_token_secret' : access_token_secret ,
        \ }
  " home timeline を取得
  let res = oauth#get(api_url . '/statuses/home_timeline.xml' , ctx)
  " xml をパースし
  for tweet in xml#parse(res.content).childNodes('status')
    " ツイートを出力
    echo tweet.childNode('user').childNode('screen_name').value() . ' : ' . tweet.childNode('text').value()
  endfor

まとめ

OAuth 周りがめんどくさくて Rubytter.rb をラップする rubytter.vim を書いて使っていたんだけど、webapi-vim を使えば pure vimscript でいけそう。