ページの見た目をいろいろやっていたが、ちょっと疲れたので気分を変えて別のことに挑戦
Flaskを使ってテキストボックスの入力をPythonに送り、ここでFEEの返事を生成し、CeVIOに送り音声を出すと同時に、ページに文字として表示する必要がある
まずはここを参考にしてみた
全部コピペ。動いた!入力文字にPythonで文字を追加してみた。OK。
が、しかし
どうもこの方法はいまいちっぽい
もしかしたらやり方はあるのかもしれないが、htmlのページにリフレッシュがかかってしまう
そうなると通信が途切れてチャットも消去してしまう
コードを見るとjavascript上ではデータが存在しているので、
javascript→Pythonというダイレクトな経路のほうがよさそうだ
とすると、Ajaxが楽そう
ここまでは簡単
ここからが大変
これが超簡単なので、じっくりと検討
まずはjavascript側
$(function(){
$.ajax({
url: "test.py",
type: 'POST',
data: '送信メッセージ'
}).done(function(data){
messages.textContent += 'ajax done\n';
messages.textContent += data;
}).fail(function(){
messages.textContent += 'ajax failed\n';
});
});
URLに間違ったファイル名を入れるとajax failedが表示されるので、動いているっぽい
このまま動作させると、
=== talk client joined ===
FEE: あ
ajax done
#!C:/Python310/python.exe
# -*- coding: utf-8 -*-
import sys
recieve = sys.stdin.readline()
recieve = recieve + "OK!"
print('Content-type: text/html\n')
print(recieve)
というように、test.pyのコードがそのまま表示される
これはつまり、通信していると言える!
あとは、test.pyがデータを受け取って吐き出せばOKのはず
で再び検索の鬼と化して見つけたのがこれ
https.confの設定が必要だって?
だまされたと思ってやってみたら
=== talk client joined ===
FEE: テスト
ajax done
送信メッセージOK!
おおおお!感動!
だが、まだ問題は続く
Python側で日本語で返信を書くとhtml側が文字化けするのと、
固定メッセージをやめてテキストボックス入力にすると、データがなくなる
後者はいったん別の変数で受けてみたら直った(よくわからん)
文字化けは文字化けテスターで確認すると
utf-8がshift-jisになっている
ajaxでテキスト伝送をする前後でutf-8→shift-jis→utf-8となっているっぽい
なので、Pythonでの文字書き出しをshift-jisに、Python内での文字をshift-jisに変換すると、全部まるく収まる
とりあえずこれでしのごう
Comentarios