VimでSOAP通信を実現しました。
Gistの様なサービスでIdeoneというのがあるんですが、これまでPure VimscriptでGist、Codepadと制覇してきたので、よしIdeoneも...と思ってAPIドキュメントに目を通してみたら、なんとSOAP通信ではないですか!
でもくじけません!負けません!
頑張ってSOAP通信しました。
mattn's ideone-vim at master - GitHub
vimscript for ideone
http://github.com/mattn/ideone-vim/
:Ideone -r
でideone上で実行し
:Ideone -p
でprivate投稿となります。Gistと同じ様に使えます。ソースコードのメイン部はこんな感じ。前に作っていた「webapi-vim」というスクリプト群に含まれる「xml.vim」に少し手をいれましたが、かなり良い仕事をしてくれています。
ideone-vimについてはSOAPのXMLを自前で作ってますが、本来WSDLからインタフェースを作れるのがSOAPの魅力ですね。
なのでさらに戦ってみました!
soap.vimというのをwebapi-vimに追加しました。
これを使うと関数を定義しなくとも、以下の様にwsdlを読み込ませるだけでgetLanguagesという関数が呼び出せます。
let api = soap#proxy("http://ideone.com/api/1/service.wsdl")
let langs = api.getLanguages("username", "password")
for key in sort(keys(langs))
echo key."=".langs[key]
endfor
ideoneのアカウントを取って実行すると(ideoneのパスワードはAPI専用のパスワードになります)
1=C++ (gcc-4.3.4)
10=Java (sun-jdk-1.6.0.17)
101=Visual Basic .NET (mono-2.4.2.3)
102=D (dmd) (dmd-2.042)
104=AWK (gawk) (gawk-3.1.6)
105=AWK (mawk) (mawk-1.3.3)
106=COBOL 85 (tinycobol-0.65.9)
107=Forth (gforth-0.7.0)
108=Prolog (gnu) (gprolog-1.3.1)
11=C (gcc-4.3.4)
110=bc (bc-1.06.95)
111=Clojure (clojure 1.1.0)
112=JavaScript (spidermonkey) (spidermonkey-1.7)
114=Go (gc-2010-07-14)
115=Unlambda (unlambda-2.0.0)
116=Python 3 (python-3.1.2)
117=R (R-2.11.1)
118=COBOL (open-cobol-1.0)
119=Oz (mozart-1.4.0)
12=Brainf**k (bff-1.0.3.1)
121=Groovy (groovy-1.7)
122=Nimrod (nimrod-0.8.8)
123=Factor (factor-0.93)
124=F# (fsharp-2.0.0)
125=Falcon (falcon-0.9.6.6)
13=Assembler (nasm-2.07)
14=CLIPS (clips 6.24)
15=Prolog (swi) (swipl 5.6.64)
16=Icon (iconc 9.4.3)
17=Ruby (ruby-1.9.2)
19=Pike (pike 7.6.86)
2=Pascal (gpc) (gpc 20070904)
21=Haskell (ghc-6.8.2)
22=Pascal (fpc) (fpc 2.2.0)
23=Smalltalk (gst 3.1)
25=Nice (nicec 0.9.6)
26=Lua (luac 5.1.4)
27=C# (mono-2.8)
28=Bash (bash 4.0.35)
29=PHP (php 5.2.11)
3=Perl (perl 5.12.1)
30=Nemerle (ncc 0.9.3)
32=Common Lisp (clisp) (clisp 2.47)
33=Scheme (guile) (guile 1.8.5)
34=C99 strict (gcc-4.3.4)
35=JavaScript (rhino) (rhino-1.6.5)
36=Erlang (erl-5.7.3)
38=Tcl (tclsh 8.5.7)
39=Scala (scala-2.8.0.final)
4=Python (python 2.6.4)
45=Assembler (gcc-4.3.4)
5=Fortran (gfortran-4.3.4)
54=Perl 6 (rakudo-2010.08)
6=Whitespace (wspace 0.3)
62=Text (text 6.10)
7=Ada (gnat-4.3.2)
8=Ocaml (ocamlopt 3.10.2)
9=Intercal (c-intercal 28.0-r1)
error=OK
languages=
おぉぉぉぉぉぉぉぉぉぉぉぉぉ...いろいろ出来る気がしてきましたね!ただ今は戻り値は全てstringで扱ってたりするので実用的ではありません。この辺は今後、ideone意外のサービスで確認しながら改良していきます。
俺は一体何と戦っているんだ!