よちよちpython

独習 python/Qpython/Pydroid3/termux/Linux

QPython WebApp/ラジオボタンからPythonスクリプトを呼び出し実行させるテスト

前回作ったQPythonWebAppを改造しました。
前回
QPython WebApp/選択したラジオボタンの値を表示するWebAppを作ってみる - よちよちpython

複数設置したラジオボタンのどれかを選んで決定ボタンを押すと、それぞれで設定したpythonスクリプトを呼び出して実行できます。
前回同様3つのラジオボタンからメニューを選んで動かします。

適当にやったら動いたんですけど、果たしてこんなやり方で正しいのかは分からないw

メインのメニュー f:id:chayarokurokuro:20190627195731j:plain

メニュー2を押すと…

f:id:chayarokurokuro:20190627195929j:plain
ネット上のページからWebスクレイピング日経平均株価を取得。

取得後に日経平均株価の表示に切り替わる

f:id:chayarokurokuro:20190627200145j:plain

メニュー3を押すと…

f:id:chayarokurokuro:20190627200510j:plain


目次


動作環境

Androidスマホ
QPython3


作るファイル(6つ)

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>

def menu1():
    return "menu1"

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

import androidhelper

def menu3():
    Droid=androidhelper.Android()
    #()内に電話番号を入れる
    Droid.phoneDialNumber("117")

以上で6つのファイルが出来ました。


実行

実行も前回同様、プロジェクトフォルダのmain.pyをエディタで開いて、右向き三角の実行ボタンを押すか、

またはqpythonのスタート画面の最上部のアイコン→プロジェクトのアイコンをタップで実行できます。