使用股票代码输入,从雅虎或谷歌API中检索公司名称。

16

我只是想要一个简单的API返回,可以输入股票代码并接收完整的公司名称:

当输入 ticker('MSFT') 时,将返回 "Microsoft"。


1
你试过什么了吗? - hd1
我查看了许多以前的答案,但没有找到任何最新的内容。 - paulz
你尝试写了哪些代码? - hd1
7个回答

16

import yfinance as yf

msft = yf.Ticker("MSFT")

company_name = msft.info['longName']

#Output = 'Microsoft Corporation'

这样,您将能够从股票符号中获取公司的全名。


2
我喜欢使用yfinance,并经常使用它。不幸的是,似乎info方法有些不稳定,这取决于你正在处理的股票。上面提到的一些其他建议似乎来自雅虎和谷歌API仍在运行的时代。 - dborger
实际上,这个答案并不适用于所有股票。例如,标记为OGEN的股票(即Oragenics,Inc)会产生以下错误:IndexError:列表索引超出范围我猜这只是因为yfinance没有更新到最新版本。此外,如果您提供一个不存在的股票代码,例如“- -”,它会抛出一个ValueError:ValueError:找不到任何表格而理想情况下,我希望得到类似于“None”的结果。 - alejandro
1
脚本返回了错误:“--------------------------------------------------------------------------- KeyError Traceback (most recent call last) Cell In [6], line 5 1 import yfinance as yf 3 msft = yf.Ticker("MSFT") ----> 5 company_name = msft.info['longName']KeyError: 'longName'” - efueyo

14

你需要首先找到一个允许你查找股票代码并提供信息的网站/API。然后,你可以查询该API以获取信息。

我在这里想出了一个快速而简单的解决方案:

import requests


def get_symbol(symbol):
    symbol_list = requests.get("http://chstocksearch.herokuapp.com/api/{}".format(symbol)).json()

    for x in symbol_list:
        if x['symbol'] == symbol:
            return x['company']


company = get_symbol("MSFT")

print(company)

这个网站只提供公司名称,我没有放置任何错误检查。您需要使用requests模块才能使其工作。请使用pip install requests进行安装。

更新: 这里是使用Yahoo! Finance API的代码示例:

import requests


def get_symbol(symbol):
    url = "http://d.yimg.com/autoc.finance.yahoo.com/autoc?query={}&region=1&lang=en".format(symbol)

    result = requests.get(url).json()

    for x in result['ResultSet']['Result']:
        if x['symbol'] == symbol:
            return x['name']


company = get_symbol("MSFT")

print(company)

6
可以根据公司名称返回股票代码吗?在你的代码中我应该修改哪些参数? - prashanth manohar
看看我的答案。 - Rohith Nambiar

4
使用模糊匹配从公司名称中获取公司标志或反过来。
from fuzzywuzzy import process
import requests

def getCompany(text):
    r = requests.get('https://api.iextrading.com/1.0/ref-data/symbols')
    stockList = r.json()
    return process.extractOne(text, stockList)[0]


getCompany('GOOG')
getCompany('Alphabet')

该API似乎不再可用 - 请求返回403。 - bsplosion

1
这里是另一个Yahoo API调用。@masnun的调用将返回所有包含搜索参数的结果,例如尝试AMD(Advanced Micro Devices):http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=amd&region=1&lang=en,会给你AMD (Advanced Micro Devices, Inc.),AMDA (Amedica Corporation),DOX (Amdocs Limited)等。
如果您知道股票代码,可以尝试以下任一Yahoo API: http://finance.yahoo.com/d/quotes.csv?s=amd&f=nb4t8(有很好的文档,此特定调用请求n =名称;b4 =账面价值;t8 = 1年目标价格)。https://query2.finance.yahoo.com/v7/finance/options/amd(文档不是很好,但是新的……在此处查看有关此API的更多信息:https://dev59.com/r5nga4cB1Zd3GeqPYGmu#40243903

忘记包含谷歌API,这对股票报价似乎还可以,但不可靠于期权链的完整数据: 'https://www.google.com/finance?q=nyse:amd&output=json'


1

如果您想通过公司名称而不是其代码来获取其股票价格,可以采取以下步骤:

import yfinance as yf

def getStock(search_term):
    results = []
    query = requests.get(f'https://yfapi.net/v6/finance/autocomplete?region=IN&lang=en&query={search_term}', 
    headers={
        'accept': 'application/json',
        'X-API-KEY': 'API_KEY'
    })
    response = query.json()
    for i in response['ResultSet']['Result']:
        final = i['symbol']
        results.append(final)

    try:
        stock = yf.Ticker(results[0])
        price = stock.info["regularMarketPrice"]
        full_name = stock.info['longName']
        curreny = stock.info["currency"]
    except Exception as e:
        print('Something went wrong')

return f"The stock price of {full_name} is {price} {curreny}"

stock = input("Enter the company's name: ")
final = getStock(stock)
print(final)

输出:

Enter the company's name: Apple
The stock price of Apple Inc. is 172.39 USD

1
对于那些寻找以公司名称而非股票代码为参数的函数的人来说,这是一个非常简单的解决方案。
它使用了雅虎财经的一个端点,根据名称返回一个股票代码。
import requests

def get_ticker (company_name):
    url = "https://query2.finance.yahoo.com/v1/finance/search"
    user_agent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64)"
    params = {"q": company_name, "quotes_count": 1, "country": "United States"}

    res = requests.get(url=url, params=params, headers={'User-Agent': user_agent})
    data = res.json()

    company_code = data['quotes'][0]['symbol']
    return company_code

对于user agent,您可以随意更改或保持原样。

0

我使用Quandl来获取价格,所以当我遇到类似问题时,我决定在那里检查。如果你访问https://www.quandl.com/data/EOD-End-of-Day-US-Stock-Prices/documentation,在页面的四分之一处的“Available Tickers”下,有一个链接可以下载包含名称和代码的CSV文件。然后,我使用以下代码创建一个以代码为键、名称为值的字典。

def companyNames():
    cnames = pd.read_csv('ticker_list.csv')
    cnames_dict = pd.Series(cnames.Name.values, index=cnames.Ticker).to_dict()
    
    return cnames_dict

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接