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="hello@contact.com", | |
| legal_info_url="hello@legal.com", | |
| ) | |
| 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 | |