Spaces:
Runtime error
Runtime error
import requests | |
import json | |
from datetime import date, datetime, timedelta | |
import os | |
from ..tool import Tool | |
def build_tool(config) -> Tool: | |
tool = Tool( | |
"Stock Info", | |
"Look up stock information", | |
name_for_model="Stock", | |
description_for_model="Plugin for look up stock information", | |
logo_url="https://your-app-url.com/.well-known/logo.png", | |
contact_email="[email protected]", | |
legal_info_url="[email protected]", | |
) | |
functions = [ | |
"TIME_SERIES_INTRADAY", | |
"TIME_SERIES_INTRADAY_EXTENDED", | |
"TIME_SERIES_DAILY", | |
"TIME_SERIES_DAILY_ADJUSTED", | |
] | |
types = ["open", "close", "high", "low"] | |
KEY = config["subscription_key"] | |
BASE_URL = "https://www.alphavantage.co/query?" | |
def get_json_data( | |
function, | |
symbol, | |
interval="5min", | |
adjusted="true", | |
outputsize="compact", | |
datatype="json", | |
): | |
url = BASE_URL + "function=" + function + "&symbol=" + symbol + "&apikey=" + KEY | |
r = requests.get(url) | |
data = json.loads(r.text) | |
return data | |
def get_today_date(): | |
"""Get today's date""" | |
today = date.today() | |
return today.strftime("%Y-%m-%d") | |
def add_date(date: str, days: int): | |
"""Add days to a date. Date should be pass as 'yyyy-mm-dd'.""" | |
date = datetime.strptime(date, "%Y-%m-%d") | |
new_date = date + timedelta(days=days) | |
return new_date.strftime("%Y-%m-%d") | |
def get_daily_prices(symbol: str, date: str = ""): | |
"""Get the stock price of an entity in the stock market. Date should be pass as 'yyyy-mm-dd'.""" | |
if "," in symbol: | |
symbol, date = symbol.split(",") | |
if date.strip() == "": | |
return "Please specify a date and try again. You can you get_today_date to up-to-date time information." | |
data = get_json_data("TIME_SERIES_DAILY_ADJUSTED", symbol) | |
# print(data.keys()) | |
time_series = data["Time Series (Daily)"] | |
final_time = "" | |
print(time_series) | |
# 查找最接近查询日期的数据 | |
for timestamp, daily_data in time_series.items(): | |
print(timestamp) | |
if timestamp == date: | |
open_price = daily_data["1. open"] | |
high_price = daily_data["2. high"] | |
low_price = daily_data["3. low"] | |
close_price = daily_data["4. close"] | |
volume = daily_data["6. volume"] | |
break | |
elif timestamp < date: | |
final_time = timestamp | |
open_price = time_series[timestamp]["1. open"] | |
high_price = time_series[timestamp]["2. high"] | |
low_price = time_series[timestamp]["3. low"] | |
close_price = time_series[timestamp]["4. close"] | |
volume = time_series[timestamp]["6. volume"] | |
break | |
return { | |
"open": open_price, | |
"close": close_price, | |
"high": high_price, | |
"low": low_price, | |
"symbol": symbol, | |
"date": final_time, | |
"volume": volume, | |
} | |
def get_open_info(region: str = "United States"): | |
"""get information about if the market in the region is open""" | |
url = "https://www.alphavantage.co/query?function=MARKET_STATUS&apikey=" + KEY | |
r = requests.get(url) | |
data = json.loads(r.text) | |
for item in data["markets"]: | |
if item["region"] == region: | |
return item["current_status"] | |
return " not found" | |
def get_exchange_rate(from_currency: str = "USD", to_currency: str = "BTC"): | |
"""This API returns the realtime exchange rate for a pair of digital currency (e.g., Bitcoin) and physical currency (e.g., USD).""" | |
url = ( | |
"https://www.alphavantage.co/query?function=CURRENCY_EXCHANGE_RATE&from_currency=" | |
+ from_currency | |
+ "&to_currency=" | |
+ to_currency | |
+ "&apikey=" | |
+ KEY | |
) | |
r = requests.get(url) | |
data = json.loads(r.text) | |
try: | |
rate = data["Realtime Currency Exchange Rate"]["5. Exchange Rate"] | |
return rate | |
except: | |
return "error" | |
return tool | |