機能追加のお知らせ(API公開、Googleカレンダーとの同期、デザイン変更) | サイボウズLiveマガジンAPI好きとしては、これを放っておく訳にはいきません。
9月15日のサイトメンテナンスにより、新機能を追加しました。
■APIの公開
外部アプリケーションからサイボウズLiveの情報を取得・操作できるAPIを公開しました。通信方式はREST、認証方式はOAuthです。現在は最新情報の取得、スケジュール情報の取得に限定していますが、順次APIで取得・操作可能な情報を拡充していきます。
APIの公開にあわせて、サイボウズLive Developer Centerを公開しました。
http://magazine.cybozulive.com/2010/09/system_update10.html
もちろんVimで行きます!
APIはドキュメントによるとAtomを使います。また認証にはTwitterと同じくOAuthが採用されています。
Vimscriptでやるには少し敷居が高いんじゃないの?と思っている貴方!出来るんです!やるんです!
まず先日作った、vim-oauthを使って認証を行いました。
"https://api.cybozulive.com/oauth/initiate" に対してリクエストトークンを要求し、そのリクエストトークンを元に "https://api.cybozulive.com/oauth/authorize" でブラウザ認証を行います。すると数文字のベリファイアが貰えるので、"https://api.cybozulive.com/oauth/token" へアクセストークンを要求します。
これで認証必要な物は揃いました。ここまでをコードにすると以下の様な感じ。
set rtp+=webapi-vim
let config = {}
let configfile = expand('~/.cybozulive')
if filereadable(configfile)
let config = eval(join(readfile(configfile), ""))
else
let config.consumer_key = input("consumer_key:")
let config.consumer_secret = input("consumer_secret:")
let request_token_url = "https://api.cybozulive.com/oauth/initiate"
let auth_url = "https://api.cybozulive.com/oauth/authorize"
let access_token_url = "https://api.cybozulive.com/oauth/token"
let [request_token, request_token_secret] = oauth#requestToken(request_token_url, config.consumer_key, config.consumer_secret)
if has("win32") || has("win64")
exe "!start rundll32 url.dll,FileProtocolHandler ".auth_url."?oauth_token=".request_token
else
call system("xdg-open '".auth_url."?oauth_token=".request_token."'")
endif
let verifier = input("PIN:")
let [access_token, access_token_secret] = oauth#accessToken(access_token_url, config.consumer_key, config.consumer_secret, request_token, request_token_secret, {"oauth_verifier": verifier})
let config.access_token = access_token
let config.access_token_secret = access_token_secret
call writefile([string(config)], configfile)
endif
これで、アクセストークンとアクセストークンシークレットが貰えます。簡単ですね!さて、肝心のAtomです。このブログでは紹介した事なかったと思いますが、VimでのXMLパーサを実は以前書いた暖めておりました。
mattn's xmlparser-vim at master - GitHubこれを使ってパースしました。パースするとDOMが返ります。
XML Parser for Vim
http://github.com/mattn/xmlparser-vim
let notification_url = "https://api.cybozulive.com/api/notification/V2"
let ret = oauth#get(notification_url, config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret, {})
let dom = xml#parse(ret.content)
for elem in dom.findAll("entry")
echo elem.find("updated").value() . " " . elem.find("title").value()
echo " " . elem.find("author").find("name").value()
let summary = elem.find("summary")
if !empty(summary)
echo " " . substitute(summary.value(), "\n", "\n ", "g")
endif
echo "\n"
endfor
こんな感じにXMLを処理出来ます。これ、全てPure Vimscriptです。信じれない人や変態な人は、ソース覗いて下さい。動く物を置いておきます。
mattn's cybozulive-vim at master - GitHubhttp 関連、XML関連を纏めて webapi-vim というリポジトリに入れ、cybozulive-vim からは submodule としています。
vim interface to cybozulive
http://github.com/mattn/cybozulive-vim
mattn's webapi-vim at master - GitHub
vim interface to Web API
http://github.com/mattn/webapi-vim
# git submodule init
# git submodule update
として下さい。以下、cybozulive.vim の全体のソースです。
set rtp+=webapi-vim
let config = {}
let configfile = expand('~/.cybozulive')
if filereadable(configfile)
let config = eval(join(readfile(configfile), ""))
else
let config.consumer_key = input("consumer_key:")
let config.consumer_secret = input("consumer_secret:")
let request_token_url = "https://api.cybozulive.com/oauth/initiate"
let auth_url = "https://api.cybozulive.com/oauth/authorize"
let access_token_url = "https://api.cybozulive.com/oauth/token"
let [request_token, request_token_secret] = oauth#requestToken(request_token_url, config.consumer_key, config.consumer_secret)
if has("win32") || has("win64")
exe "!start rundll32 url.dll,FileProtocolHandler ".auth_url."?oauth_token=".request_token
else
call system("xdg-open '".auth_url."?oauth_token=".request_token."'")
endif
let verifier = input("PIN:")
let [access_token, access_token_secret] = oauth#accessToken(access_token_url, config.consumer_key, config.consumer_secret, request_token, request_token_secret, {"oauth_verifier": verifier})
let config.access_token = access_token
let config.access_token_secret = access_token_secret
call writefile([string(config)], configfile)
endif
let notification_url = "https://api.cybozulive.com/api/notification/V2"
let ret = oauth#get(notification_url, config.consumer_key, config.consumer_secret, config.access_token, config.access_token_secret, {})
let dom = xml#parse(ret.content)
for elem in dom.findAll("entry")
echo elem.find("updated").value() . " " . elem.find("title").value()
echo " " . elem.find("author").find("name").value()
let summary = elem.find("summary")
if !empty(summary)
echo " " . substitute(summary.value(), "\n", "\n ", "g")
endif
echo "\n"
endfor
実行結果貼っておきますね。
2010-09-16T03:33:00Z サイボウズLiveアプリを作る!
松本 泰弘
[登録] 2010年9月16日(木)
2010-06-30T14:42:20Z tw.pptx
竹迫 良範
2010-09-15T02:40:58Z mattnさんとオフする
松本 泰弘
大阪に出張に逝ったときとか
2010-06-18T01:27:21Z 竹迫 良範 さんが参加しました
竹迫 良範
2010-02-26T03:59:58Z test
hasegawa yosuke
EF BB BF C0 AF 2F
(添付ファイルがあります。)
mattn the pure vimscripter.