如何使用旧的/损坏的 perl Finance::Quote 在 KMyMoney、GNUCash 或其他程序中获取股票报价

如何使用旧的/损坏的 perl Finance::Quote 在 KMyMoney、GNUCash 或其他程序中获取股票报价

结论:我无法从 GnuCash 和 KMyMoney 中获取在线股票报价。看来 perl Finance::Quote 模块出了问题。修复此问题最简单的方法是什么?

背景

许多免费应用程序(如 KMyMoney 和 GnuCash)使用 perl 库 Finance::Quote 从各种网站获取股票、债券和货币报价。但是,这些网站经常更改面向公众的 URL,从而破坏了这些应用程序的此功能。我正在使用长期支持的 Linux 发行版 (Ubuntu LTS),因为我喜欢它的稳定性,但反向移植中没有此库的更新,所以我的软件现在已损坏。

最近在 Ubuntu 22.04 LTS 上也出现了这种情况。KMyMoney 安装了 Finance::Quote 1.51 版(libfinance-quote-perl,于 2021 年发布),但由于 Yahoo 最近的更改,现在此操作失败。以下是我验证此库的安装版本的方法:

perl -MFinance::Quote -e 'print "$Finance::Quote::VERSION\n"'

GnuCash 还有另一个实用程序,您可以用来验证这是否是问题所在(yahoo_json如果不同,请替换为您的数据提供商):

gnc-fq-dump -v yahoo_json AAPL

错误输出如下所示:

Finance::Quote fields Gnucash uses:
    symbol: AAPL                 <=== required
      date: ** missing **        <=== recommended
  currency: ** missing **        <=== required
      last: **missing**          <=\
       nav: **missing**          <=== one of these
     price: **missing**          <=/
  timezone:                      <=== optional

** This stock quote cannot be used by GnuCash!


All fields returned by Finance::Quote for stock AAPL

stock           field  value
-----           -----  -----
AAPL         errormsg: Error retrieving quote for AAPL. Attempt to fetch the URL https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL resulted in HTTP response 401 (Unauthorized)
AAPL             last: **missing**
AAPL              nav: **missing**
AAPL            price: **missing**
AAPL          success: 0
AAPL           symbol: AAPL

我们可以断定这是一个服务器问题,因为它返回了 HTTP 代码 401。

无需升级整个操作系统即可重新运行在线报价的最佳方法是什么?

答案1

有多种方法可以获取该库的更新版本,包括从发行版的下一个版本下载较新的软件包并强制安装,或者将下一个发行版添加到您的 apt.sources.list 并固定版本以便只有此软件包更新,通过添加下deb-src一个发行版的标题并运行来构建自定义反向移植apt source -b,或者其他一些我没有考虑到的事情(在下面添加您的解决方案!)

鉴于未来几周内应该会有新的 24.04 LTS 版本发布,下面是我使用以下命令更新库的方法CPAN

  1. root用户身份运行perl -MCPAN -e shell
  2. 使用默认值回答任何问题。如果出现提示并需要,请安装 Term::Readline 和 CPAN::DistnameInfo。
  3. 进入:upgrade Finance::Quote

这将安装库的新系统版本,包括更新所有依赖项,这可能需要一段时间。如果您尚未安装 C 编译器,您可能需要先sudo apt install build-essential安装。

升级完成后,以后可以使用相同的命令进行升级。虽然这会“污染”您已安装的软件包,但好处是应用程序依赖关系不会中断。缺点是,当安装其他软件包时,以这种方式首次安装的发行版软件包可能会降级。

最后,再次运行此命令显示成功并且 GUI 应用程序现在可以运行:

gnc-fq-dump -v yahoo_json AAPL
The output now looks something like the following:

    Finance::Quote fields Gnucash uses:
    symbol: AAPL                 <=== required
      date: 04/17/2024           <=== recommended
  currency: USD                  <=== required
      last: 168                  <=\
       nav:                      <=== one of these
     price:                      <=/
  timezone:                      <=== optional

All fields returned by Finance::Quote for stock AAPL

stock           field  value
-----           -----  -----
AAPL            close: 169.38
AAPL         currency: USD
AAPL             date: 04/17/2024
AAPL        div_yield: 0.56086904
[...]
AAPL          success: 1
AAPL           symbol: AAPL
AAPL             type: EQUITY
AAPL           volume: 50205853
AAPL       year_range:        162.8 - 199.62

相关内容