paiza.IO は実行できるコードサイズに制限があったため、iutest での使用要件を満たしていませんでした。
今回は、ideone の API を使ってみたいと思います。
まずは登録から
Ideone の API は Sphere Engine として提供されています。この Sphere Engine を使うためには、Ideone のアカウントとは別に登録をしなければいけません。
ちなみに、この Sphere Engine は無償ではありません。
Pay-As-You-Go のプランがお試しプランといった感じで、初期投資0円で使えます。
最初に一定回数分 API が使えるようになっています。
今回はこのプランで登録しました。
登録をすると、アカウント設定ページに API のパスワード設定が追加されているので好きなパスワードを設定してください。
API を使う
Ideone の API は WSDL を使う実装なようで、よくわからなかったのと、めんどくさかったので既存のパッケージを使いました。https://pypi.python.org/pypi/ideone/0.2.0
from ideone import Ideone i = Ideone('ユーザー名', 'パスワード') r = i.create_submission(code, language_name='C++14') link = r['link'] x = i.submission_status(link) while not int(x['status']) == 0: x = i.submission_status(link) print i.submission_details(link)
基本的には、create して status を確認して details で結果を取得する流れになります。
お試しコードを実行した結果
{status: 0, memory: 3140, langName: C++14, output: hoge , signal: 0, error: OK, langId: 44, cmpinfo: , source: #include <iostream> int main(int argc, char** argv) { std::cout << "hoge" << std::endl; return 0; } , result: 15, stderr: , time: 0.0, date: 2015-01-24 12:52:06, input: , langVersion: gcc-4.9.2, public: True}
あと何回 API が使えるかどうかはアカウント設定ページの右側 manage codes のところで確認できます。
iutest で使う
コードが実行できるようになったので、iutest で実行してみました。が、よくわからないエラーが出ました。
$ make sample USER=xxxx PASSWORD=xxxx python iuideone.py sample.cpp -u xxxx -p xxxx --expand_include --encoding utf-8-sig Traceback (most recent call last): File "iuideone.py", line 190, in <module> main() File "iuideone.py", line 187, in main run(options) File "iuideone.py", line 179, in run r = run_ideone(code, options) File "iuideone.py", line 124, in run_ideone r = i.create_submission(code, language_name=options.compiler, std_input=options.stdin) File "build/bdist.cygwin-1.7.32-i686/egg/ideone/__init__.py", line 176, in create_submission File "build/bdist.cygwin-1.7.32-i686/egg/suds/client.py", line 542, in __call__ File "build/bdist.cygwin-1.7.32-i686/egg/suds/client.py", line 602, in invoke File "build/bdist.cygwin-1.7.32-i686/egg/suds/client.py", line 649, in send File "build/bdist.cygwin-1.7.32-i686/egg/suds/client.py", line 702, in failed File "build/bdist.cygwin-1.7.32-i686/egg/suds/bindings/binding.py", line 258,in get_fault File "build/bdist.cygwin-1.7.32-i686/egg/suds/sax/parser.py", line 136, in parse File "/usr/lib/python2.7/xml/sax/expatreader.py", line 107, in parse xmlreader.IncrementalParser.parse(self, source) File "/usr/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse self.feed(buffer) File "/usr/lib/python2.7/xml/sax/expatreader.py", line 214, in feed self._err_handler.fatalError(exc) File "/usr/lib/python2.7/xml/sax/handler.py", line 38, in fatalError raise exception xml.sax._exceptions.SAXParseException: <unknown>:1:49: syntax error Makefile:17: recipe for target 'sample' failed make: *** [sample] Error 1
ライブラリをちょこっといじってプリントデバッグしたところ、500 が返ってきてることがわかりました。
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <title>500 Internal Server Error</title> </head><body> <h1>Internal Server Error</h1> <p>The server encountered an internal error or misconfiguration and was unable to complete your request.</p> <p>Please contact the server administrator, contact@ideone.com and inform them of the time the error occurred, and anything you might have done that may have caused the error.</p> <p>More information about this error may be available in the server error log.</p> </body></html>
コードが長すぎるのでしょうかね…
(ボーダーラインを調べようとしたが、確定できなかったので長さだけが原因ではないかも)
というわけで、またもや Wandbox の偉大さを実感する結果となりました。
しばらくは、Wandbox のみを利用しつつ、気が向いたときにまた別のオンラインコンパイラーを試したいと思います。
0 件のコメント:
コメントを投稿