首页 > 解决方案 > Web 服务使用 python 查找股票的收盘价

问题描述

我正在尝试编写一个查找股票收盘价的网络服务。使用 Python Flask 或 Goland

● 为响应 GET 请求,该服务应返回最后 NDAYS 天的数据以及这些天的平均收盘价。例如,对于 aapl 和 NDAYS=3,GET 响应可能如下所示: ○ appl data=[110.56, 111.25, 115.78], average=112.50

● 股票 SYMBOL(要查找的符号)和 NDAYS(天数)是提供给程序的环境变量。我还需要使用 apikey 进行这样的示例查询,例如:

    "Meta Data": {
        "1. Information": "Daily Time Series with Splits and Dividend Events",
        "2. Symbol": "MSFT",
        "3. Last Refreshed": "2020-10-14",
        "4. Output Size": "Compact",
        "5. Time Zone": "US/Eastern"
    },
    "Time Series (Daily)": {
        "2020-10-14": {
            "1. open": "223.0000",
            "2. high": "224.2200",
            "3. low": "219.1300",
            "4. close": "220.8600",
            "5. adjusted close": "220.8600",
            "6. volume": "23422344",
            "7. dividend amount": "0.0000",
            "8. split coefficient": "1.0000"
        },
        "2020-10-13": {
            "1. open": "222.7200",
            "2. high": "225.2100",
            "3. low": "220.4300",
            "4. close": "222.8600",
            "5. adjusted close": "222.8600",
            "6. volume": "28950843",
            "7. dividend amount": "0.0000",
            "8. split coefficient": "1.0000"
        },
        "2020-10-12": {
            "1. open": "218.7900",
            "2. high": "223.8600",
            "3. low": "216.8100",
            "4. close": "221.4000",
            "5. adjusted close": "221.4000",
            "6. volume": "40461368",
            "7. dividend amount": "0.0000",
            "8. split coefficient": "1.0000"
        }

○ 不需要严格的错误处理。你可以假设存货存在,天数是有效的,等等。换句话说,这可能是一个快速而肮脏的程序——它不需要高度抛光。

到目前为止,我已经编写了这段代码,我不确定如何获取 3 天和平均时间,而不是如何将我的代码设置在 Web 服务器上,它不起作用,请帮忙。

from alpha_vantage.timeseries import TimeSeries
from flask import Flask, redirect, url_for
import json
import requests
import pandas as pd
  
app = Flask(__name__)

@app.route("/")
def home():
        return "Hello! This is the home page <h1>HELLO</h1>"

@app.route("/")
def user():

#Enter Key here
key = "mykey is here"
ts = TimeSeries(key)

aapl, meta = ts.get_daily(symbol= "AAPL")

print(aapl['2020-10-10'])

if __name__ == "__main__":
        app.run()

标签: pythonflask

解决方案


阅读您的要点,您似乎有一些应该遵循的指导方针。

首先,在现实世界的应用程序中构建它,您的 API 应该能够处理查询参数,例如http:/localhost:5000/api/[SYMBOL]?NDAYS=days. 在代码中将是这样的:

# You can pass query params
# /api/AAPL?NDAYS=3
@app.route("/api/<symbol>")
def user(symbol):
    # You can now get the query parameters with
    # request.args.to_dict()
    # {"NDAYS": "3"}
    

但是,由于声明 NDAYS 和 SYMBOL 是通过环境变量提供给您的,因此您需要先将它们加载到 Python 脚本中。

import os
@app.route('/average')
def get_average():
    stock = os.environ.get('SYMBOL')
    ndays = os.environ.get('NDAYS')
    # get the data from the JSON structure you are provided
    # and return it

推荐阅读