iT邦幫忙

2023 iThome 鐵人賽

DAY 28
0
AI & Data

已 django + channels 來取得即時股價資料的推播系列 第 28

[Day 28] 實戰應用 - 聊天機器人 - 漲幅排行榜(上)

  • 分享至 

  • xImage
  •  

設計分析

  1. 想法
    • 聊天室名稱 = ranking, (不使用商品代碼)
    • 每1分鐘取得即時排行
  2. 調查
    • REST API取得股票漲跌幅排行(依市場別)參考

建立查詢

#chat/fugle.py
import time

from fugle_marketdata import WebSocketClient, RestClient
import asyncio
from asgiref.sync import async_to_sync, sync_to_async
import channels.layers
import django, sys
from os.path import join, dirname, abspath
from os import environ
from datetime import datetime


# ---------------------- django setting --------------------------
PROJECT_DIR = dirname(dirname(abspath(__file__)))
sys.path.insert(0, PROJECT_DIR)

#  Set the correct path to you settings module
environ.setdefault("DJANGO_SETTINGS_MODULE", "django_channels.settings")

# All django stuff has to come after the setup:
django.setup()

# ---------------------- django setting --------------------------
channel_layer = channels.layers.get_channel_layer()

YOUR_API_KEY = 'xxx'

from chat.models import Quote
async def main():
    from fugle_marketdata import RestClient

    client = RestClient(api_key=YOUR_API_KEY)
    stock = client.stock
    while True:
        data = stock.snapshot.movers(market='TSE', direction='up', change='percent')
        await channel_layer.group_send("chat_ranking", {'type': 'ranking.message', "message": data})
        time.sleep(10)

if __name__ == '__main__':
    asyncio.run(main())

上述使用參數=TSE 的方式查詢,所以回應的也是屬於 TSE的排行

搭配下一天的範例則可以看到效果

牛刀小試

  • 查詢其他市場別的排行

上一篇
[Day 27] 實戰應用 - 聊天機器人 - 今日收盤行情(下)
下一篇
[Day 29] 實戰應用 - 聊天機器人 - 漲幅排行榜(下)
系列文
已 django + channels 來取得即時股價資料的推播30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言