top of page

テキストボックスの内容をPythonに送る その1

執筆者の写真: snackvirtualsnackvirtual

ページの見た目をいろいろやっていたが、ちょっと疲れたので気分を変えて別のことに挑戦


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に変換すると、全部まるく収まる


とりあえずこれでしのごう

閲覧数:0回0件のコメント

最新記事

すべて表示

Comentarios


bottom of page