Twilio API で動作する Python でクイズ ゲームを作成したので、SMS を介して Twilio 番号にゲームを実行できます。送信側の電話で受信したときに標準のテキストと絵文字を表示する応答を渡す方法を理解しようとしています。
私は、Unicode と ascii 文字セットの理解、および utf-8 でのエンコードとデコードに取り組んできました。私が最後にたどり着いたのは、携帯電話の通常の文字列のように Unicode コード ポイントを出力する次のコードです。ギャップは、電話が解釈できるコード ポイントを分離して渡す方法にあるようです。これを行う方法に関するアイデアや指針はありますか? または、誰かが推奨する別のアプローチはありますか?
コードの現在の状態は次のとおりです。
# -*- coding: utf-8 -*-
from flask import render_template, flash, redirect, session, url_for, request, jsonify, g
from flask import Response
from app import app
from config import TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN
from twilio import twiml
from twilio.rest import TwilioRestClient
import re, random
client = TwilioRestClient(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN)
def simplify_txt(submitted_txt):
response_letters = re.sub(r'\W+', '', submitted_txt)
return response_letters.lower()
@app.route("/quiz_game")
def quiz_game():
response = twiml.Response()
from_number = str(request.values.get('From', None))
body = request.values.get('Body', None)
simplify_body = simplify_txt(body)
questions = {
0: "What word is shorter when you add two letters to it?",
1: "If I drink, I die. If i eat, I am fine. What am I?",
2: "What kind of tree is carried in your hand?",
3: "Thanks for playing.",
4: ""
}
# Stripped down answers to compare to text in case multiple word answer
simplify_answers = {
1:"short",
2:"fire",
3:"palm",
4:""
}
# Pretty print answers
print_answers = {
1:"short",
2:"fire",
3:"palm",
4:""
}
# if from_number not in track_user:
if from_number not in session:
session[from_number] = 0
counter = session.get('counter', 0)
counter += 1
session['counter'] = counter
message = "Shall we play a game? %s " % questions[0]
else:
game_round = session['counter']
if simplify_answers[game_round] == simplify_body:
session[from_number] += 10
score = session[from_number]
message = "Correct Answer. You have %d points out of 30. %s" % (score, questions[game_round])
message += unicode('u1f31f',"unicode_escape").encode('utf-8')
else:
score = session[from_number]
message = "Wrong answer. We were looking for %s. Your score is %d out of 30. %s" % (print_answers[game_round], score, questions[game_round])
session['counter'] += 1
if session['counter'] > 3:
session.pop(from_number, None)
session['counter'] = 0
response.sms(message)
return Response(str(response))
更新: 問題の一部は、メッセージ変数に sms メソッドを適用すると、Unicode コード ポイントを保持しない XML 形式に変換されました。messages.create メソッドを適用すると、モバイル デバイスで解釈できるように、Unicode コード ポイントがキャプチャおよび保存されます。
修正のために、私は Rob の推奨事項を主にコードの最後の 2 行に適用しました。response.sms と return を client.messages.create に置き換え、メッセージ変数を body パラメーターに渡しました。また、メッセージ変数に割り当てられたすべての文字列にユニコードの u を適用し、メッセージに絵文字コード ポイント/画像を追加しました。これらにより、テキストメッセージの絵文字が機能しました。アップデートを確認したい場合は、https ://github.com/nyghtowl/Twilio_Quiz を確認してください。