PythonでGUIやるならTitaniumがよさそう ~ Twitterクライアント作ってみた
この記事読んで以来、ずっとTitaniumをいじっていました
Ruby,Python,PHP,JavaScriptでマルチプラットフォームなデスクトップアプリを簡単に作成する Appcelerator Titanium Desktop - 仙台 Rails Vim JavaScript社長
Titanium Desktopの何がすごいって、Webkitベースなのでhtml/css/javascriptのweb標準技術が使えて、さらにはKrollというライブラリがそれぞれの言語の仲立ちをし、名前空間を共有しそれぞれのライブラリを呼び出せるそうな。なにそれきもい。
僕は完全に が使えるwebkitとしか見てなくて、GUIライブラリが貧弱なPythonだと、十分有力な選択肢に入ると思われます。一度作ったものはクロスブラウザで使えるし。
簡単なTwitterクライアントを作ってみた
あっさりできました。ここにおいてるのは簡易版で、いろいろ機能を追加してる開発板はgithubに置いてます
mizchi's twaan at master - GitHub
ちなみに Titanium固有のAPIは全く使ってません。ファイルアクセスとか、pythonからやればいいじゃない。
要:twitter-python simplejson
python-twitter - Project Hosting on Google Code
tw.py
#encoding:utf-8 import twitter localStorage.id="your_twitter_username" localStorage.password="your_password" tw=twitter.Api(localStorage.id,localStorage.password) id_last_tl=0 twul = document.getElementById("twitter") def update(): tl = tw.GetFriendsTimeline(count=150,since_id=_id_last_tl) for i in tl[::-1]: node=document.createElement("li") node.innerHTML=u'<img src="%s"/><span>%s</span><span>%s</span>' %(i.user.profile_image_url,i.user.screen_name,i.text) twul.insertBefore(node,twul.firstChild) global _id_last_tl _id_last_tl=tl[0].id
index.html
<!DOCTYPE html> <html> <head> <script type="text/python" src="tw.py" /> </head> <body> <button onclick="update()">更新</button> <ul id="twitter" /> </body> </html>
配置はこう
Resources - index.html - tw.py - twitter.py - simplejson
行儀がいい書き方かわからないのですが、Pythonから縦横無尽にjsの関数を呼び出してDOMを叩いています。
localStorageの保存先は Macだと /Library/Application\ Support/Titanium/プロジェクト とかどこか。
何ができるかはソースで雰囲気はわかると思います。
欠点
- 別言語のオブジェクトを参照するときの挙動がいまいちわからない
- ドキュメントが整理されてない
- 日本語での情報が極端に少ない
参考:Appcelerator Codestrong - Titanium Desktop APIs
そういえばpythonから canvasのコンテキストをとってこれなかった
次の式で getContextがないと言われる
ctx = document.getElementById('main').getContext('2d')