Day 28 Chatbot integration- 汇率预测小工具

Chatbot integration- 汇率预测小工具

丑话先说在前头,模型虽然可以达到一定程度准确,但你要拿来 ALL IN 炒汇,输赢可不甘我的事啊!我只是觉得这麽做很有趣而已。这边会分成两个部分来执行,第一是取得当下汇率资讯,第二是预测隔天汇率的收盘价。为了避免太过於混乱,我先在 chatbot 实现这两个功能。

上传 config

这篇文章只针对之前几篇在 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.txtapplication.py,记得git push到 Azure machine learning。

嫌打字太麻烦?制作图文选单吧~

为了查个汇率还要输入 "currency" ,有时候还会拼错,我用手机打字也不快。这时候就会需要使用 Line 的图文选单,让我们可以直接点击按钮,就得到结果,再也不需要打字了!

  • 首先,先进入:https://manager.line.biz/
  • 点选自己的 chatbot 帐号
  • 聊天室相关底下,有个图文选单
  • 点击建立之後,接着就能针对版型、图片和动作进行编辑,以下以我的情况为例:
    • 点选选择版型,选择两个框框就好,我只需要 currency 和 prediction。
    • 点选建立图片,可以选择每个框的图片,可以自行上传,或者写个字就好。
    • 动作方面,有 A 和 B ,类型都选择文字,内容分别是 currency 和 prediction,之後点选图案就是会直接送出文字,来触发 chatbot 提供汇率或预测结果。

做完之後,就会得到以下的效果:


利用 Azure 的各种服务之後,我们做到了看图学英文、韩文翻译机器人、人脸登入和预测汇率的工具,但都还是零散着做,所以,下一篇文章,要来想办法把这些功能全部整合起来。(谜之声:这个不难吧?只要加在一起做撒尿牛丸就好了...)

嗯~~原本我也觉得不难,但还是踩了雷,有些小地方要注意......。下一篇,决战大魔王吧!


<<:  Day21-"排序、搜寻介绍"

>>:  [DAY 13]Discord频道对话文字云分析

JavaScript Document Object

Document Object 我们知道 DOM 是 Document Object Model(文...

30天零负担轻松学会制作APP介面及设计【DAY 06】

大家好,我是YIYI,今天要来聊聊我想制作的APP的规格表。 动机与目的 如同【DAY 02】所说,...

Day 22 盘点资料敏感度实作

今天持续将产品设定为以居家室内的IP cam为范例,盘点个端传输的所有资料处置,并给予资料敏感度分类...

Day 1 - [绪论] 长照小帮手的背景与动机

大家好,其实这个长照小帮手是我的论文题目,所以这系列的多文章,会有一大部分来自简化的论文内容,再加上...

[Golang]slice介绍与心智图

slice与array的差异。 类型的差异 array属於值类型,同属於值类型的包含,基础数据类型、...