TLDR:我无法从 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 年发布)一起安装,但由于雅虎最近的更改,该版本现在失败了。这就是我验证该库的安装版本的方法:
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。
在不升级整个操作系统的情况下,让在线报价再次运行的最佳方法是什么?
可能有多种方法可以获取此库的更新版本,包括从发行版的下一个版本下载较新的软件包并强制安装,或者将下一个发行版添加到 apt.sources.list 并固定版本这样只有这个包更新,通过添加下一个发行版的
deb-src
标头并运行来构建自定义向后移植apt source -b
,或者我没有考虑到的其他一些事情(在下面添加您的解决方案!)鉴于未来几周内应该会发布新的 24.04 LTS 版本,以下是我使用以下方法更新库的方法
CPAN
:root
用户,运行perl -MCPAN -e shell
upgrade Finance::Quote
这将安装该库的新系统范围版本,包括更新所有依赖项,这可能需要一段时间。如果您没有安装 C 编译器。您可能需要
sudo apt install build-essential
开始。升级完成后,将来可以使用相同的命令进行升级。虽然这会“污染”您已安装的软件包,但好处是应用程序依赖项不会破坏。缺点是,安装第一次以这种方式安装的发行版软件包可能会在安装其他软件包时降级。
最后,再次运行此命令显示成功,GUI 应用程序现在可以运行: