2.2 使用ChatGPT链接金融APIs
ChatGPT在帮助理解和构建API请求中发挥着重要的辅助角色。但由于ChatGPT是一个纯粹的文本生成模型,它本身并不能直接与API进行交互,换句话说,ChatGPT不能替你发送API请求或处理API响应。为了实际使用API,你还需要自己写代码,或者使用Python中的某些编程库或工具。以下是一种利用ChatGPT在编写API请求时起辅助作用的方法。
(1)理解API文档:对于一个新的API,其文档通常是最重要的参考资料。你可以输入如“解释Yahoo Finance API的使用方法”等问题,ChatGPT可以帮助你理解API文档的关键内容。
(2)构造API请求:你可以询问ChatGPT如何构造特定的API请求。例如,你可以问“如何使用requests库获取Yahoo Finance API的股票数据?”,ChatGPT可以生成示例代码,帮助你理解如何构造请求。
(3)解析API响应:处理API响应通常需要一定的编程知识。你可以询问ChatGPT如何解析特定格式(如JSON)的响应,或者如何处理特定的API错误。
以下是一个示例对话,展示了如何使用ChatGPT来帮助你使用Yahoo Finance API。
请告诉我如何使用requests库获取Yahoo Finance API的股票数据。
ChatGPT:
当然,以下是一个使用Python的requests库从Yahoo Finance API获取特定股票数据的基本示例。假设我们想要获取苹果公司的股票数据:

在这个例子中,我们定义了一个函数“get_stock_data”,这个函数接受一个股票符号作为参数,然后发送GET请求到Yahoo Finance API的特定URL,最后解析并返回响应的JSON数据。
这只是一个基本示例,实际使用中你可能需要处理更多的边界情况和错误,以及解析你感兴趣的特定数据。
如何解析返回的JSON数据并获取收盘价?
ChatGPT:
如果你想从Yahoo Finance API返回的数据中提取收盘价,你可以使用Python的json库来解析数据,然后访问特定的键来获取收盘价。以下是一个基本示例。

在这个例子中,我们修改了“get_stock_data”函数,并改名为“get_closing_price”。这个函数现在会返回请求的股票的收盘价,而不是完整的数据。
注意,上述代码假设响应数据包含特定的键,并且最后一个收盘价位于‘close’列表的末尾。实际使用中你应该添加错误处理代码,以处理可能的API错误或数据缺失。
2.2.1 报错分析
前面已经提到,在实际使用中你应该添加错误处理代码,以处理可能的API错误或数据缺失。实际运行过程中,也确实有可能会发生报错,如图2.1所示。

图2.1 API链接提示报错(1)
这个错误通常发生在尝试解析空的、无效的或不存在的JSON数据时。在本案例中,可能的原因如下。
(1)请求的URL可能是错误的:API请求是通过特定的URL进行的,这个URL通常包含了API的服务地址、请求的数据类型及一些其他参数。如果这个URL包含了无效的字符或不符合预期的格式,可能会导致请求失败。这时,你需要检查你的URL是否正确,以及它是否返回了你预期的JSON数据。你可以尝试在浏览器中直接打开这个URL,看看它是否能够返回正确的数据。
(2)API未返回数据:有些时候,即使你的请求发送成功,API也可能不返回任何数据。这可能是由于服务器错误、未通过API的身份验证、达到API的请求限额或请求的资源不存在等原因造成的。你可以检查API的文档,看看是否需要进行身份验证,或者你的请求是否超过了API的限额。同时,你也需要确认你请求的资源是否确实存在。
(3)网络问题:网络问题也可能导致API请求失败。如果你的网络连接不稳定,或者网络速度过慢,可能会导致请求无法正确地发送或接收。你可以尝试检查你的网络连接,或者在网络状况更好的时候再次发送请求。
这时,可以寻求ChatGPT来辅助解决这一问题。
报错显示为JSONDecodeError: Expecting value: line 1 column 1 (char 0),如何解决?
ChatGPT:
要解决这个问题,你可以首先检查URL是否正确,然后检查API是否有特殊的使用限制或身份验证需求。同时,添加错误处理代码,以便在API请求失败时得到更有用的错误消息。例如:

这个版本的函数添加了错误处理,可以更具体地报告失败的原因。
我们运行这个版本的代码,得到的结果如图2.2所示。

图2.2 API链接提示报错(2)
图2.2中显示的报错表明你试图访问的服务器拒绝了你的请求。这通常意味着你没有正确地进行身份验证,或者服务器不允许你访问请求的资源。在这个特定的情况下,Yahoo可能在你的请求中没有发现需要的认证信息,或者它可能限制了对API的访问。
Yahoo Finance API可能限制了一些未经认证的请求,因为它想防止滥用。有一些解决办法,具体如下。
(1)查看Yahoo Finance的API文档:Yahoo可能会在文档中提供关于如何访问它的API的指南。它可能要求你注册一个应用,然后使用应用的API密钥进行请求。
(2)使用有权访问Yahoo Finance API的第三方库:有一些Python库,如yfinance或yahoofinancials,可以让你更容易地访问Yahoo Finance的数据。这些库可能已经处理了与API通信所需的认证和格式问题。
2.2.2 使用第三方库:yfinance
yfinance是一个常用的Python库,它使获取Yahoo Finance的金融数据变得更加方便。其内部处理了API请求和数据解析的过程,使我们可以直接获得整洁且易于处理的数据。
(1)首先,我们需要安装yfinance库。在命令行或终端中输入以下命令。

(2)使用yfinance获取股票历史数据非常简单。下面是一个例子,展示如何获取苹果公司在2023年1月1日至2023年7月1日的历史行情数据。


运行这段代码,将得到上述时间段每日的收盘价,如图2.3所示。注意,这将返回一个Pandas Series,其中索引是日期,值是收盘价。
尽管yfinance提供了获取Yahoo Finance数据的简单方法,但它的主要弊端是对基本面数据的支持不足,如财务报表等,因此如果需要这类数据,我们需要使用其他库,如yahoofinancials。

图2.3 通过yfinance下载上市公司股价数据
2.2.3 使用第三方库:yahoofinancials
yahoofinancials是一个强大且灵活的工具,能够获取到Yahoo Finance上的大量数据,包括基本面数据。
(1)首先,我们需要安装yahoofinancials库。在命令行或终端中输入以下命令。

(2)yahoofinancials的使用方法也相当简单。下面是一个获取苹果公司财务报表数据的示例。

上述代码会输出苹果公司近年来的年度财务摘要数据,数据内容包括营业收入、净利润等各项财务指标,如图2.4所示。注意,这将返回一个字典,其中包含了详细的财务数据。

图2.4 通过yahoofinancials下载上市公司财务数据(部分)
总的来说,yahoofinancials是一个获取Yahoo Finance数据的强大工具,尤其是在获取基本面数据方面,它的功能远超yfinance和直接使用API请求。
2.2.4 其他第三方库
除前文提到的yfinance和yahoofinancials外,还有许多其他的第三方库可以用来获取Yahoo Finance的数据。下面我们将介绍RapidAPI和Yahoo_fin这两个库。
(1)RapidAPI:RapidAPI是一个API市场,提供了许多不同的API,包括Yahoo Finance的API。通过RapidAPI,用户可以访问各种金融数据,包括股票报价、历史数据、财务数据等。使用RapidAPI的优点是,它提供了统一的API接口,可以访问其市场上的各种API,而不需要单独与每个API提供商建立关系。同时,RapidAPI提供了详细的文档和使用案例,便于开发者快速上手。但是,RapidAPI的一些API可能需要付费才能使用。
(2)Yahoo_fin:Yahoo_fin是一个免费的库,专门用于从Yahoo Finance抓取数据。Yahoo_fin提供了一种简单易用的方式,获取股票报价、历史市场数据、选项链、股息、分割和基本面数据等。与yfinance和yahoofinancials不同,Yahoo_fin也支持抓取实时的股票报价和交易量等信息。然而,因为Yahoo_fin是基于网页抓取的,所以如果Yahoo Finance的网页布局发生变化,Yahoo_fin可能会停止工作。
以上这些库都是获取金融市场数据的有用工具,每个库都有其自身的优点和缺点。选择哪个库取决于你的具体需求,比如,你需要什么类型的数据、你的预算是多少,以及你是否需要实时数据等。