丑话先说在前头,模型虽然可以达到一定程度准确,但你要拿来 ALL IN 炒汇,输赢可不甘我的事啊!我只是觉得这麽做很有趣而已。这边会分成两个部分来执行,第一是取得当下汇率资讯,第二是预测隔天汇率的收盘价。为了避免太过於混乱,我先在 chatbot 实现这两个功能。
这篇文章只针对之前几篇在 Azure machine learning 所做出来的汇率预测服务,所以只需要把之前部署在workspce
的服务连结,放进去config.json
,再上传到 Azure Web App 就可以了。记得config.json
直接用scp
上传到/home
,或者直接ssh
连进 Azure Web App 编辑。
config.json
{
"line": {
"line_secret": "your line secret",
"line_token": "your line token",
},
"azure": {
"azureml_endpoint": "your endpoint url of service on azure service",
}
Python
套件Flask==1.0.2
line-bot-sdk
investpy
requests
import json
import requests
from flask import Flask, request, abort
from linebot import LineBotApi, WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import (
MessageEvent,
TextMessage,
TextSendMessage,
)
import investpy
app = Flask(__name__)
CONFIG = json.load(open("/home/config.json", "r"))
ML_URL = CONFIG["azure"]["azureml_endpoint"]
LINE_SECRET = CONFIG["line"]["line_secret"]
LINE_TOKEN = CONFIG["line"]["line_token"]
LINE_BOT = LineBotApi(LINE_TOKEN)
HANDLER = WebhookHandler(LINE_SECRET)
@app.route("/")
def hello():
"hello world"
return "Hello World!!!!!"
@app.route("/callback", methods=["POST"])
def callback():
"""
LINE bot webhook callback
"""
# get X-Line-Signature header value
signature = request.headers["X-Line-Signature"]
print(signature)
body = request.get_data(as_text=True)
print(body)
try:
HANDLER.handle(body, signature)
except InvalidSignatureError:
print(
"Invalid signature. Please check your channel access token/channel secret."
)
abort(400)
return "OK"
@HANDLER.add(MessageEvent, message=TextMessage)
def handle_message(event):
"""
Reply text message
"""
# 如果使用手机输入英文,常常会自动补齐,然後再加上" ",所以会特地把空白去掉
# 除了补齐以外,还会自动帮字首大写,所以这边乾脆都弄成小写
text = event.message.text.replace(" ", "").lower()
# 第一个功能:如果使用者对 chatbot 传送 "currency",便从 investing.com 取得台币对美金的汇率
if text == "currency":
recent = investpy.get_currency_cross_recent_data("USD/TWD")
message = TextSendMessage(text=recent.Close.values[-1])
# 第二个功能:如果使用者对 chatbot 传送 "prediction",不但取得汇率资讯,同时也我们自己部署的服务取得预测结果
elif text == "prediction":
recent = investpy.get_currency_cross_recent_data("USD/TWD")
data = {"data": ""}
input_data = json.dumps(data)
headers = {"Content-Type": "application/json"}
resp = requests.post(ML_URL, input_data, headers=headers)
message = TextSendMessage(
text="Current currency: {}\nPrediction for Next day: {}".format(
recent.Close.values[-1], round(float(resp.text), 2)
)
)
else:
message = TextSendMessage(text=event.message.text)
LINE_BOT.reply_message(event.reply_token, message)
准备好requirements.txt
和application.py
,记得git push
到 Azure machine learning。
为了查个汇率还要输入 "currency" ,有时候还会拼错,我用手机打字也不快。这时候就会需要使用 Line 的图文选单,让我们可以直接点击按钮,就得到结果,再也不需要打字了!
聊天室相关
底下,有个图文选单
选择版型
,选择两个框框就好,我只需要 currency 和 prediction。建立图片
,可以选择每个框的图片,可以自行上传,或者写个字就好。动作
方面,有 A 和 B ,类型都选择文字,内容分别是 currency 和 prediction,之後点选图案就是会直接送出文字,来触发 chatbot 提供汇率或预测结果。做完之後,就会得到以下的效果:
利用 Azure 的各种服务之後,我们做到了看图学英文、韩文翻译机器人、人脸登入和预测汇率的工具,但都还是零散着做,所以,下一篇文章,要来想办法把这些功能全部整合起来。(谜之声:这个不难吧?只要加在一起做撒尿牛丸就好了...)
嗯~~原本我也觉得不难,但还是踩了雷,有些小地方要注意......。下一篇,决战大魔王吧!
Document Object 我们知道 DOM 是 Document Object Model(文...
大家好,我是YIYI,今天要来聊聊我想制作的APP的规格表。 动机与目的 如同【DAY 02】所说,...
今天持续将产品设定为以居家室内的IP cam为范例,盘点个端传输的所有资料处置,并给予资料敏感度分类...
大家好,其实这个长照小帮手是我的论文题目,所以这系列的多文章,会有一大部分来自简化的论文内容,再加上...
slice与array的差异。 类型的差异 array属於值类型,同属於值类型的包含,基础数据类型、...