QPython WebApp/ラジオボタンからPythonスクリプトを呼び出し実行させるテスト
前回作ったQPythonWebAppを改造しました。
前回
QPython WebApp/選択したラジオボタンの値を表示するWebAppを作ってみる - よちよちpython
複数設置したラジオボタンのどれかを選んで決定ボタンを押すと、それぞれで設定したpythonスクリプトを呼び出して実行できます。
前回同様3つのラジオボタンからメニューを選んで動かします。
適当にやったら動いたんですけど、果たしてこんなやり方で正しいのかは分からないw
メインのメニュー
メニュー2を押すと…
ネット上のページからWebスクレイピングで日経平均株価を取得。
取得後に日経平均株価の表示に切り替わる
メニュー3を押すと…
目次
動作環境
作るファイル(6つ)
- QPythonWebAppスクリプト 「main.py」
- ラジオボタン設置用のhtmlテンプレート「radio_button.html」
- 値の表示用htmlテンプレート「show.html」
- メニュー1で呼び出す用pythonスクリプト「menu1.py」
- メニュー2で呼び出す用pythonスクリプト「menu2.py」
- メニュー3で呼び出す用pythonスクリプト「menu3.py」
menu1.pyは単純に値を返すだけの関数のファイル。
menu2.pyは日経新聞紙から平均株価をスクレイピングして来ます。ネットに接続して実行してください。
menu3は電話を起動させます。起動するだけです。掛ける場合は通話ボタンを押します。
上記6つのファイルは全てmain.pyと同じプロジェクトフォルダに保存して下さい。
.
├── main.py
├── menu1.py
├── menu2.py
├── menu3.py
├── radio_button.html
└── show.html
次はファイルを作って行きます。
説明は手抜きです。
作成
手順は前回とほぼ一緒。
「エディタ」→右上「+」ボタンから「WebApp」→「新規プロジェクト」
プロジェクトはフォルダです。
「qpython/projects3/プロジェクト名」のフォルダが新規作成され保存されます。
新規プロジェクト名を決めて「確認」ボタンをおしましたら、15行のmain.pyが自動作成され、画面上のエディタに表示されていると思いますので、まずはそれを改造していきます。
その他のファイルは
「エディタ」→右上「+」ボタン→「ファイル」で新規作成し、ファイル名をつけてプロジェクトフォルダに保存してください。
main.py
#-*-coding:utf8;-*- #qpy:3 #qpy:webapp #qpy://localhost:8080/ """ This is a sample for qpython webapp """ from bottle import route, run ,template ,request import os import sys, codecs from menu1 import menu1 from menu2 import menu2 from menu3 import menu3 os.chdir(os.path.dirname(os.path.abspath(__file__))) sys.stdout = codecs.getwriter("utf-8")(sys.stdout) @route('/') def post(): return template("radio_button") @route("/show" ,method="POST") def show(): contact = request.forms.contact text=check_value(contact) return template("show",contact=text) def check_value(contact): if contact=="メニュー1": return menu1() elif contact=="メニュー2": return menu2() else: contact="メニュー3" return menu3() run(host='localhost', port=8080, debug=True , reloader=True )
radio_button.html
<!DOCTYPE html> <html lang="ja"> <head> <title>メインメニュー</title> </head> <meta name="viewport" content="width=device-width"> <body> <form method="post" action="/show" accept-charset="utf-8"> <p>メニューを選んでね!</p> <div> <input type="radio" id="contactChoice1" name="contact" value="メニュー1" checked> <label for="contactChoice1">メニュー1 値を取得</label> <br> <input type="radio" id="contactChoice2" name="contact" value="メニュー2"> <label for="contactChoice2">メニュー2 平均株価取得</label> <br> <input type="radio" id="contactChoice3" name="contact" value="メニュー3"> <label for="contactChoice3">メニュー3 電話を起動</label> <br> <br> </div> <div> <button type="submit" document.charset='UTF-8'>決定</button> </div> </form> </body> </html>
show.html
<!DOCTYPE html> <html lang="ja"> <head> <title>表示</title> </head> <meta name="viewport" content="width=device-width"> <meta charset="utf-8"> <body> <h1>{{contact}}</h1> </body> </html>
menu1.py
def menu1(): return "menu1"
menu2.py
def menu2(): # 回転プログレスダイアログを出す import androidhelper import time droid = androidhelper.Android() droid.dialogCreateSpinnerProgress("日経新聞社に接続中", "しばらくお待ち下さい。") droid.dialogShow() time.sleep(2) # 日経平均株価の取得 import requests from bs4 import BeautifulSoup nikkei_heikin = "" url = 'https://www.nikkei.com/' html = requests.get(url) soup = BeautifulSoup(html.text,"html.parser") span = soup.find_all("span") for tag in span: try: string_ = tag.get("class").pop(0) if string_ in "m-miH01C_rate": nikkei_heikin = tag.string break except: pass droid.dialogDismiss() nikkei_heikin = "日経平均株価 " + nikkei_heikin + "円" return nikkei_heikin
menu3.py
import androidhelper def menu3(): Droid=androidhelper.Android() #()内に電話番号を入れる Droid.phoneDialNumber("117")
以上で6つのファイルが出来ました。
実行
実行も前回同様、プロジェクトフォルダのmain.pyをエディタで開いて、右向き三角の実行ボタンを押すか、
またはqpythonのスタート画面の最上部のアイコン→プロジェクトのアイコンをタップで実行できます。