65.9K
CodeProject 正在变化。 阅读更多。
Home

使用Stocks Tracker API下载股票行情

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.39/5 (9投票s)

2015 年 7 月 14 日

CPOL

6分钟阅读

viewsIcon

38067

本文介绍了如何在Java项目中实现开源的Stocks Tracker API。使用这个库可以轻松地从各种免费在线来源获取个股行情。

引言

如今,许多人正在关注美股市场。其中一些人从事金融行业,而另一些人则通过投资股票来积累退休金。还有些人以炒股为生。

如果你和我一样,是一名软件开发者,并且关注股市,你很可能考虑过在你的应用程序中获取市场信息。

本文将展示如何通过调用现有的Java库来检索股票行情。

API开源

我时常会考虑出于各种目的获取股票行情。有一次是在.NET环境中,有一次是使用Objective-C调用iOS。这次,我将为新的Android应用做这件事。最近,我启动了我的开源项目“Stocks Tracker”,用于Android设备。该Android应用仍在开发中,但我已经编写了用于获取个股详细信息的API库。

你无需自行纠结于选择股票行情来源,因为我的库已经集成了3个来源:Yahoo Finance、Google Finance和MarkitOnDemand。所有这些来源都有各自的优缺点。我稍后会展示我对每个来源的发现,这样你就可以自己决定在你的项目中想使用哪个来源。

此处下载项目。

类结构

生成的类名为Stock。股票行情的最终结果将存储在这个类中。它包含重要字段,例如:

  • ticker – 股票代码
  • lastTrade – 上次交易价格
  • change – 日变动
  • changePercent - 日变动百分比

不幸的是,没有一个通用的金融数据源可以免费填充这个类的所有84个字段。我们必须根据任务需求权衡使用哪个来源。有时,使用多个来源的组合是有意义的。对于StocksTracker API来说,后者并非问题。

StockDownloader是一个类,用于使用mapper类下载个股信息。这个mapper类遵循IStockMapping接口,因此可以注入到StockDownloader类中。

目前,该库有3个映射类:StockYahooMapping(用于从Yahoo Finance获取信息)、StockGoogleMapping(用于从Google Finance获取信息)和StockMerkitindemandMapping(用于从MarkitOnDemand来源获取股票信息)。

类图如下所示

金融在线来源

目前,StocksTracker API集成了3个在线来源:Yahoo Finance、Google Finance和MarkitOnDemand。它们都可以免费使用。

以下是每个来源的优缺点

Yahoo Finance提供非常详细的个股信息。使用此来源,您将获得最全面的股票属性集。然而,您无法免费获得股票价格的实时数据。至少,如果您可以接受20分钟的延迟,您可以使用此来源进行深入分析。

Google Finance提供股票的实时数据。不幸的是,它只提供最基本的一组属性。如果您需要计算投资组合的表现,需要同时获取多只股票的实时行情,那么此来源是个不错的选择。使用Google Finance的缺点似乎是缺乏文档。基本上,Google没有记录此来源的功能(至少根据我的经验)。Google以前曾有过金融API,但他们已停用该旧API。我担心他们也可能停用这个非官方金融来源。目前,它对我来说是一个可靠的来源。我在各种项目中使用它。

MarkitOnDemand提供实时股票行情。他们的API文档齐全。它提供了您可用于股票投资组合计算的基本股票数据。此来源的一个缺点是他们似乎专注于为JQuery应用提供支持。我必须做一些小的变通才能为MarkitOnDemand编写映射类。

Using the Code

多亏了StockDownloader类和IStockMapping接口,您可以轻松地在项目中编码任何来源。在将stocksapi模块导入项目后,以下几行代码将实现神奇效果:

Yahoo Finance

StockYahooMapping stockYahooMapping = new StockYahooMapping();
StockDownloader stockDownloader = new StockDownloader(stockYahooMapping);
Stock stock = stockDownloader.Download("FB");

Google Finance

StockGoogleMapping stockMapping = new StockGoogleMapping();
StockDownloader stockDownloader = new StockDownloader(stockMapping);
Stock stock = stockDownloader.Download("FB");

MarkitOnDemand

StockMarkitondemandMapping stockMapping = new StockMarkitondemandMapping();
StockDownloader stockDownloader = new StockDownloader(stockMapping);
Stock stock = stockDownloader.Download("PAYC");

请注意,股票代码信息作为输入参数在“Download”方法调用中提供。

单元测试详解

我选择Android Studio 1.2.2作为Java开发的IDE。这个项目仍有许多缺失的功能,但随着每次发布的改进,它正在不断完善——Google在这个项目上投入了巨大的精力。在观察了几年的改进后,我决定继续使用Android Studio而不是Eclipse。

现在,得益于Google,我可以在StocksTracker API中使用嵌入式单元测试功能。然而,Android Studio的单元测试包装器仍然存在bug且速度缓慢。希望Google能尽快在这方面有所改进。我建议在将API模块集成到您的项目中之前,先在本地计算机上运行单元测试。

如果您查看主单元测试类StockVariousDownloadersTest,您会看到3个带有“@Test”声明性标签的方法。这些就是您在实际项目中使用它们之前想要运行、测试和可能调试的方法。单元测试有助于持续的更改。如果您决定实现新功能或想更仔细地研究API,您会发现它们非常有用。

在Android Studio中运行单元测试是一个特别简单的步骤。您可以将光标聚焦在一个单元测试方法上,然后右键单击调用上下文菜单,然后选择“Run…”或“Debug…”菜单项。您很快就会在消息窗口中看到运行结果。

如果您决定在自己的项目中编写单元测试,我应该提到,由于这项新功能,最新org.json.json库的JSON支持在Android Studio的Android项目类型中仍然不起作用。我不得不将库版本切换到之前的发布版本。请查看stocksapi模块的build.gradle文件。这是您需要关注的行

compile 'org.json:json:20140107'

结论

开源项目StocksTracker API是一个整合免费在线工具以获取股票市场信息的应用程序。它可以在您自己的Java项目中使用,免费且简单。

单元测试允许开发人员在适配现有API之前对其进行测试和调试。
如果您对该库有任何建议或改进,欢迎为这个开源项目做出贡献。

© . All rights reserved.