结论:我无法从 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
:
- 以
root
用户身份运行perl -MCPAN -e shell
- 使用默认值回答任何问题。如果出现提示并需要,请安装 Term::Readline 和 CPAN::DistnameInfo。
- 进入:
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