paloma blog

NWエンジニアやってます。主に自宅環境のお遊びを書きます。Pythonもちょっと。タイトルは好きなカクテルから。

pythonでAndroidの野良アプリを作りたい1 kivyで作成編

pythonでちょろちょろツールを作っていますが、コマンドラインのものばかりなのでGUIアプリみたいなものも作ってみたくなりました。

ちょっと前にpygameでポーカーアプリに挑戦しましたが、処理で頓挫しているのでこれは置いておいて、映画情報投稿ツールの方をアプリ化したいと思います。
こっちはAPI取得とテキスト処理だけなのでGUI化も簡単そうです。

GitHub - masashi69/movietweet: 映画情報をツイート

せっかくなら自作apkファイルを作成を目指して進めます。

kivy

Androidアプリを作るにはkivyというフレームワークがナレッジが多かったです。

kivy.org

スマホで動かすにはkivy Launcherというアプリ経由でも使えるのですが、apkファイルを作りたいのでビルドツールであるbuildozerを使います。(こちらは次回)

コード

githubにアップロードしました。
5月から書き始めてさぼりさぼり作っていましたが、ようやくプロトタイプ的なものができました。

github.com

主な処理はmainの方に書いてデザイン系はkivy languageでまとめることにしました。

また、リポジトリには保存してませんが、過去に作成したmovietweetをモジュールとして使用しています。

  1. 映画情報のpost
  2. postした映画タイトルのget

が主な機能ですが、今の段階では2つめの機能しかkivyで作り込めていません。

動かしてみる

動かすとこんな感じです。

(kivy) masashi@PC-ubuntu:~/movietweetapp_for_android$ python main.py 

起動直後のいわゆるメニュー画面です。

GET infoでツイートの取得画面に映ります。

ツイートした年を入力してsubmitすると私が投稿した視聴タイトルがずらっと表示されます。
画像で撮ってませんがスクロールもできますよ。

ちょうど昨日見たソプラノズも取得できてますね。

こっちは未完成のpost画面。柄だけです。

詰まったところ

未完成の状態ではありますが上記の処理をさせるだけでも結構つまりました。

  1. 自作ライブラリのインポート
    APIキーや関数等自作ライブラリをファイル内でimportしあっているのですが、Not foundになったり少しハマりました。
    pythonのpath関連をググって解決。
  2. モジュールからコマンドライン引数処理を行う
    これは以前の記事で解決。
    pythonでコマンドライン用の引数処理をモジュールから使う - paloma blog
  3. 戻り値を別のクラスへ渡す
    post、getを分けられるようマルチウィンドウとして作ったのですが、kivyの仕様でウィンドウ毎に別のクラスになります。
    getした情報を別のクラスに渡す方法がどうしてもできず、1画面で完結させることにしました。
    本当はgetinfoしてから別の画面いっぱいに情報を出したかったのですが諦めました。
    postも同じ感じになりそうです。
    とりあえず動くものを作りながら継続調査ですね。

まとめ

一応アプリっぽく動くところまで作りました。
デザインはそんなに凝るつもりはありませんがもう少し見栄えをよくしたいところです。
いったん仮完成ということで次回buildozerでapkファイルを作ってみたいと思います。