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のスタート画面の最上部のアイコン→プロジェクトのアイコンをタップで実行できます。