URL: http://connpass.com/event/1439/
shinriyoです。万年素人のエンジニアです。(自称クラフトマン)
普段はUnityというゲームエンジンでゲーム開発してます。
しかも、UnityScriptというクソ言語(C#で実装されたBooというPythonモドキの言語で実装されたJSモドキの言語)で書いてます。
Pythonは趣味とたまにちょっとしたツール書くくらいですね。そのBooというPythonモドキの言語もたまに嗜みますよ。
土日も一日中仕事で、UnityとBooのアドベントカレンダーを立てたけど
あまり参加してくれなくてほぼ一人で書いてて時間がとれません。
※朝は寒くて早起きできません・・・
オライリーの洋書もまだ翻訳されてない(途中まで個人で訳したけどw)Tornadoを使いたいと思います。
このTornadoと、Titaniumとの連携を行なっていきます。
レベルは初心者向けの内容です。(virtualenv入ってる前提で話し進めますよ)
・まずTornadoインストール
workon pyfes2012 pip install tornado
※今回はpyfes2012とは関係ないですが、沢山インストールされるのが嫌なので、私は「pyfes2012」をなんでも屋vertual環境にしていますので気にしないでください。
Titaniumは調子が悪くてTitanium Mobileで何故か新規プロジェクトを作成できなくなってるので、
Titaniumのプロジェクトをコピーします。(僕の環境がおかしいだけなので真似しなくていいです普通にTitaniumで新規プロジェクト作ってね)
cp -rf omikuji tornado_test
私の環境はなぜかコンパイルもできなくなってしまってるので、MakeTiというのを使ってます。
※詳しくは過去の私の記事見てね。
→ Titnaium Mobileがおかしい時にも使用出来るツール
Tornadoに話を戻します。
mkdir tornado cd tornado
・hello.py
※某動物外資系技術書のコードのパクリだろ?ってツッコミはなしで。
import tornado.httpserver import tornado.ioloop import tornado.options import tornado.web from tornado.options import define, options define("port", default=8000, help="run on the given port", type=int) class IndexHandler(tornado.web.RequestHandler): def get(self): greeting = self.get_argument('argument', 'Hello') self.write(greeting + ', Titanium!') if __name__ == "__main__": tornado.options.parse_command_line() app = tornado.web.Application(handlers=[(r"/", IndexHandler)]) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(options.port) tornado.ioloop.IOLoop.instance().start()
・実行します
python hello.py --port=8000
ブラウザではこうアクセスして見えます。
GETパラメータなし
GETパラメータあり
◯Titaniumのコードです
・Resources/app.js
var tabGroup = Ti.UI.createTabGroup(); var win1 = Ti.UI.createWindow({ title: 'win 1', backgroundColor: 'blue' }); var data = [ {title:'Tornado Test', hasChild:true, dest:'album.js'}, ]; var table = Ti.UI.createTableView({ data: data }); table.addEventListener('click', function(e){ if (e.rowData.hasChild) { var w = Ti.UI.createWindow({ url: e.rowData.dest, title: e.rowData.title, backgroundColor: 'white' }); tab.open(w); // call back } }); var view = Ti.UI.createView(); view.add(table); win1.add(view); var tab = Ti.UI.createTab({ icon: 'KS_nav_views.png', title: 'Tab 1', window: win1 }); tabGroup.addTab(tab); tabGroup.open(); Ti.API.info(tabGroup.tabs[0].title);
・Resources/album.js
var view = Ti.UI.createView(); var label = Ti.UI.createLabel({ color: '#F00', text: 'album', height: 32, width: 150, top: 120 }); // from server var xhr = Titanium.Network.createHTTPClient(); var myURL = 'http://localhost:8000/?argument='; var param = 'ひきすう'; // 第1引数はHTTP Method // 第2引数はURIです。 xhr.open('GET', myURL +param); xhr.onload = function() { label.text = xhr.responseText; } // リクエスト送信します。(引数としてJSON値を入れるとパラメータ化される) xhr.send(); // 必須 view.add(label); Ti.UI.currentWindow.add(label);
今後これを応用すれば、いろいろ作れると思います。今回はあくまで基本です。
TitaniumのAdvent CalenderではないのにPythonのコードより長いのは気のせいです、すみません。
それでは次回15日は@jbkingさんお願いします。