DAY15 - 第四个小范例 : Line股价机器人

前言

今天是铁人赛的第十五天,终於要把前两天的爬虫程序整合到LineBot了
Imgur

再次说明:这里不是手把手程序教学,所以不会有程序解说

这次的范例,可以直接延续第11天的范例接着做下去
只会动到两只档案,要注意python的虚拟环境里是否有安装 yfinance 这个套件

准备好的话就开始动工吧 (复制贴上)

编辑的档案 myapp/view.py

from django.conf import settings
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from linebot import LineBotApi, WebhookParser
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage
from module import func

line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)
parser = WebhookParser(settings.LINE_CHANNEL_SECRET)

#
@csrf_exempt
def callback(request):
    if request.method == 'POST':
        signature = request.META['HTTP_X_LINE_SIGNATURE']
        body = request.body.decode('utf-8')

        try:
            events = parser.parse(body, signature)
        except InvalidSignatureError:
            return HttpResponseForbidden()
        except LineBotApiError:
            return HttpResponseBadRequest()

        #这次修改的程序码 开始
        for event in events:
            if isinstance(event, MessageEvent):
                #mtext = 使用者输入的字串
                mtext = event.message.text
                if mtext == '@help':
                    func.sendUse(event)
                else:
                    func.sendScrachStock(event, mtext)
        #这次修改的程序码 结束

        return HttpResponse()
    else:
        return HttpResponseBadRequest()

编辑的档案 module/func.py

from django.conf import settings
from linebot import LineBotApi
from linebot.models import TextSendMessage, ImageSendMessage
import requests
import pandas as pd
import os,io
import datetime
import time
import sqlite3
import glob
import matplotlib.pyplot as plt
import numpy as np
#抓股价的套件
import yfinance as yf

line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)

def sendUse(event):
    try:
        text1='''这是提供台股与美股数据的机器人'''

        message=TextSendMessage(
            text=text1
        )
        line_bot_api.reply_message(event.reply_token, message)
    except:
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text='发生错误!'))


def sendScrachStock(event,mtext):
    try:
        
        #新版
        #股票代号
        stock_no= mtext.upper()
        #起始日期
        start_date='2021-01-01'
        #下载资料
        df=yf.download(stock_no,start=start_date)
        #最新5笔资料
        result=df.tail()
     
        text1='查询 {0} 股票资料 \n {1}'.format(mtext.upper(),result)
        message = [
            TextSendMessage(  
                text = text1
            )
        ]
        line_bot_api.reply_message(event.reply_token, message)
    except Exception as e:
        line_bot_api.reply_message(event.reply_token,TextSendMessage(text='发生错误! \n {0}'.format(e)))

成果图:

输入 @help
Imgur
查台股
Imgur
查美股
Imgur

下载本篇的范例程序码 (使用git clone)

git clone https://[email protected]/smilehsu/mylinebotv2.git

以上就是铁人赛第15天的内容 :)


<<:  DAY13支持向量机演算法(续二)

>>:  【Day 12】卑鄙源之 Hook (下) - 侦测 Hook

Day30 Redux基础练习

以下用to do list作为练习。 Actions Action是一般的JavaScript物件。...

[Day 28] 建立 migration 时使用的套件,来谈谈 Flyway

昨天我们提到了建立 connection pool 时所使用的套件 HikariCP 今天,我们来谈...

Day 19 - 语音情绪辨识简介

语言除了能够传达字面上的讯息之外,也蕴含了说话者所要表达的情绪,情绪的展现能够让对方更清楚的了解讯息...

爬虫怎麽爬 从零开始的爬虫自学 DAY17 python爬虫所需套件

前言 各位早安,书接上回我们简单介绍过 html 基本架构了,从今天开始要正式开始实作爬虫程序的部分...

[30天 Vue学好学满 DAY3] 专案建置&除错套件

前置作业安装 node vue vue-cli vue-cli(Vue.js Command-Lin...