Python 使用Django解析数据的Alpha Vantage API

Python 使用Django解析数据的Alpha Vantage API,python,django,web-applications,alpha-vantage,Python,Django,Web Applications,Alpha Vantage,我正在使用django框架构建某种股票市场Web应用程序。我从Alpha Vantage API获取数据,在解析所需数据时遇到了问题 1-我可以成功调用API,但在尝试获取所需数据时总是出现错误,请参见我在views.py上使用的代码: def home(request): import requests import json import pandas as pd from alpha_vantage.timeseries import TimeSeries url = "h

我正在使用django框架构建某种股票市场Web应用程序。我从Alpha Vantage API获取数据,在解析所需数据时遇到了问题

1-我可以成功调用API,但在尝试获取所需数据时总是出现错误,请参见我在
views.py上使用的代码:

def home(request):

import requests
import json
import pandas as pd
from alpha_vantage.timeseries import TimeSeries


url = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=B3SA3.SA&outputsize=compact&apikey=XXX"

api_request = requests.post("GET", url)

try:
    api = api_request.content.json()

except Exception as e:
    api="Erro, tente novamente"

return render(request,'home.html', {'api': api})
home.html
上,我正在使用此代码显示信息还是错误:

{% if api %}

    {% if api == "Erro, tente novamente."%}
        Houve um problema com a busca da ação, tente novamente.

    {% else %}
        {% for key,value in api.items %}
            {{key}}: {{value}}<br/>

        {%endfor%}

    {% endif %}

{% endif %}
{%if api%}
{%if-api==“Erro,tente novatemente.”%}
我们的问题就在这里,在新的世界里。
{%else%}
{键为%,api.items%中的值为}
{{key}}:{{value}}
{%endfor%} {%endif%} {%endif%}
通过这段代码,我得到了以下内容,正如您所看到的,有两个单独的字典元数据时间序列(每日)

{“元数据”:{1.信息:'Daily Time Series with Splits and Distribution Events','2.符号':'B3SA3.SA','3.上次刷新':'2020-07-10','4.输出大小':'Compact','5.时区':'US/Eastern'},'Time Series(Daily):{'2020-07-10':{'1.开盘':'58.8000','2.高':'59.9800','3.低':'57.6000','4.收盘':'59.9500','5.调整后收盘':'59.9500','6.成交量':'7989500','7.股息金额':'0.0000','8.分割系数':'1.0000','2020-07-09':{'1.开盘':'60.9700','2.高':'60.9700','3.低':'58.4400','4.收盘':'58.8900','5.调整后收盘':'58.8900','6.成交量':'13494000','7.股息金额':'0.0000','8.分割系数':'1.0000','2020-07-08':{'1.开盘':'57.6100','2.高':'60.8900','3.低':'57.2300','4.收盘':'60.6500','5.调整后收盘':'60.6500','6.成交量':'13847100','7.股息金额':'0.0000','8.分割系数':'1.0000','2020-07-07':{'1.开盘':'56.5500','2.高':'57.6000','3.低':'56.2500','4.收盘':'57.1700','5.调整后收盘':'57.1700','6.成交量':'9038800','7.股息金额':'0.0000','8.分割系数':'1.0000'}

我只是尝试获取'Time Series(Daily)并将其解析为数据帧,但在尝试调用'Time Series(Daily)字典时,总是会出错

你们知道我可能做错了什么吗?
提前感谢大家!

由于您没有访问“Time Series Daily()”键,导致了您的错误

现在,如果您想将这些数据解析成熊猫,可以在DataFrame类中使用from_dict方法。请参见下面的示例

import pandas as pd

api = {'Meta Data': {'1. Information': 'Daily Time Series with Splits and Dividend Events', '2. Symbol': 'B3SA3.SA', '3. Last Refreshed': '2020-07-10', '4. Output Size': 'Compact', '5. Time Zone': 'US/Eastern'}, 'Time Series (Daily)': {'2020-07-10': {'1. open': '58.8000', '2. high': '59.9800', '3. low': '57.6000', '4. close': '59.9500', '5. adjusted close': '59.9500', '6. volume': '7989500', '7. dividend amount': '0.0000', '8. split coefficient': '1.0000'}, '2020-07-09': {'1. open': '60.9700', '2. high': '60.9700', '3. low': '58.4400', '4. close': '58.8900', '5. adjusted close': '58.8900', '6. volume': '13494000', '7. dividend amount': '0.0000', '8. split coefficient': '1.0000'}, '2020-07-08': {'1. open': '57.6100', '2. high': '60.8900', '3. low': '57.2300', '4. close': '60.6500', '5. adjusted close': '60.6500', '6. volume': '13847100', '7. dividend amount': '0.0000', '8. split coefficient': '1.0000'}, '2020-07-07': {'1. open': '56.5500', '2. high': '57.6000', '3. low': '56.2500', '4. close': '57.1700', '5. adjusted close': '57.1700', '6. volume': '9038800', '7. dividend amount': '0.0000', '8. split coefficient': '1.0000'}}}

time_series = api["Time Series (Daily)"]

# this will create a dataframe with the Dates and close prices.
# it first sets the date as the index then resets the index so that the date becomes its own column
df = pd.DataFrame.from_dict(time_series, orient="index", columns=["4. close"]).reset_index()
renamed_headers = {"index": "Date", "4. close": "Close Price"}
df = df.rename(columns=renamed_headers)

# this makes sure that your close prices are numeric.
df["Close Price"] = pd.to_numeric(df["Close Price"])
print(df)
编辑 您的问题的解决方案如下:

德扬戈

# Its good practice to have imports at the top of script.
import requests
import json
import pandas as pd
from alpha_vantage.timeseries import TimeSeries

# We will create an object and store data from alpha vantage inside this object
from collections import namedtuple 



def home(request):    
    url = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED&symbol=B3SA3.SA&outputsize=compact&apikey=XXX"

    api_request = requests.post("GET", url)

    # this is our object that will contain the date and close price data
    Security_Data = namedtuple("SecurityData", ["Date", "ClosePrice"])

    # this is a list of Security_Data objects.
    all_data = []

    try:
        api = api_request.content.json()
    except Exception as e:  # It's bad practice to capture a bare exception
        api = None

    if api is not None:
        time_series = api["Time Series (Daily)"]
        for time, prices in time_series.items():
            data = Security_Data(time, prices["4. close"])
            all_data.append(data)

return render(request, 'home.html', {'all_data': all_data})
在home.html中

{% if len(all_data) == 0 %}
    Houve um problema com a busca da ação, tente novamente.

{% else %}
    {% for data in all_data %}
        {{data.Date}}: {{data.ClosePrice}}<br/>

    {%endfor%}

{% endif %}
{%if len(所有_数据)==0%}
我们的问题就在这里,在新的世界里。
{%else%}
{所有_数据%中的数据为%}
{{data.Date}}:{{data.ClosePrice}}
{%endfor%} {%endif%}
感谢您的支持@RamWill!它工作得非常好!
{% if len(all_data) == 0 %}
    Houve um problema com a busca da ação, tente novamente.

{% else %}
    {% for data in all_data %}
        {{data.Date}}: {{data.ClosePrice}}<br/>

    {%endfor%}

{% endif %}